LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJsYXAuaAogKiBWZXJzaW9uOiAgICAgICAwLjgKICogRGVzY3JpcHRpb246ICAgQW4gSXJEQSBMQVAgZHJpdmVyIGZvciBMaW51eAogKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCiAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogQ3JlYXRlZCBhdDogICAgTW9uIEF1ZyAgNCAyMDo0MDo1MyAxOTk3CiAqIE1vZGlmaWVkIGF0OiAgIEZyaSBEZWMgMTAgMTM6MjE6MTcgMTk5OQogKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIAogKiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LTE5OTkgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiwgCiAqICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgogKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgogKiAgICAgCiAqICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAogKiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCiAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgogKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgSVJMQVBfSAojZGVmaW5lIElSTEFQX0gKCiNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgojaW5jbHVkZSA8bGludXgvdGltZXIuaD4KCiNpbmNsdWRlIDxuZXQvaXJkYS9pcnF1ZXVlLmg+CQkvKiBpcmRhX3F1ZXVlX3QgKi8KI2luY2x1ZGUgPG5ldC9pcmRhL3Fvcy5oPgkJLyogc3RydWN0IHFvc19pbmZvICovCiNpbmNsdWRlIDxuZXQvaXJkYS9kaXNjb3ZlcnkuaD4JCS8qIGRpc2NvdmVyeV90ICovCiNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhcF9ldmVudC5oPgkvKiBJUkxBUF9TVEFURSwgLi4uICovCiNpbmNsdWRlIDxuZXQvaXJkYS9pcm1vZC5oPgkJLyogc3RydWN0IG5vdGlmeV90ICovCgojZGVmaW5lIENPTkZJR19JUkRBX0RZTkFNSUNfV0lORE9XIDEKCiNkZWZpbmUgTEFQX1JFTElBQkxFICAgMQojZGVmaW5lIExBUF9VTlJFTElBQkxFIDAKCiNkZWZpbmUgTEFQX0FERFJfSEVBREVSIDEgIC8qIElyTEFQIEFkZHJlc3MgSGVhZGVyICovCiNkZWZpbmUgTEFQX0NUUkxfSEVBREVSIDEgIC8qIElyTEFQIENvbnRyb2wgSGVhZGVyICovCgovKiBNYXkgYmUgZGlmZmVyZW50IHdoZW4gd2UgZ2V0IFZGSVIgKi8KI2RlZmluZSBMQVBfTUFYX0hFQURFUiAoTEFQX0FERFJfSEVBREVSICsgTEFQX0NUUkxfSEVBREVSKQoKLyogRWFjaCBJckRBIGRldmljZSBnZXRzIGEgcmFuZG9tIDMyIGJpdHMgSVJMQVAgZGV2aWNlIGFkZHJlc3MgKi8KI2RlZmluZSBMQVBfQUxFTiA0CgojZGVmaW5lIEJST0FEQ0FTVCAgMHhmZmZmZmZmZiAvKiBCcm9hZGNhc3QgZGV2aWNlIGFkZHJlc3MgKi8KI2RlZmluZSBDQlJPQURDQVNUIDB4ZmUgICAgICAgLyogQ29ubmVjdGlvbiBicm9hZGNhc3QgYWRkcmVzcyAqLwojZGVmaW5lIFhJRF9GT1JNQVQgMHgwMSAgICAgICAvKiBEaXNjb3ZlcnkgWElEIGZvcm1hdCAqLwoKLyogTm9ib2R5IHNlZW1zIHRvIHVzZSB0aGlzIGNvbnN0YW50LiAqLwojZGVmaW5lIExBUF9XSU5ET1dfU0laRSA4Ci8qIFdlIGtlZXAgdGhlIExBUCBxdWV1ZSB2ZXJ5IHNtYWxsIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgYnVmZmVyaW5nLgogKiB0aGlzIGltcHJvdmUgbGF0ZW5jeSBhbmQgcmVkdWNlIHJlc291cmNlIGNvbnN1bXB0aW9uLgogKiBUaGlzIHdvcmsgb25seSBiZWNhdXNlIHdlIGhhdmUgc3luY2hyb25vdXMgcmVmaWxsaW5nIG9mIElyTEFQIHRocm91Z2gKICogdGhlIGZsb3cgY29udHJvbCBtZWNoYW5pc20gKHZpYSBzY2hlZHVsZXIgYW5kIElyVFRQKS4KICogMiBidWZmZXJzIGlzIHRoZSBtaW5pbXVtIHdlIGNhbiB3b3JrIHdpdGgsIG9uZSB0aGF0IHdlIHNlbmQgd2hpbGUgcG9sbGluZwogKiBJclRUUCwgYW5kIGFub3RoZXIgdG8ga25vdyB0aGF0IHdlIHNob3VsZCBub3Qgc2VuZCB0aGUgcGYgYml0LgogKiBKZWFuIElJICovCiNkZWZpbmUgTEFQX0hJR0hfVEhSRVNIT0xEICAgICAyCi8qIFNvbWUgcmFyZSBub24gVFRQIGNsaWVudHMgZG9uJ3QgaW1wbGVtZW50IGZsb3cgY29udHJvbCwgYW5kCiAqIHNvIGRvbid0IGNvbXBseSB3aXRoIHRoZSBhYm92ZSBsaW1pdCAoYW5kIG5laXRoZXIgd2l0aCB0aGlzIG9uZSkuCiAqIEZvciBJQVAgYW5kIG1hbmFnZW1lbnQsIGl0IGRvZXNuJ3QgbWF0dGVyLCBiZWNhdXNlIHRoZXkgbmV2ZXIgdHJhbnNtaXQgbXVjaC4KICouRm9yIElyTFBULCB0aGlzIHNob3VsZCBiZSBmaXhlZC4KICogLSBKZWFuIElJICovCiNkZWZpbmUgTEFQX01BWF9RVUVVRSAxMAovKiBQbGVhc2Ugbm90ZSB0aGF0IGFsbCBJckRBIG1hbmFnZW1lbnQgZnJhbWVzIChMTVAvVFRQIGNvbm4gcmVxL2Rpc2MgYW5kCiAqIElBUyBxdWVyaWVzKSBmYWxsIGluIHRoZSBzZWNvbmQgY2F0ZWdvcnkgYW5kIGFyZSBzZW50IHRvIExBUCBldmVuIGlmIFRUUAogKiBpcyBzdG9wcGVkLiBUaGlzIG1lYW5zIHRoYXQgdGhvc2UgZnJhbWVzIHdpbGwgd2FpdCBvbmx5IGEgbWF4aW11bSBvZgogKiB0d28gKDIpIGRhdGEgZnJhbWVzIGJlZm9yZSBiZWVpbmcgc2VudCBvbiB0aGUgIndpcmUiLCB3aGljaCBzcGVlZCB1cAogKiBuZXcgc29ja2V0IHNldHVwIHdoZW4gdGhlIGxpbmsgaXMgc2F0dXJhdGVkLgogKiBTYW1lIHN0b3J5IGZvciB0d28gc29ja2V0cyBjb21wZXRpbmcgZm9yIHRoZSBtZWRpdW0gOiBpZiBvbmUgc2F0dXJhdGVzCiAqIHRoZSBMQVAsIHdoZW4gdGhlIG90aGVyIHdhbnQgdG8gdHJhbnNtaXQgaXQgb25seSBoYXMgdG8gd2FpdCBmb3IKICogbWF4aW11bSB0aHJlZSAoMykgcGFja2V0cyAoMiArIG9uZSBzY2hlZHVsaW5nKSwgd2hpY2ggaW1wcm92ZSBwZXJmb3JtYW5jZQogKiBvZiBkZWxheSBzZW5zaXRpdmUgYXBwbGljYXRpb25zLgogKiBKZWFuIElJICovCgojZGVmaW5lIE5SX0VYUEVDVEVEICAgICAxCiNkZWZpbmUgTlJfVU5FWFBFQ1RFRCAgIDAKI2RlZmluZSBOUl9JTlZBTElEICAgICAtMQoKI2RlZmluZSBOU19FWFBFQ1RFRCAgICAgMQojZGVmaW5lIE5TX1VORVhQRUNURUQgICAwCiNkZWZpbmUgTlNfSU5WQUxJRCAgICAgLTEKCi8qCiAqICBNZXRhIGluZm9ybWF0aW9uIHBhc3NlZCB3aXRoaW4gdGhlIElyTEFQIHN0YXRlIG1hY2hpbmUKICovCnN0cnVjdCBpcmxhcF9pbmZvIHsKCV9fdTggY2FkZHI7ICAgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCglfX3U4IGNvbnRyb2w7IC8qIEZyYW1lIHR5cGUgKi8KICAgICAgICBfX3U4IGNtZDsKCglfX3UzMiBzYWRkcjsKCV9fdTMyIGRhZGRyOwoJCglpbnQgcGY7ICAgICAgICAvKiBQb2xsL2ZpbmFsIGJpdCBzZXQgKi8KCglfX3U4ICBucjsgICAgICAvKiBTZXF1ZW5jZSBudW1iZXIgb2YgbmV4dCBmcmFtZSBleHBlY3RlZCAqLwoJX191OCAgbnM7ICAgICAgLyogU2VxdWVuY2UgbnVtYmVyIG9mIGZyYW1lIHNlbnQgKi8KCglpbnQgIFM7ICAgICAgICAvKiBOdW1iZXIgb2Ygc2xvdHMgKi8KCWludCAgc2xvdDsgICAgIC8qIFJhbmRvbSBjaG9zZW4gc2xvdCAqLwoJaW50ICBzOyAgICAgICAgLyogQ3VycmVudCBzbG90ICovCgoJZGlzY292ZXJ5X3QgKmRpc2NvdmVyeTsgLyogRGlzY292ZXJ5IGluZm9ybWF0aW9uICovCn07CgovKiBNYWluIHN0cnVjdHVyZSBvZiBJckxBUCAqLwpzdHJ1Y3QgaXJsYXBfY2IgewoJaXJkYV9xdWV1ZV90IHE7ICAgICAvKiBNdXN0IGJlIGZpcnN0ICovCgltYWdpY190IG1hZ2ljOwoKCS8qIERldmljZSB3ZSBhcmUgYXR0YWNoZWQgdG8gKi8KCXN0cnVjdCBuZXRfZGV2aWNlICAqbmV0ZGV2OwoJY2hhcgkJaHdfbmFtZVsyKklGTkFNU0laICsgMV07CgoJLyogQ29ubmVjdGlvbiBzdGF0ZSAqLwoJdm9sYXRpbGUgSVJMQVBfU1RBVEUgc3RhdGU7ICAgICAgIC8qIEN1cnJlbnQgc3RhdGUgKi8KCgkvKiBUaW1lcnMgdXNlZCBieSBJckxBUCAqLwoJc3RydWN0IHRpbWVyX2xpc3QgcXVlcnlfdGltZXI7CglzdHJ1Y3QgdGltZXJfbGlzdCBzbG90X3RpbWVyOwoJc3RydWN0IHRpbWVyX2xpc3QgZGlzY292ZXJ5X3RpbWVyOwoJc3RydWN0IHRpbWVyX2xpc3QgZmluYWxfdGltZXI7CglzdHJ1Y3QgdGltZXJfbGlzdCBwb2xsX3RpbWVyOwoJc3RydWN0IHRpbWVyX2xpc3Qgd2RfdGltZXI7CglzdHJ1Y3QgdGltZXJfbGlzdCBiYWNrb2ZmX3RpbWVyOwoKCS8qIE1lZGlhIGJ1c3kgc3R1ZmYgKi8KCXN0cnVjdCB0aW1lcl9saXN0IG1lZGlhX2J1c3lfdGltZXI7CglpbnQgbWVkaWFfYnVzeTsKCgkvKiBUaW1lb3V0cyB3aGljaCB3aWxsIGJlIGRpZmZlcmVudCB3aXRoIGRpZmZlcmVudCB0dXJuIHRpbWUgKi8KCWludCBzbG90X3RpbWVvdXQ7CglpbnQgcG9sbF90aW1lb3V0OwoJaW50IGZpbmFsX3RpbWVvdXQ7CglpbnQgd2RfdGltZW91dDsKCglzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cTsgIC8qIEZyYW1lcyB0byBiZSB0cmFuc21pdHRlZCAqLwoJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eHFfdWx0cmE7CgogCV9fdTggICAgY2FkZHI7ICAgICAgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KCV9fdTMyICAgc2FkZHI7ICAgICAgICAvKiBTb3VyY2UgZGV2aWNlIGFkZHJlc3MgKi8KCV9fdTMyICAgZGFkZHI7ICAgICAgICAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLwoKCWludCAgICAgcmV0cnlfY291bnQ7ICAvKiBUaW1lcyB0cmllZCB0byBlc3RhYmxpc2ggY29ubmVjdGlvbiAqLwoJaW50ICAgICBhZGRfd2FpdDsgICAgIC8qIFRydWUgaWYgd2UgYXJlIHdhaXRpbmcgZm9yIGZyYW1lICovCgoJX191OCAgICBjb25uZWN0X3BlbmRpbmc7CglfX3U4ICAgIGRpc2Nvbm5lY3RfcGVuZGluZzsKCgkvKiAgVG8gc2VuZCBhIGZhc3RlciBSUiBpZiB0eCBxdWV1ZSBlbXB0eSAqLwojaWZkZWYgQ09ORklHX0lSREFfRkFTVF9SUgoJaW50ICAgICBmYXN0X1JSX3RpbWVvdXQ7CglpbnQgICAgIGZhc3RfUlI7ICAgICAgCiNlbmRpZiAvKiBDT05GSUdfSVJEQV9GQVNUX1JSICovCgkKCWludCBOMTsgLyogTjEgKiBGLXRpbWVyID0gTmVnaXRpYXRlZCBsaW5rIGRpc2Nvbm5lY3Qgd2FybmluZyB0aHJlc2hvbGQgKi8KCWludCBOMjsgLyogTjIgKiBGLXRpbWVyID0gTmVnaXRpYXRlZCBsaW5rIGRpc2Nvbm5lY3QgdGltZSAqLwoJaW50IE4zOyAvKiBDb25uZWN0aW9uIHJldHJ5IGNvdW50ICovCgoJaW50ICAgICBsb2NhbF9idXN5OwoJaW50ICAgICByZW1vdGVfYnVzeTsKCWludCAgICAgeG1pdGZsYWc7CgoJX191OCAgICB2czsgICAgICAgICAgICAvKiBOZXh0IGZyYW1lIHRvIGJlIHNlbnQgKi8KCV9fdTggICAgdnI7ICAgICAgICAgICAgLyogTmV4dCBmcmFtZSB0byBiZSByZWNlaXZlZCAqLwoJX191OCAgICB2YTsgICAgICAgICAgICAvKiBMYXN0IGZyYW1lIGFja2VkICovCiAJaW50ICAgICB3aW5kb3c7ICAgICAgICAvKiBOciBvZiBJLWZyYW1lcyBhbGxvd2VkIHRvIHNlbmQgKi8KCWludCAgICAgd2luZG93X3NpemU7ICAgLyogQ3VycmVudCBuZWdvdGlhdGVkIHdpbmRvdyBzaXplICovCgojaWZkZWYgQ09ORklHX0lSREFfRFlOQU1JQ19XSU5ET1cKCV9fdTMyICAgbGluZV9jYXBhY2l0eTsgLyogTnVtYmVyIG9mIGJ5dGVzIGFsbG93ZWQgdG8gc2VuZCAqLwoJX191MzIgICBieXRlc19sZWZ0OyAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgc3RpbGwgYWxsb3dlZCB0byB0cmFuc21pdCAqLwojZW5kaWYgLyogQ09ORklHX0lSREFfRFlOQU1JQ19XSU5ET1cgKi8KCglzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHd4X2xpc3Q7CgoJX191OCAgICBhY2tfcmVxdWlyZWQ7CgkKCS8qIFhJRCBwYXJhbWV0ZXJzICovCiAJX191OCAgICBTOyAgICAgICAgICAgLyogTnVtYmVyIG9mIHNsb3RzICovCglfX3U4ICAgIHNsb3Q7ICAgICAgICAvKiBSYW5kb20gY2hvc2VuIHNsb3QgKi8KIAlfX3U4ICAgIHM7ICAgICAgICAgICAvKiBDdXJyZW50IHNsb3QgKi8KCWludCAgICAgZnJhbWVfc2VudDsgIC8qIEhhdmUgd2Ugc2VudCByZXBseT8gKi8KCgloYXNoYmluX3QgICAqZGlzY292ZXJ5X2xvZzsKIAlkaXNjb3ZlcnlfdCAqZGlzY292ZXJ5X2NtZDsKCglfX3UzMiBzcGVlZDsJCS8qIExpbmsgc3BlZWQgKi8KCglzdHJ1Y3QgcW9zX2luZm8gIHFvc190eDsgICAvKiBRb1MgcmVxdWVzdGVkIGJ5IHBlZXIgKi8KCXN0cnVjdCBxb3NfaW5mbyAgcW9zX3J4OyAgIC8qIFFvUyByZXF1ZXN0ZWQgYnkgc2VsZiAqLwoJc3RydWN0IHFvc19pbmZvICpxb3NfZGV2OyAgLyogUW9TIHN1cHBvcnRlZCBieSBkZXZpY2UgKi8KCglub3RpZnlfdCBub3RpZnk7IC8qIENhbGxiYWNrcyB0byBJckxNUCAqLwoKCWludCAgICBtdHRfcmVxdWlyZWQ7ICAvKiBNaW51bXVtIHR1cm5hcm91bmQgdGltZSByZXF1aXJlZCAqLwoJaW50ICAgIHhib2ZzX2RlbGF5OyAgIC8qIE5yIG9mIFhCT0YncyB1c2VkIHRvIE1UVCAqLwoJaW50ICAgIGJvZnNfY291bnQ7ICAgIC8qIE5lZ290aWF0ZWQgZXh0cmEgQk9GcyAqLwoJaW50ICAgIG5leHRfYm9mczsgICAgIC8qIE5lZ290aWF0ZWQgZXh0cmEgQk9GcyBhZnRlciBuZXh0IGZyYW1lICovCn07CgovKiAKICogIEZ1bmN0aW9uIHByb3RvdHlwZXMgCiAqLwppbnQgaXJsYXBfaW5pdCh2b2lkKTsKdm9pZCBpcmxhcF9jbGVhbnVwKHZvaWQpOwoKc3RydWN0IGlybGFwX2NiICppcmxhcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBxb3NfaW5mbyAqcW9zLAoJCQkgICAgY29uc3QgY2hhciAqaHdfbmFtZSk7CnZvaWQgaXJsYXBfY2xvc2Uoc3RydWN0IGlybGFwX2NiICpzZWxmKTsKCnZvaWQgaXJsYXBfY29ubmVjdF9yZXF1ZXN0KHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgX191MzIgZGFkZHIsIAoJCQkgICBzdHJ1Y3QgcW9zX2luZm8gKnFvcywgaW50IHNuaWZmKTsKdm9pZCBpcmxhcF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CnZvaWQgaXJsYXBfY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CnZvaWQgaXJsYXBfY29ubmVjdF9jb25maXJtKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKCnZvaWQgaXJsYXBfZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQgdW5yZWxpYWJsZSk7CnZvaWQgaXJsYXBfZGF0YV9yZXF1ZXN0KHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQgdW5yZWxpYWJsZSk7CgojaWZkZWYgQ09ORklHX0lSREFfVUxUUkEKdm9pZCBpcmxhcF91bml0ZGF0YV9yZXF1ZXN0KHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKdm9pZCBpcmxhcF91bml0ZGF0YV9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKI2VuZGlmIC8qIENPTkZJR19JUkRBX1VMVFJBICovCgp2b2lkIGlybGFwX2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKik7CnZvaWQgaXJsYXBfZGlzY29ubmVjdF9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBMQVBfUkVBU09OIHJlYXNvbik7Cgp2b2lkIGlybGFwX3N0YXR1c19pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqLCBpbnQgcXVhbGl0eV9vZl9saW5rKTsKCnZvaWQgaXJsYXBfdGVzdF9yZXF1ZXN0KF9fdTggKmluZm8sIGludCBsZW4pOwoKdm9pZCBpcmxhcF9kaXNjb3ZlcnlfcmVxdWVzdChzdHJ1Y3QgaXJsYXBfY2IgKiwgZGlzY292ZXJ5X3QgKmRpc2NvdmVyeSk7CnZvaWQgaXJsYXBfZGlzY292ZXJ5X2NvbmZpcm0oc3RydWN0IGlybGFwX2NiICosIGhhc2hiaW5fdCAqZGlzY292ZXJ5X2xvZyk7CnZvaWQgaXJsYXBfZGlzY292ZXJ5X2luZGljYXRpb24oc3RydWN0IGlybGFwX2NiICosIGRpc2NvdmVyeV90ICpkaXNjb3ZlcnkpOwoKdm9pZCBpcmxhcF9yZXNldF9pbmRpY2F0aW9uKHN0cnVjdCBpcmxhcF9jYiAqc2VsZik7CnZvaWQgaXJsYXBfcmVzZXRfY29uZmlybSh2b2lkKTsKCnZvaWQgaXJsYXBfdXBkYXRlX25yX3JlY2VpdmVkKHN0cnVjdCBpcmxhcF9jYiAqLCBpbnQgbnIpOwppbnQgaXJsYXBfdmFsaWRhdGVfbnJfcmVjZWl2ZWQoc3RydWN0IGlybGFwX2NiICosIGludCBucik7CmludCBpcmxhcF92YWxpZGF0ZV9uc19yZWNlaXZlZChzdHJ1Y3QgaXJsYXBfY2IgKiwgaW50IG5zKTsKCmludCAgaXJsYXBfZ2VuZXJhdGVfcmFuZF90aW1lX3Nsb3QoaW50IFMsIGludCBzKTsKdm9pZCBpcmxhcF9pbml0aWF0ZV9jb25uZWN0aW9uX3N0YXRlKHN0cnVjdCBpcmxhcF9jYiAqKTsKdm9pZCBpcmxhcF9mbHVzaF9hbGxfcXVldWVzKHN0cnVjdCBpcmxhcF9jYiAqKTsKdm9pZCBpcmxhcF93YWl0X21pbl90dXJuX2Fyb3VuZChzdHJ1Y3QgaXJsYXBfY2IgKiwgc3RydWN0IHFvc19pbmZvICopOwoKdm9pZCBpcmxhcF9hcHBseV9kZWZhdWx0X2Nvbm5lY3Rpb25fcGFyYW1ldGVycyhzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpOwp2b2lkIGlybGFwX2FwcGx5X2Nvbm5lY3Rpb25fcGFyYW1ldGVycyhzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCBub3cpOwoKI2RlZmluZSBJUkxBUF9HRVRfSEVBREVSX1NJWkUoc2VsZikgKExBUF9NQVhfSEVBREVSKQojZGVmaW5lIElSTEFQX0dFVF9UWF9RVUVVRV9MRU4oc2VsZikgc2tiX3F1ZXVlX2xlbigmc2VsZi0+dHhxKQoKLyogUmV0dXJuIFRSVUUgaWYgdGhlIG5vZGUgaXMgaW4gcHJpbWFyeSBtb2RlIChpLmUuIG1hc3RlcikKICogLSBKZWFuIElJICovCnN0YXRpYyBpbmxpbmUgaW50IGlybGFwX2lzX3ByaW1hcnkoc3RydWN0IGlybGFwX2NiICpzZWxmKQp7CglpbnQgcmV0OwoJc3dpdGNoKHNlbGYtPnN0YXRlKSB7CgljYXNlIExBUF9YTUlUX1A6CgljYXNlIExBUF9OUk1fUDoKCQlyZXQgPSAxOwoJCWJyZWFrOwoJY2FzZSBMQVBfWE1JVF9TOgoJY2FzZSBMQVBfTlJNX1M6CgkJcmV0ID0gMDsKCQlicmVhazsKCWRlZmF1bHQ6CgkJcmV0ID0gLTE7Cgl9CglyZXR1cm4ocmV0KTsKfQoKLyogQ2xlYXIgYSBwZW5kaW5nIElyTEFQIGRpc2Nvbm5lY3QuIC0gSmVhbiBJSSAqLwpzdGF0aWMgaW5saW5lIHZvaWQgaXJsYXBfY2xlYXJfZGlzY29ubmVjdChzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpCnsKCXNlbGYtPmRpc2Nvbm5lY3RfcGVuZGluZyA9IEZBTFNFOwp9CgojZW5kaWYK