Name: series-workflowpqgpk Phase: Failed StartedAt: 2026-07-27 12:23:24 +0000 UTC FinishedAt: 2026-07-27 12:46:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqgpk[0] Phase: Succeeded StartedAt: 2026-07-27 12:23:24 +0000 UTC FinishedAt: 2026-07-27 12:46:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqgpk[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 12:23:24 +0000 UTC FinishedAt: 2026-07-27 12:46:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkOTBlMGRmNDcyZWQ1ZWU4YjYzYTBjYjNjYThmM2YxYTQ4NWM1NjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjo0NToxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbmluZGV4IDQ3NDUxNDhmZWNmNGZlLi4wNTg5OTlkMGRjNTZmMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5AQCAtOTQsNiAmIzQzOzk0LDcgQEAgcGFyYW1ldGVycywgaW5mbyB2ZXJzaW9ucywgYW5kIG90aGVyIGZlYXR1cmVzIGl0IHN1cHBvcnRzLlxuICAgIG1seDVcbiAgICBtbHhzd1xuICAgIG12ODhlNnh4eFxuJiM0MzsgICBteGw4NjJ4eFxuICAgIG5ldGRldnNpbVxuICAgIG5mcFxuICAgIG9jdGVvbnR4MlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iM2U5ZjdkNGQ0OTY5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG5AQCAtMCwwICYjNDM7MSw2MyBAQFxuJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO214bDg2Mnh4IGRldmxpbmsgc3VwcG9ydFxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZVxuJiM0MztgYG14bDg2Mnh4YGAgZGV2aWNlIGRyaXZlci5cbiYjNDM7XG4mIzQzO0luZm8gdmVyc2lvbnNcbiYjNDM7PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7VGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkXG4mIzQzOyAgIDp3aWR0aHM6IDUgNSA1IDg1XG4mIzQzO1xuJiM0MzsgICAqIC0gTmFtZVxuJiM0MzsgICAgIC0gVHlwZVxuJiM0MzsgICAgIC0gRXhhbXBsZVxuJiM0MzsgICAgIC0gRGVzY3JpcHRpb25cbiYjNDM7ICAgKiAtIGBgYXNpYy5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gODYyOFxuJiM0MzsgICAgIC0gVGhlIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90XG4mIzQzOyAgICAgICByZXBvcnRlZCBmb3IgYSBzd2l0Y2ggc2l0dGluZyBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGFzIHRoZVxuJiM0MzsgICAgICAgcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2l0aCBhIHJ1bm5pbmcgZmlybXdhcmUuXG4mIzQzOyAgICogLSBgYGFzaWMucmV2YGBcbiYjNDM7ICAgICAtIGZpeGVkXG4mIzQzOyAgICAgLSAwXG4mIzQzOyAgICAgLSBUaGUgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdCByZXBvcnRlZFxuJiM0MzsgICAgICAgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBlaXRoZXIuXG4mIzQzOyAgICogLSBgYGZ3YGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gMS4wLjcwXG4mIzQzOyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBzd2l0Y2gsIHJlcG9ydGVkIGFzIGJvdGhcbiYjNDM7ICAgICAgIHJ1bm5pbmcgYW5kIHN0b3JlZCBzaW5jZSB0aGUgc3dpdGNoIGJvb3RzIGl0IGZyb20gaXRzIG93biBmbGFzaC5cbiYjNDM7ICAgICAgIEluIE1DVWJvb3QgcmVzY3VlIG1vZGUgbm90aGluZyBpcyByZXBvcnRlZCB3aGlsZSBhbiBpbnRlcnJ1cHRlZFxuJiM0MzsgICAgICAgZG93bmxvYWQgaXMgc3RpbGwgYmVpbmcgcmVjb3ZlcmVkIGluIHRoZSBiYWNrZ3JvdW5kOyBvbmNlIHRoZVxuJiM0MzsgICAgICAgbG9hZGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBpbWFnZSB0aGUgdmVyc2lvbiBpcyByZXBvcnRlZCAoYXNcbiYjNDM7ICAgICAgIGJvdGggcnVubmluZyBhbmQgc3RvcmVkKSwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IGEgZmxhc2ggd2lsbCBiZVxuJiM0MzsgICAgICAgYWNjZXB0ZWQuIEl0IHJlYWRzIFwmIzM0OzAuMC4wXCYjMzQ7IHdoZW4gdGhlIHN3aXRjaCBjYW1lIHVwIHN0cmFpZ2h0IGludG9cbiYjNDM7ICAgICAgIE1DVWJvb3Qgd2l0aG91dCBldmVyIHJ1bm5pbmcgZmlybXdhcmUuXG4mIzQzO1xuJiM0MztGbGFzaCB1cGRhdGVcbiYjNDM7PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGBgZGV2bGluayBkZXYgZmxhc2hgYC5cbiYjNDM7VGhlIHNpZ25lZCBmaXJtd2FyZSBpbWFnZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgc3dpdGNoIG92ZXIgdGhlIHNhbWVcbiYjNDM7TURJTyBidXMgd2hpY2ggaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgc3dpdGNoLCB0aGVuIHZlcmlmaWVkIGFuZFxuJiM0MztpbnN0YWxsZWQgYnkgdGhlIE1DVWJvb3QgYm9vdGxvYWRlciBydW5uaW5nIG9uIHRoZSBzd2l0Y2guIEFsbCBwb3J0c1xuJiM0MztvZiB0aGUgc3dpdGNoIGFyZSBjbG9zZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdXBkYXRlIGFuZCB0aGUgZHJpdmVyXG4mIzQzO3JlcHJvYmVzIHRoZSBzd2l0Y2ggYWZ0ZXIgaXQgaGFzIHJlYm9vdGVkIGludG8gdGhlIG5ldyBmaXJtd2FyZS4gQVxuJiM0Mztjb21wbGV0ZSBmbGFzaCBhbmQgcmVwcm9iZSBjeWNsZSB0YWtlcyBhYm91dCBvbmUgbWludXRlLlxuJiM0MztcbiYjNDM7QSBzd2l0Y2ggc3R1Y2sgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSwgZS5nLiBhZnRlciBhbiBpbnRlcnJ1cHRlZFxuJiM0Mzt1cGRhdGUsIGlzIHJlZ2lzdGVyZWQgd2l0aG91dCB1c2VyIHBvcnRzLiBJZiB0aGUgcHJldmlvdXMgZG93bmxvYWQgd2FzXG4mIzQzO2ludGVycnVwdGVkIG1pZC10cmFuc2ZlciB0aGUgbG9hZGVyIGlzIHdlZGdlZDsgdGhlIGRyaXZlciBkcmFpbnMgaXRcbiYjNDM7YmFjayB0byBhIGNsZWFuIHJlYWR5IHN0YXRlIGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBjYW4gZWFzaWx5IHRha2VcbiYjNDM7bW9yZSB0aGFuIDEwIG1pbnV0ZXMuIER1cmluZyB0aGF0IHJlY292ZXJ5IGBgZGV2bGluayBkZXYgaW5mb2BgIHJlcG9ydHNcbiYjNDM7bm8gZmlybXdhcmUgdmVyc2lvbiBhbmQgYGBkZXZsaW5rIGRldiBmbGFzaGBgIHJldHVybnMgYGAtRUJVU1lgYC5cbiYjNDM7T25jZSB0aGUgbG9hZGVyIGlzIHJlYWR5IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFwcGVhcnMgYW5kIGZsYXNoaW5nIGFcbiYjNDM7ZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCB0aGUgcmVndWxhciB1cGRhdGUgZmxvdyByZWNvdmVycyB0aGUgc3dpdGNoLlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDYwY2ZmMDA5NTNkY2JlLi4zYTU1ZWQyYmFkOWNiYSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE2MTA3LDYgJiM0MzsxNjEwNyw3IEBAIE06XHREYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tYXhsaW5lYXIsbXhsODYyeHgueWFtbFxuJiM0MztGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG4gRjpcdGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cbiBGOlx0bmV0L2RzYS90YWdfbXhsODYyeHguY1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbkBAIC0xLDMgJiM0MzsxLDMgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSAmIzQzOz0gbXhsODYyeHhfZHNhLm9cbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cbiYjNDM7bXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmhcbmluZGV4IGExODBhNWRlY2ZmYzAxLi42Zjc3MTg5NTk4NGNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXG5AQCAtMTIyNCw2ICYjNDM7MTIyNCwxNiBAQCBzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24ge1xuIFx0X19sZTMyIGl2X2J1aWxkX251bTtcbiB9IF9fcGFja2VkO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgLSBTeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZVxuJiM0MzsgKiBAYWRkcjogMzItYml0IHJlZ2lzdGVyIGFkZHJlc3NcbiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsdWVcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHtcbiYjNDM7XHRfX2xlMzIgYWRkcjtcbiYjNDM7XHRfX2xlMzIgdmFsO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiAvKipcbiAgKiBlbnVtIG14bDg2Mnh4X3BvcnRfdHlwZSAtIFBvcnQgVHlwZVxuICAqIEBNWEw4NjJYWF9MT0dJQ0FMX1BPUlQ6IExvZ2ljYWwgUG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmE4NjU0MjVhYTYxZTFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbkBAIC03MCw3ICYjNDM7NzAsOSBAQFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFx0XHRcdChHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXHRcdFx0KEdQWV9HUFkyWFhfTUFHSUMgJiM0MzsgMHgyKVxuIFxuJiM0MzsjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVx0XHQoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgxKVxuICNkZWZpbmUgU1lTX01JU0NfRldfVkVSU0lPTlx0XHQoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgyKVxuJiM0MzsjZGVmaW5lIFNZU19NSVNDX1JFR19SRFx0XHRcdChTWVNfTUlTQ19NQUdJQyAmIzQzOyAweDgpXG4gXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUdcdChNWEw4NjJYWF9YUENTX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0dFVF9TVEFURVx0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTRiMzU1NDUzNGMyYWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5AQCAtMCwwICYjNDM7MSw5NDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4mIzQzOyAqXG4mIzQzOyAqIFNCIFBESSAtIGZpcm13YXJlIGRvd25sb2FkIGludGVyZmFjZSBvdmVyIGNsYXVzZS0yMiBTTURJT1xuJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICpcbiYjNDM7ICogVGhlIE14TDg2Mnh4IE1DVWJvb3QgbG9hZGVyIGFjY2VwdHMgYSBmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIGZvdXIgXCYjMzQ7U0IgUERJXCYjMzQ7XG4mIzQzOyAqIHJlZ2lzdGVycyBpbiB0aGUgc3dpdGNoIFNNRElPIHJlZ2lzdGVyIHNwYWNlLiBJdCBydW5zIHdoZW5ldmVyIG5vIFdTUFxuJiM0MzsgKiBmaXJtd2FyZSBpcyBhY3RpdmU6IHRoZSBub3JtYWwgZmlybXdhcmUgdXBkYXRlIGVudGVycyBpdCBkZWxpYmVyYXRlbHkgLSB0aGVcbiYjNDM7ICogU1lTX01JU0NfRldfVVBEQVRFIEFQSSBjb21tYW5kIHNldHMgYSBzdGlja3kgcmVzY3VlIGJpdCBhbmQgcmVib290cyBpbnRvXG4mIzQzOyAqIE1DVWJvb3QgLSBhbmQgdGhlIGxvYWRlciBhbHNvIHN0YXlzIGhlcmUgd2hlbiB0aGUgc3RvcmVkIFdTUCBmaXJtd2FyZSBmYWlsc1xuJiM0MzsgKiBpdHMgYm9vdC10aW1lIGludGVncml0eSBjaGVjay4gVGhpcyBkcml2ZXIgZHJpdmVzIHRoZSBsb2FkZXImIzM5O3MgMHhjNTVjXG4mIzQzOyAqIFwmIzM0O2NvbnNvbGVcJiMzNDsgZG93bmxvYWQgcGF0aC5cbiYjNDM7ICpcbiYjNDM7ICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKTpcbiYjNDM7ICogICBNSUkgcmVnIDB4MWYgOj0gXHUwMDNjc2JfcGRpX3JlZ1x1MDAzZSAgICAgIDsgYWRkcmVzcy9wYWdlIGxhdGNoXG4mIzQzOyAqICAgTUlJIHJlZyAweDAwIDo9IC8gPVx1MDAzZSBcdTAwM2N1MTYgZGF0YVx1MDAzZSAgIDsgZGF0YSB3aW5kb3dcbiYjNDM7ICpcbiYjNDM7ICogU0IgUERJIHJlZ2lzdGVycyAoaG9zdCBuYW1lL2FkZHIgIC1cdTAwM2UgIE1DVSBtYWlsYm94KTpcbiYjNDM7ICogICBDVFJMIDB4ZTEwMCAtXHUwMDNlIDB4YzA5Mzg0MDAgICBtb2RlOiBSU1Q9MHgwMCAgUkQ9MHgwMSAgV1I9MHgwMlxuJiM0MzsgKiAgIEFERFIgMHhlMTAxIC1cdTAwM2UgMHhjMDkzODQwNCAgIFNCIHRhcmdldCB3b3JkIGFkZHJlc3MgKFNCMSBiYW5rID0gMHg3ODAwKVxuJiM0MzsgKiAgIERBVEEgMHhlMTAyIC1cdTAwM2UgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZFxuJiM0MzsgKiAgIFNUQVQgMHhlMTAzIC1cdTAwM2UgMHhjMDkzODQwYyAgIGhhbmRzaGFrZTogYSBtYWdpYyAoYmVsb3cpIG9yIGEgYnl0ZSBjb3VudFxuJiM0MzsgKlxuJiM0MzsgKiBTVEFUIG1hZ2ljczpcbiYjNDM7ICogICBSRUFEWSAgMHhjNTVjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGNvbnNvbGUgbG9vcCAgICAgICAgKHRoaXMgZHJpdmVyKVxuJiM0MzsgKiAgIERMX1JEWSAweGMzM2MgICBsb2FkZXIgaWRsZSBpbiB0aGUgZmxhc2hsZXNzIGxvb3BcbiYjNDM7ICogICBTVEFSVCAgMHhmNDhmICAgaG9zdCAgIC1cdTAwM2UgYmVnaW4gZG93bmxvYWQgc2Vzc2lvblxuJiM0MzsgKiAgIEFDSyAgICAweGY0OTAgICBsb2FkZXIgLVx1MDAzZSBTVEFSVCBhY2tub3dsZWRnZWQgKFNUQVJUICYjNDM7IDEpXG4mIzQzOyAqICAgRU5EICAgIDB4M2NjMyAgIGhvc3QgICAtXHUwMDNlIGVuZCBvZiB0cmFuc2ZlciAvIGZpbmFsaXNlXG4mIzQzOyAqICAgUkRSRUcgIDB4ZTJjMCAgIGhvc3QgICAtXHUwMDNlIHJlZ2lzdGVyLXJlYWQgY29tbWFuZCAofCBpbmRleCksIHNlZSBiZWxvd1xuJiM0MzsgKlxuJiM0MzsgKiBDb25zb2xlIGZsYXNoIHBhdGggKFNUQVQ9MHhjNTVjKSAtIG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKCk6XG4mIzQzOyAqXG4mIzQzOyAqICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyXG4mIzQzOyAqICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tXG4mIzQzOyAqICAgcmVzZXQgKENUUkw9QUREUj1EQVRBPTApXG4mIzQzOyAqICAgcmVhZCBTVEFUIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHhjNTVjICAgKFJFQURZLCBpZGxlKVxuJiM0MzsgKiAgIFNUQVQgOj0gU1RBUlQoMHhmNDhmKSAgLS0tLS0tLS0tLS0tLS1cdTAwM2VcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzYy0tLS0tLS0tLS0tLS0tIFNUQVQgPSAweGY0OTAgKEFDSylcbiYjNDM7ICogICBDVFJMIDo9IFdSXG4mIzQzOyAqICAgREFUQSA6PSBoZHJbMC4uOV0gICgyMC1ieXRlIGhlYWRlcjogdHlwZSxzaXplMSxjcmMxLHNpemUyLGNyYzIpXG4mIzQzOyAqICAgcmVzZXQ7IFNUQVQgOj0gMjAgKGhlYWRlciBsZW4pICAtLS0tLVx1MDAzZSBwYXJzZSBoZHI7IHJfcmVtYWluPXNpemUxJiM0MztzaXplMjtcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkFTRSB0YXJnZXQgcmVnaW9uKHMpXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MtLS0tLS0tLS0tLS0tLSBTVEFUPTIxIChsZW4mIzQzOzEpLCB0aGVuIFNUQVQ9MFxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpXG4mIzQzOyAqICAgLS0gcGF5bG9hZCwgc3RyZWFtZWQgaW4gc2xpY2VzOiAtLVxuJiM0MzsgKiAgIENUUkwgOj0gV1JcbiYjNDM7ICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLlxuJiM0MzsgKiAgICAgYXQgd29yZCAxNjM4NDogcmVzZXQ7IEFERFI6PTB4NzgwMDsgQ1RSTDo9V1IgICAoaGFsZi1iYW5rIC1cdTAwM2UgU0IxKVxuJiM0MzsgKiAgICAgYXQgd29yZCAzMjc2MDogZmx1c2ggc2xpY2U6XG4mIzQzOyAqICAgICAgICByZXNldDsgU1RBVCA6PSBcdTAwM2NieXRlc190aGlzX3NsaWNlXHUwMDNlIC0tLVx1MDAzZSByX3JlbWFpbiAtPSBieXRlczsgcHJvZ3JhbVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLSBTVEFUPTAgIChyZWFkeSBmb3IgbmV4dCBzbGljZSlcbiYjNDM7ICogICAuLi4gcmVwZWF0IHVudGlsIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHNlbnQgLi4uXG4mIzQzOyAqICAgU1RBVCA6PSBFTkQoMHgzY2MzKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlIGZpbmFsaXNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKTpcbiYjNDM7ICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyXG4mIzQzOyAqICAgZG9lcyByX3JlbWFpbiAtPSBjb3VudCBhbmQgc3RheXMgaW4gdGhlIHJlY2VpdmUgbG9vcCB3aGlsZSByX3JlbWFpbiAhPSAwLlxuJiM0MzsgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0c1xuJiM0MzsgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHNcbiYjNDM7ICogICBFWEFDVExZIDAuIEEgY291bnQgbGFyZ2VyIHRoYW4gcl9yZW1haW4gdW5kZXJmbG93cyB0aGUgMzItYml0IGNvdW50ZXIgYW5kXG4mIzQzOyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6XG4mIzQzOyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nO1xuJiM0MzsgKiAgICAgLSBpbnRlcnJ1cHRlZC1kb3dubG9hZCByZWNvdmVyeSBmZWVkcyAxIGJ5dGUgYXQgYSB0aW1lIChzZWUgYmVsb3cpLlxuJiM0MzsgKlxuJiM0MzsgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKTpcbiYjNDM7ICogICBBIGhvc3QgdGhhdCBkaWVzIG1pZC1wYXlsb2FkIGxlYXZlcyB0aGUgbG9hZGVyIHNwaW5uaW5nIGluIHRoZSBzbGljZSBsb29wXG4mIzQzOyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCAmIzQzO1xuJiM0MzsgKiAgIFNUQVQ9MSkgdW50aWwgcl9yZW1haW4gcmVhY2hlcyAwLCB0aGVuIFNUQVQ9RU5EOyB0aGUgbG9hZGVyIGZpbmFsaXNlcyB0aGVcbiYjNDM7ICogICAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zIFJFQURZIGZvciBhIGNsZWFuIHJlZmxhc2guXG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIChub24tZGVzdHJ1Y3RpdmUgbGl2ZW5lc3MgcHJvb2YpOlxuJiM0MzsgKiAgIERBVEEgOj0gMHg3YzIzIChtYXJrZXIpOyBTVEFUIDo9IDB4ZTJjMHxpZHhcbiYjNDM7ICogICAgIC1cdTAwM2UgbG9hZGVyIHJldHVybnMgYSBydW50aW1lIHdvcmQgaW4gREFUQSBhbmQgcmUtYXJtcyBTVEFUPTB4YzU1Yy5cbiYjNDM7ICogICBUaGUgcmVwbHkgc291cmNlIGlzIGxvYWRlciBCU1MsIG5vdCBhIGNoaXAgaWQ7IHVzZWQgb25seSB0byBwcm92ZSBhIGxpdmVcbiYjNDM7ICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgb3RoZXIgU1RBVCByZWFkeSBtYWdpYywgMHhjMzNjLCBtYXJrcyB0aGUgbG9hZGVyJiMzOTtzIGZsYXNobGVzc1xuJiM0MzsgKiBjaGlwLXRvLWNoaXAgZG93bmxvYWQgbW9kZSAoTXhMODYyODFTIDE2LXBvcnQgdGllcik7IHRoaXMgZHJpdmVyIGRvZXMgbm90XG4mIzQzOyAqIHVzZSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzY3VlIGxpZmVjeWNsZSAoZGV2bGluayk6IHByb2JlIHJ1bnMgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCk7IGEgd2VkZ2VkXG4mIzQzOyAqIGxvYWRlciBpcyBkcmFpbmVkIGJhY2sgdG8gUkVBRFkgYnkgYSBiYWNrZ3JvdW5kIHNlbGYtaGVhbCAocmVzY3VlX2hlYWxfd29yaykgc29cbiYjNDM7ICogdGhlIG11bHRpLW1pbnV0ZSByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBkZXZsaW5rIGRldiBpbmZvXG4mIzQzOyAqIGV4cG9zZXMgdGhlIGZ3IHZlcnNpb24gKHRoZSBcJiMzNDtmbGFzaGFibGVcJiMzNDsgc2lnbmFsKSBvbmx5IG9uY2UgYXQgUkVBRFk7XG4mIzQzOyAqIGZsYXNoX3VwZGF0ZSByZXR1cm5zIC1FQlVTWSB1bnRpbCB0aGVuLCBhbmQgcmVwcm9iZXMgdG8gV1NQIGZpcm13YXJlIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGVzOlxuJiM0MzsgKiAgIC0gQ2hpcCBpZC9yZXZpc2lvbiAoMHhjMGQyODg4NC84OCkgYXJlIE5PVCByZWFjaGFibGUgb24gdGhpcyBjaGFubmVsOyB0aGV5XG4mIzQzOyAqICAgICBuZWVkIHRoZSBjbGF1c2UtNDUgTU1EIGZpcm13YXJlIG1haWxib3gsIHdoaWNoIGlzIGRlYWQgdW5kZXIgTUNVYm9vdC5cbiYjNDM7ICogICAgIFJlc2N1ZSBpZGVudGl0eSBpcyBieSBTQiBQREkgYmVoYXZpb3VyIG9ubHkgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkuXG4mIzQzOyAqICAgLSBUaGUgU01ESU8gUEhZIGFkZHJlc3MgYW5kIHRoZSAweGUxeHggb2Zmc2V0cyBhcmUgT1RQLWNvbmZpZ3VyYWJsZTsgZGVyaXZlXG4mIzQzOyAqICAgICB0aGVtIGZyb20gdGhlIERUIGJpbmRpbmcsIGRvIG5vdCBhc3N1bWUgZml4ZWQgdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3N3aXRjaGRldi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWFwaS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWNtZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWZ3LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtaG9zdC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBTQiBQREkgcmVnaXN0ZXJzIChjbGF1c2UtMjIgU01ESU8gYWRkcmVzcyBzcGFjZSkgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTFx0XHQweGUxMDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQUREUlx0XHQweGUxMDFcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfREFUQVx0XHQweGUxMDJcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBVFx0XHQweGUxMDNcbiYjNDM7XG4mIzQzOy8qIFNCIFBESSBDVFJMIG1vZGVzICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUXHQweDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfV1JcdFx0MHgwMlxuJiM0MztcbiYjNDM7LyogU0IgUERJIGhhbmRzaGFrZSBtYWdpYyAocHVibGlzaGVkL2NvbnN1bWVkIHZpYSBTVEFUKSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcdC8qIGxvYWRlciBpZGxlLCBjb25zb2xlIGxvb3AgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFlcdDB4YzMzY1x0LyogbG9hZGVyIGlkbGUsIGZsYXNobGVzcyBsb29wICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUXHRcdDB4ZjQ4ZlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkRcdFx0MHgzY2MzXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHXHRcdDB4ZTJjMFx0LyogcmVnaXN0ZXItcmVhZCBjbWQgKHwgaW5kZXgpICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUktcdDB4N2MyM1x0LyogbWFya2VyIHBsYWNlZCBpbiBEQVRBIGZvciBSRFJFRyAqL1xuJiM0MztcbiYjNDM7LyogQmVoYXZpb3VyYWwgcHJlc2VuY2UgcHJvYmU6IHR3byBkaXN0aW5jdCAxNi1iaXQgbGF0Y2hlcyBvbiBBRERSL0RBVEEuICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0FcdFx0MHg1YTVhXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0RcdFx0MHhhNWE1XG4mIzQzO1xuJiM0MzsvKiBGaXJtd2FyZSB0cmFuc2ZlciBnZW9tZXRyeSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXHRcdDIwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19IQUxGXHRcdDE2Mzg0XHQvKiB3b3JkcyBwZXIgaGFsZi1iYW5rICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRVx0XHQzMjc2MFx0Lyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlx0XHQweDc4MDBcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cbiYjNDM7XG4mIzQzOy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1x0MzAwMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TXHQ1MDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NU1x0MzAwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1x0MTIwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TXHQ1MDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVQUk9CRV9ERUxBWV9NU1x0NTAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMFxuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXG4mIzQzO1x0XHRcdFx0ICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsXG4mIzQzO1x0XHRcdFx0dmFsIFx1MDAzYyAwIHx8ICh1MTYpdmFsID09IGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcdDEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0cHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuJiM0MztcdFx0XHRcdCAgICAgICB1MzIgZGF0YV93cml0dGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCxcbiYjNDM7XHRcdFx0XHRcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuJiM0MztcdFx0XHRcdCAgdTMyIGRvbmUsIHUzMiB0b3RhbClcbiYjNDM7e1xuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBQb3N0LWZsYXNoIHJlcHJvYmUuIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIHJ1bnNcbiYjNDM7ICogZGV0YWNoZWQgZnJvbSBwcml2LCBvbiBvbmx5IHRoZSBoZWxkIGRldmljZSByZWZlcmVuY2UuIEl0IHJ1bnMgYXMgYSBrdGhyZWFkXG4mIzQzOyAqIHNvIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkIHdpdGggbW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KCksXG4mIzQzOyAqIGZyb20gY29yZS1rZXJuZWwgY29kZSAtLSBhIHdvcmsgaXRlbSYjMzk7cyB0cmFpbGluZyBtb2R1bGVfcHV0KCkgY291bGQgcmV0dXJuXG4mIzQzOyAqIGludG8gbW9kdWxlIHRleHQgYSByYWNpbmcgcm1tb2QgaGFzIGFscmVhZHkgZnJlZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3JlcHJvYmVfdGhyZWFkX2ZuKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtc2xlZXAoTVhMODYyWFhfRldfUkVQUk9CRV9ERUxBWV9NUyk7XG4mIzQzO1x0aWYgKGRldmljZV9yZXByb2JlKGRldikpXG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7cmVwcm9iZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdHB1dF9kZXZpY2UoZGV2KTtcbiYjNDM7XHRtb2R1bGVfcHV0X2FuZF9rdGhyZWFkX2V4aXQoMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYge1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFNwYXduIHRoZSByZXByb2JlIGt0aHJlYWQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgd2hlcmUga3RocmVhZF9jcmVhdGUoKVxuJiM0MzsgKiBjYW5ub3QgcmV0dXJuIC1FSU5UUiBhcyBpdCBjYW4gZnJvbSB0aGUgZGV2bGluayBjYWxsZXImIzM5O3MgY29udGV4dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZl9mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiwgd29yayk7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0ga28tXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiYjNDM7XG4mIzQzO1x0a2ZyZWUoa28pO1xuJiM0MztcdHRhc2sgPSBrdGhyZWFkX3J1bihteGw4NjJ4eF9yZXByb2JlX3RocmVhZF9mbiwgZGV2LCBcJiMzNDtteGw4NjJ4eC1yZXByb2JlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHRhc2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XCYjMzQ7cmVwcm9iZSBrdGhyZWFkIGZhaWxlZCAoJXBlKTsgcmVsb2FkIHRoZSBkcml2ZXIgdG8gcmVzdG9yZSBvcGVyYXRpb25cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHRhc2spO1xuJiM0MztcdFx0cHV0X2RldmljZShkZXYpO1xuJiM0MztcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuXG4mIzQzOyAqIGFsbG9jYXRpb24gZmFpbHVyZSBhYm9ydHMgY2xlYW5seS4gVGhlIGNhbGxlciBob2xkcyBhIG1vZHVsZSBhbmQgYSBkZXZpY2VcbiYjNDM7ICogcmVmZXJlbmNlOyBvbmNlIHRoZSBraWNrb2ZmIGlzIHNjaGVkdWxlZCB0aGUgcmVwcm9iZSBrdGhyZWFkIHJlbGVhc2VzIGJvdGguXG4mIzQzOyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKm14bDg2Mnh4X3JlcHJvYmVfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XG4mIzQzO1xuJiM0MztcdGtvID0ga3phbGxvY19vYmooKmtvKTtcbiYjNDM7XHRpZiAoIWtvKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0a28tXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZrby1cdTAwM2V3b3JrLCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmZfZm4pO1xuJiM0MztcdHJldHVybiBrbztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQnl0ZS1jb3VudCBvZiBlYWNoIGNodW5rIGZlZCB0byB0aGUgbG9hZGVyIGR1cmluZyBkcmFpbi4gSXQgTVVTVCBiZSAxOiB0aGVcbiYjNDM7ICogbG9hZGVyIG9ubHkgbGV0cyB1cyBvYnNlcnZlIFwmIzM0O2NvdW50ZXIgPT0gMFwmIzM0OywgbmV2ZXIgXCYjMzQ7Y291bnRlciBcdTAwM2Mgc3RlcFwmIzM0Oywgc28gYW55XG4mIzQzOyAqIHN0ZXAgXHUwMDNlIDEgY2FuIHN1YnRyYWN0IHBhc3QgemVybywgdW5kZXJmbG93IHRoZSAzMi1iaXQgY291bnRlciBhbmQgd2VkZ2UgdGhlXG4mIzQzOyAqIGxvYWRlciBmb3IgfjJeMzIgbW9yZSBieXRlcyAoYSBzdGF0ZSBvbmx5IGEgcG93ZXIgY3ljbGUgY2xlYXJzKS4gU3RlcHBpbmcgYnlcbiYjNDM7ICogMSB3YWxrcyB0aGUgY291bnRlciB0aHJvdWdoIGV2ZXJ5IHZhbHVlIGFuZCBpcyBndWFyYW50ZWVkIHRvIGxhbmQgb24gemVyb1xuJiM0MzsgKiB3aGF0ZXZlciBpdHMgKHBvc3NpYmx5IG9kZCkgc3RhcnQuIEEgMS1ieXRlIGNodW5rIGlzIGEgcGF0aCB0aGUgbG9hZGVyXG4mIzQzOyAqIGFscmVhZHkgaGFuZGxlczogdGhlIG5vcm1hbCB0cmFuc2ZlciBlbmRzIHdpdGggYSBzaW5nbGUgdHJhaWxpbmcgYnl0ZSBmb3JcbiYjNDM7ICogb2RkLXNpemVkIGltYWdlcyAoc2VlIFN0ZXAgNikuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTXHQxXG4mIzQzO1xuJiM0MzsvKiBQb2xsIFNUQVQgd2hpbGUgZHJhaW5pbmcgYSBzdHVjayBkb3dubG9hZDogMCBtZWFucyBcJiMzNDtmZWVkIHRoZSBuZXh0IGNodW5rXCYjMzQ7LFxuJiM0MzsgKiBSRUFEWSBtZWFucyB0aGUgbG9hZGVyIGxlZnQgdGhlIHJlY2VpdmUgbG9vcCBhbmQgcmUtYXJtZWQgaXRzIGNvbW1hbmQgbG9vcCxcbiYjNDM7ICogYW55dGhpbmcgZWxzZSBpcyBhIHRyYW5zaWVudCAodGhlIGNvdW50IGJlaW5nIGNvbnN1bWVkKSAtIEJVU1kgcGFzdCB0aGVcbiYjNDM7ICogd2luZG93IG1lYW5zIHRoZSBjb3VudGVyIGhhcyBoaXQgemVybyBhbmQgdGhlIGxvYWRlciBpcyBmaW5hbGlzaW5nLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSB7IE1YTDg2MlhYX0RSQUlOX0ZFRUQsIE1YTDg2MlhYX0RSQUlOX1JFQURZLCBNWEw4NjJYWF9EUkFJTl9CVVNZIH07XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmVhZF9wb2xsX3RpbWVvdXQobXhsODYyeHhfc21kaW9fcmVhZCwgdmFsLFxuJiM0MztcdFx0XHQgIHZhbCBcdTAwM2MgMCB8fCAodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkgfHxcbiYjNDM7XHRcdFx0ICAodTE2KXZhbCA9PSAwLFxuJiM0MztcdFx0XHQgIDUwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4mIzQzO1x0XHRcdCAgcHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcdGlmICgodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkpXG4mIzQzO1x0XHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fUkVBRFk7XG4mIzQzO1x0aWYgKCh1MTYpdmFsID09IDApXG4mIzQzO1x0XHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fRkVFRDtcbiYjNDM7XHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVjb3ZlciBhIHN3aXRjaCB3aG9zZSBTQiBQREkgZG93bmxvYWQgd2FzIGludGVycnVwdGVkIG1pZC10cmFuc2ZlciAtIHRoZVxuJiM0MzsgKiBob3N0IGRpZWQgYWZ0ZXIgTUNVYm9vdCBiZWdhbiBlcmFzaW5nIGZsYXNoLCB3aGV0aGVyIGl0IGFib3J0ZWQgbWlkIGVyYXNlIG9yXG4mIzQzOyAqIG1pZCBpbWFnZS13cml0ZSwgYm90aCBlbmQgdXAgaW4gdGhlIHNhbWUgcGxhY2U6IHRoZSBwYXlsb2FkIHJlY2VpdmUgbG9vcC5cbiYjNDM7ICogVGhlcmUgdGhlIGxvYWRlciBwdWJsaXNoZXMgU1RBVD0wLCB3YWl0cyBmb3IgdGhlIGhvc3QgdG8gd3JpdGUgYSBieXRlLWNvdW50XG4mIzQzOyAqIHRvIFNUQVQsIERNQXMgdGhhdCBtYW55IGJ5dGVzIGFuZCBzdWJ0cmFjdHMgdGhlIGNvdW50IGZyb20gYSByZW1haW5pbmctYnl0ZXNcbiYjNDM7ICogY291bnRlciwgbGVhdmluZyB0aGUgbG9vcCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyBleGFjdGx5IHplcm8uIFRoZVxuJiM0MzsgKiBpbWFnZSBzaXplIGRpZWQgd2l0aCB0aGUgaG9zdCwgc28gd2UgZmVlZCBzaW5nbGUtYnl0ZSBjaHVua3MgKHNlZVxuJiM0MzsgKiBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUykgdG8gd2FsayB0aGUgY291bnRlciB0byB6ZXJvIHdpdGhvdXQgdW5kZXJmbG93LFxuJiM0MzsgKiB0aGVuIHNlbmQgRU5ELiBUaGUgbG9hZGVyIHZhbGlkYXRlcyB0aGUgKG5vdyBjb3JydXB0KSBpbWFnZSBhbmQgcmUtYXJtc1xuJiM0MzsgKiBSRUFEWSwgb3IgYm9vdHMgYSB2YWxpZCBpbWFnZSB0aGF0IGhhcHBlbmVkIHRvIHN1cnZpdmUgaW4gZmxhc2guIFRoaXMgb25seVxuJiM0MzsgKiBmaW5hbGlzZXMgdGhlIHRyYW5zZmVyOyB0aGUgY2FsbGVyJiMzOTtzIHJlcHJvYmUgY2xhc3NpZmllcyB3aGljaGV2ZXIgc3RhdGVcbiYjNDM7ICogcmVzdWx0cy4gUmV0dXJucyAwIG9uY2UgZmluYWxpc2VkLCBcdTAwM2MwIG9uIGVycm9yLiBEb2VzIE5PVCByZWNvdmVyIGEgY291bnRlclxuJiM0MzsgKiBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGFcbiYjNDM7ICogcG93ZXIgY3ljbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0LyogQm91bmQ6IHR3aWNlIHRoZSBsb2FkZXImIzM5O3MgMTYgTWlCIGltYWdlIGNhcCwgb25lIGJ5dGUgcGVyIGNodW5rLiAqL1xuJiM0MztcdHUzMiBtYXhfY2h1bmtzID0gMnUgKiAoMTZ1IFx1MDAzY1x1MDAzYyAyMCkgLyBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUztcbiYjNDM7XHR1MzIgY2h1bmsgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRldl93YXJuKGRldiwgXCYjMzQ7Zmxhc2g6IGRyYWluaW5nIGludGVycnVwdGVkIGRvd25sb2FkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGNodW5rIFx1MDAzYyBtYXhfY2h1bmtzKSB7XG4mIzQzO1x0XHQvKiBUZWFyZG93biBjYW4gaW50ZXJydXB0IHRoaXMgbWludXRlcy1sb25nIGRyYWluLiAqL1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9SRUFEWSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX0JVU1kpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIEZlZWQgb25lIHplcm8gYnl0ZTsgcmVzZXQgY2xlYXJlZCB0aGUgd3JpdGUgbGF0Y2guICovXG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdFx0XHQgICBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Y2h1bmsmIzQzOyYjNDM7O1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY2h1bmsgXHUwMDNlPSBtYXhfY2h1bmtzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGludGVycnVwdGVkIGRvd25sb2FkIGRpZCBub3QgZHJhaW4gYWZ0ZXIgJXUgY2h1bmtzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRjaHVuayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBMZXQgdGhlIGxvYWRlciB2YWxpZGF0ZSBhbmQgcmUtYXJtIFJFQURZLCBvciBib290IGEgc3Vydml2aW5nIGltYWdlO1xuJiM0MztcdCAqIHRoZSBjYWxsZXImIzM5O3MgcmVwcm9iZSB0aGVuIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlIHJlc3VsdHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBvZmYgdGhlIGRldmxpbmsgZmxhc2ggcGF0aCwgc29cbiYjNDM7ICogdGhlIG1pbnV0ZXMtbG9uZyByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBTY2hlZHVsZWQgZnJvbSBwcm9iZTtcbiYjNDM7ICogcmVwcm9iZXMgb24gc3VjY2VzcyBzbyB0aGUgcHJvYmUtdGltZSBkZXRlY3Rpb24gcmUtY2xhc3NpZmllcyB0aGUgc3dpdGNoLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiwgcmVzY3VlX2hlYWxfd29yayk7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXZfaW5mbyhkZXYsIFwmIzM0O3JlY292ZXJpbmcgaW50ZXJydXB0ZWQgZG93bmxvYWQgaW4gYmFja2dyb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpO1xuJiM0MztcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGludGVycnVwdGVkIHRyYW5zZmVyIGlzIGZpbmFsaXNlZDsgcmVwcm9iZSBzbyB0aGUgcHJvYmUtdGltZVxuJiM0MztcdCAqIGRldGVjdGlvbiBicmluZ3MgdGhlIGRyaXZlciB1cCAtLSBmbGFzaGFibGUgaW4gcmVzY3VlIG1vZGUgaWYgdGhlXG4mIzQzO1x0ICogbG9hZGVyIGlzIGF0IFJFQURZLCBvciBub3JtYWxseSBpZiBhIHZhbGlkIGltYWdlIGJvb3RlZC4gVGhlIHJlZnNcbiYjNDM7XHQgKiBhcmUgcmVsZWFzZWQgYnkgdGhlIHJlcHJvYmUgb25jZSBpdCBjb21wbGV0ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Z2V0X2RldmljZShkZXYpO1xuJiM0MztcdGtvID0gbXhsODYyeHhfcmVwcm9iZV9hbGxvYyhkZXYpO1xuJiM0MztcdGlmICgha28pIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoZGV2KTtcbiYjNDM7XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmtvLVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEZXRlY3QgTUNVYm9vdCByZXNjdWUgbW9kZSBvdmVyIGNsYXVzZS0yMiBTTURJTyBhbG9uZSwgc28gdGhlIGNhbGxlciBjYW4gcnVsZVxuJiM0MzsgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUFxuJiM0MzsgKiBmaXJtd2FyZSBhbnN3ZXJzKS4gQSBzY3JhdGNoIHdyaXRlIHRvIEFERFIvREFUQSBtdXN0IGxhdGNoIG9yIHRoZSBjaGlwIGlzXG4mIzQzOyAqIGFic2VudCAoLUVOT0RFVik7IFNUQVQgdGhlbiBjbGFzc2lmaWVzIHRoZSBzdGF0ZSwgcG9rZWQgZGVzdHJ1Y3RpdmVseSBvbmx5XG4mIzQzOyAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6XG4mIzQzOyAqXG4mIzQzOyAqICAtIDB4YzMzYzogZmxhc2hsZXNzIGxvb3AsIHJlYWR5LlxuJiM0MzsgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLlxuJiM0MzsgKiAgLSBvdGhlciBub24temVybzogcnVubmluZyBmaXJtd2FyZSwgbGVmdCB1bnBva2VkLlxuJiM0MzsgKiAgLSAwOiB3ZWRnZWQgcmVjZWl2ZSBsb29wLCBpZiBhIDEtYnl0ZSBzbGljZS1hZHZhbmNlIGRyYWlucyBiYWNrIHRvIDAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogTVhMODYyWFhfSU5fUkVTQ1VFLCBNWEw4NjJYWF9OT1RfUkVTQ1VFLCBvciBuZWdhdGl2ZSAoLUVOT0RFVi9TTURJTykuXG4mIzQzOyAqL1xuJiM0MztpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0YXQsIGRhdCwgcmV0LCByYiwgYSwgZDtcbiYjNDM7XG4mIzQzO1x0LyogcmVzY3VlX3JlYWR5IGdhdGVzIGZsYXNoaW5nOyBhIHdlZGdlZCBsb2FkZXIgbmVlZHMgdGhlIGRyYWluIGZpcnN0LiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFByZXNlbmNlOiBhIGxpdmUgY2hpcCBsYXRjaGVzIHRoZSBzY3JhdGNoIHdyaXRlLCBhbiBhYnNlbnQgb25lIGZsb2F0cy4gKi9cbiYjNDM7XHRhID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4mIzQzO1x0XHRcdFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTtcbiYjNDM7XHRpZiAoYSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBhO1xuJiM0MztcdGQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbiYjNDM7XHRcdFx0XHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0QpO1xuJiM0MztcdGlmIChkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGQ7XG4mIzQzO1x0YSA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIpO1xuJiM0MztcdGlmIChhIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGE7XG4mIzQzO1x0ZCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuJiM0MztcdGlmIChkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGQ7XG4mIzQzO1x0aWYgKCh1MTYpYSAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSB8fFxuJiM0MztcdCAgICAodTE2KWQgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzdGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4mIzQzO1x0aWYgKHN0YXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gc3RhdDtcbiYjNDM7XG4mIzQzO1x0LyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3AgKE14TDg2MjgxUyB0aWVyKTogdGhpcyBkcml2ZXIgZG9lcyBub3RcbiYjNDM7XHQgKiBzdXBwb3J0IGl0IC0tIHRoZSBjb25zb2xlIGZsYXNoIHBhdGggZXhwZWN0cyBSRUFEWS4gVHJlYXQgaXQgYXMgYW5cbiYjNDM7XHQgKiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLCBsaWtlIGFueSBvdGhlciB1bnN1cHBvcnRlZCBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHUxNilzdGF0ID09IE1YTDg2MlhYX1NCX1BESV9ETF9SRUFEWSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBDb25zb2xlIGxvb3AgYXQgUkVBRFk6IGNvbmZpcm0gdGhlIGxpdmUgbWFpbGJveCB3aXRoIHRoZSByZWdpc3Rlci1yZWFkXG4mIzQzO1x0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuJiM0MztcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbiYjNDM7XHRcdGRhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuJiM0MztcdFx0aWYgKGRhdCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGRhdDtcbiYjNDM7XHRcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbiYjNDM7XHRcdGlmICghcmIgXHUwMDI2XHUwMDI2ICh1MTYpZGF0ICE9IE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLKSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQW55IG90aGVyIG5vbi16ZXJvIHZhbHVlIGlzIGEgcnVubmluZyBmaXJtd2FyZSwgbm90IGEgbG9hZGVyLiAqL1xuJiM0MztcdGlmIChzdGF0KVxuJiM0MztcdFx0cmV0dXJuIE1YTDg2MlhYX05PVF9SRVNDVUU7XG4mIzQzO1xuJiM0MztcdC8qIFNUQVQgPT0gMDogYSB3ZWRnZWQgcmVjZWl2ZSBsb29wIGNvbnN1bWVzIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgYmFja1xuJiM0MztcdCAqIHRvIDAgKGZlZWQgb25lIERBVEEgd29yZCBmaXJzdCwgbGlrZSBhIGRyYWluIGNodW5rKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIDB4MDAwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCAxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmICghcmIpXG4mIzQzO1x0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbiYjNDM7c3RydWN0IG14bDg2Mnh4X2Z3X2hkciB7XG4mIzQzO1x0X19sZTMyIGltYWdlX3R5cGU7XG4mIzQzO1x0X19sZTMyIGltYWdlX3NpemVfMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2VfY2hlY2tzdW1fMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2Vfc2l6ZV8yO1xuJiM0MztcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuJiM0MztcdFx0XHRcdCAgIHUzMiAqcGF5bG9hZF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xuJiM0MztcdHUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsO1xuJiM0MztcdGNvbnN0IHU4ICpwYXlsb2FkO1xuJiM0MztcdHUzMiBjcmM7XG4mIzQzO1xuJiM0MztcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1x0cGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbiYjNDM7XHRzaXplMiA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9zaXplXzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4mIzQzO1x0ICAgIHRvdGFsIFx1MDAzZSBmdy1cdTAwM2VzaXplIC0gTVhMODYyWFhfRldfSERSX1NJWkUpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0b3RhbCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZTEpIHtcbiYjNDM7XHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbiYjNDM7XHRcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogaW1hZ2UgMSBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUyKSB7XG4mIzQzO1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICYjNDM7IHNpemUxLCBzaXplMik7XG4mIzQzO1x0XHRpZiAoY3JjICE9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Zmxhc2g6IGltYWdlIDIgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgcGF5bG9hZF9zaXplLCBzdHJ1Y3QgZGV2bGluayAqZGwpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0dTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gamlmZmllcyAtIDE7XG4mIzQzO1x0dTE2IHdvcmQsIGZkYXRhO1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMTogcmVib290IHRoZSBmaXJtd2FyZSBpbnRvIE1DVWJvb3QgcmVzY3VlIG1vZGUgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdGZhbHNlLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogRldfVVBEQVRFIGNvbW1hbmQgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0RVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuJiM0MztcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCYjMzQ7V2FpdGluZyBmb3IgYm9vdGxvYWRlclwmIzM0OywgMCwgMCk7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XG4mIzQzO1x0LyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdFxuJiM0MztcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O2ZsYXNoOiBib290bG9hZGVyIG5vdCByZWFkeTogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9TVEFSVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCAmIzQzOyAxLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RlcCA0OiB0cmFuc2ZlciBpbWFnZSBoZWFkZXIgKi9cbiYjNDM7XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0VyYXNpbmcgZmxhc2hcJiMzNDssIDAsIDApO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHdvcmQgPSBmdy1cdTAwM2VkYXRhW2kgKiAyXSB8XG4mIzQzO1x0XHQgICAgICAgKCh1MTYpZnctXHUwMDNlZGF0YVtpICogMiAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgd29yZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdFx0ICAgTVhMODYyWFhfRldfSERSX1NJWkUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XG4mIzQzO1x0LyogQUNLIGlzIGJ5dGUgY291bnQgJiM0MzsgMSAqL1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgJiM0MzsgMSxcbiYjNDM7XHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O2ZsYXNoOiBoZWFkZXIgQUNLIGZhaWxlZDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDY6IHRyYW5zZmVyIHBheWxvYWQgKi9cbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoaWR4IFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcbiYjNDM7XHRcdGlmIChpZHggJiM0MzsgMSBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4mIzQzO1x0XHRcdGZkYXRhID0gcGF5bG9hZFtpZHhdIHxcbiYjNDM7XHRcdFx0XHQoKHUxNilwYXlsb2FkW2lkeCAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRcdGlkeCAmIzQzOz0gMjtcbiYjNDM7XHRcdFx0ZGF0YV93cml0dGVuICYjNDM7PSAyO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF07XG4mIzQzO1x0XHRcdGlkeCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIGZkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcdFx0d29yZF9pZHgmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChpZHggXHUwMDNlPSBwYXlsb2FkX3NpemUpIHtcbiYjNDM7XHRcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEhhbGYtYmFuayBib3VuZGFyeTogc3dpdGNoIHRvIFNCMSBhZGRyZXNzICovXG4mIzQzO1x0XHRpZiAod29yZF9pZHggPT0gTVhMODYyWFhfRldfQkFOS19IQUxGKSB7XG4mIzQzO1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX0ZXX1NCMV9BRERSKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHdvcmRfaWR4IFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2ZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHR3b3JkX2lkeCA9IDA7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiA9IDA7XG4mIzQzO1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBuZXh0X25vdGlmeSkpIHtcbiYjNDM7XHRcdFx0XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBpZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1x0Z290byBlbmRfbWFnaWM7XG4mIzQzO1xuJiM0Mzt3cml0ZV9lcnI6XG4mIzQzO1x0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LCBcJiMzNDtmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztlbmRfbWFnaWM6XG4mIzQzO1x0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuJiM0MztcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRjaGFyIGJ1ZlsxNl07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gY2hpcC1pZC9yZXZpc2lvbiBpbiBNQ1Vib290IChuZWVkcyB0aGUgZmlybXdhcmUgTU1EIG1haWxib3gpLiBUaGVcbiYjNDM7XHQgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlIFwmIzM0O3JlYWR5IHRvIGZsYXNoXCYjMzQ7IHNpZ25hbDogcmVwb3J0IGl0IG9ubHlcbiYjNDM7XHQgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0aWYgKCFSRUFEX09OQ0UocHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldS4ldS4ldVwmIzM0OyxcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuJiM0MztcdFx0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbiYjNDM7XHRcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXCYjMzQ7ZndcJiMzNDssIGJ1Zik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcJiMzNDtmd1wmIzM0OywgYnVmKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEEgMCBwYXJ0IG51bWJlciBtZWFucyB0aGUgQ0hJUCBJRCByZWFkIGZhaWxlZCBvciB0aGUgcGFydCBpc1xuJiM0MztcdCAqIHVuZnVzZWQ7IG9taXQgaXQgcmF0aGVyIHRoYW4gcHVibGlzaCBhIGJvZ3VzIFwmIzM0OzAwMDBcJiMzNDsgdGhhdCBmd3VwZFxuJiM0MztcdCAqIHdvdWxkIG1hdGNoIGZpcm13YXJlIGFnYWluc3QgLS0gaXQgdGhlbiBmYWxscyBiYWNrIHRvIHRoZSBkcml2ZXJcbiYjNDM7XHQgKiBuYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWFzaWNfaWQpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyUwNFhcJiMzNDssIHByaXYtXHUwMDNlYXNpY19pZCk7XG4mIzQzO1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBidWYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldVwmIzM0OywgcHJpdi1cdTAwM2Vhc2ljX3Jldik7XG4mIzQzO1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19SRVYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYnVmKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldS4ldS4ldVwmIzM0OyxcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwmIzM0O2Z3XCYjMzQ7LCBidWYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi9cbiYjNDM7XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dChyZXEsIFwmIzM0O2Z3XCYjMzQ7LCBidWYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIHBheWxvYWRfc2l6ZTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Y29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBcdTAwMjZwYXlsb2FkX3NpemUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2Zpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWZ1c2UgdG8gZmxhc2ggd2hpbGUgdGhlIGJhY2tncm91bmQgc2VsZi1oZWFsIGlzIHN0aWxsIGRyYWluaW5nLiAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlIFx1MDAyNlx1MDAyNiAhUkVBRF9PTkNFKHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtzd2l0Y2ggaXMgcmVjb3ZlcmluZyBhbiBpbnRlcnJ1cHRlZCBkb3dubG9hZCwgcmV0cnkgc2hvcnRseVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIHJlZmVyZW5jZXMgdGhlIHJlcHJvYmUgd29yayBuZWVkcyB0byByZXN0b3JlIG5vcm1hbCBvcGVyYXRpb25cbiYjNDM7XHQgKiBtdXN0IGJlIGhlbGQgYmVmb3JlIHRoZSBzd2l0Y2ggaXMgZGlzdHVyYmVkOyB0aGUgd29yayBpdHNlbGYgaXNcbiYjNDM7XHQgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGdldF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsb2NhdGUgdGhlIHJlcHJvYmUga2lja29mZiBiZWZvcmUgZGlzdHVyYmluZyB0aGUgc3dpdGNoLCBzbyBhblxuJiM0MztcdCAqIC1FTk9NRU0gaGVyZSBjYW5ub3Qgc3RyYW5kIGl0IGZsYXNoZWQgYnV0IG5ldmVyIHJlcHJvYmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGtvID0gbXhsODYyeHhfcmVwcm9iZV9hbGxvYyhkcy1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICgha28pIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O2ZsYXNoOiBmbGFzaGluZyBzd2l0Y2ggdmlhIE1DVWJvb3QgcmVzY3VlIG1vZGVcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldiwgXCYjMzQ7Zmxhc2g6IHJ1bm5pbmcgZmlybXdhcmUgJXUuJXUuJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4mIzQzO1xuJiM0MztcdC8qIENsb3NlIHBvcnRzIHdoaWxlIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCBhbGl2ZSBzbyB0aGUgRFNBXG4mIzQzO1x0ICogY29yZSYjMzk7cyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xuJiM0MztcdCAqIHNvIHVzZXJzcGFjZSBjYW5ub3QgcmVvcGVuIHRoZW0gZHVyaW5nIHRoZSBmbGFzaC4gVGhlXG4mIzQzO1x0ICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdGlmIChkcC1cdTAwM2V1c2VyKSB7XG4mIzQzO1x0XHRcdGRldl9jbG9zZShkcC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChkcC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpXG4mIzQzO1x0XHRkZXZfY2xvc2UoZHAtXHUwMDNlY29uZHVpdCk7XG4mIzQzO1x0LyogVGhlIGJyaWRnZSBkZWZlcnMgdGhlIFNUUCBzdGF0ZSBjaGFuZ2VzIHRyaWdnZXJlZCBieSBjbG9zaW5nXG4mIzQzO1x0ICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoZGV2X2RlZmVycmVkX3Byb2Nlc3MoKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xuJiM0MztcdHByaXYtXHUwMDNlYmxvY2tfaG9zdCA9IHRydWU7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfd29yayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yayk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtXHUwMDNlZncsIHBheWxvYWRfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICBkcy1cdTAwM2VkZXZsaW5rKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7ZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLFxuJiM0MztcdFx0XHRcdCAgTURJT19NVVRFWF9ORVNURUQpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VibG9ja19ob3N0ID0gZmFsc2U7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXJlc2N1ZV9tb2RlID0gZmFsc2U7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlZnJlc2ggdGhlIGNhY2hlZCB2ZXJzaW9ucyBzbyB0aGUgZmxhc2ggdXBkYXRlIG9ubHlcbiYjNDM7XHRcdCAqIGNvbXBsZXRlcyBvbmNlIHRoZSBuZXcgZmlybXdhcmUgaXMgY29uZmlybWVkIHJ1bm5pbmcgYW5kXG4mIzQzO1x0XHQgKiBkZXZsaW5rIGRldiBpbmZvIHJlcG9ydHMgaXQuIE11c3QgaGFwcGVuIGJlZm9yZSBzZXR0aW5nXG4mIzQzO1x0XHQgKiBza2lwX3RlYXJkb3duLCB3aGljaCBkaXNjYXJkcyBhbGwgZmlybXdhcmUgQVBJIHJlYWRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtuZXcgZmlybXdhcmUgZGlkIG5vdCBiZWNvbWUgcmVhZHlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcbiYjNDM7XHRwcml2LVx1MDAzZXNraXBfdGVhcmRvd24gPSB0cnVlO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIEtpY2sgb2ZmIHRoZSByZXByb2JlIGxhc3Q7IHRoZSBraWNrb2ZmIHdhcyBhbGxvY2F0ZWQgdXAgZnJvbnQgYW5kXG4mIzQzO1x0ICogaXRzIG1vZHVsZSBhbmQgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGFscmVhZHkgaGVsZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmtvLVx1MDAzZXdvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgJiM0MzsxLDIwIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTVhMODYyWFhfRldfSFxuJiM0MzsjZGVmaW5lIF9fTVhMODYyWFhfRldfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbiYjNDM7c3RydWN0IHdvcmtfc3RydWN0O1xuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4mIzQzO3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uMmRiZDA3NGMwZmUyNmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiAmIzQzOzE1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtZncuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWhvc3QuaFwmIzM0O1xuIFxuICNkZWZpbmUgQ1RSTF9CVVNZX01BU0tcdFx0XHRCSVQoMTUpXG5AQCAtMzQwLDYgJiM0MzszNDIsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSxcbiBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4gXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlc2tpcF90ZWFyZG93bikge1xuJiM0MztcdFx0cmV0ID0gcmVhZCA/IC1FTk9ERVYgOiAwO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlYmxvY2tfaG9zdCBcdTAwMjZcdTAwMjYgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkge1xuJiM0MztcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1heCA9IChzaXplICYjNDM7IDEpIC8gMjtcbiBcbiBcdHJldCA9IG14bDg2Mnh4X2J1c3lfd2FpdChwcml2KTtcbkBAIC00OTUsMTIgJiM0Mzs1MTIsNDkgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUdcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1x0MHhmZmYwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fT0ZGX01BU0tcdFx0MHgwMDBmXG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHRpbnQgcGh5ID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuJiM0MztcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0ID0gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHksIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXG4mIzQzO1x0XHRcdCAgICAgIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDApXG4mIzQzO1x0XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLLFxuJiM0MztcdFx0XHRcdCAgICAgIHZhbCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBteGw4NjJ4eF9ob3N0X2luaXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmssIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4pO1xuIH1cbiBcbiB2b2lkIG14bDg2Mnh4X2hvc3Rfc2h1dGRvd24oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgJiM0MzsxOCw3IEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqZGF0YSwgdTE2IHNpemUsXG4gXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXHUwMDI2KGRhdGEpLCBzaXplb2YoKGRhdGEpKSwgdHJ1ZSwgdHJ1ZSlcbiBcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcbiBcdHN3aXRjaCAocG9ydCkge1xuIFx0Y2FzZSA5IC4uLiAxNjpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCYjMzQ7U2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5pbmRleCA0NWQyMzdiM2E0MGYxMC4uOGQyMTc0N2NkZjE1ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1hcGkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWNtZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWZ3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1waHlsaW5rLmhcJiMzNDtcbiBcbkBAIC03MSw2ICYjNDM7NzIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBteGw4NjJ4eF9ybW9uX3Jhbmdlc1tdID0ge1xuICNkZWZpbmUgTVhMODYyWFhfUkVBRFlfVElNRU9VVF9NU1x0MTAwMDBcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1BPTExfTVNcdFx0MTAwXG4gXG4mIzQzOy8qIENoaXAgSUQgcmVnaXN0ZXJzLCByZWFkIHZpYSBTWVNfTUlTQ19SRUdfUkQgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9DSElQSURfTFx0XHQweGMwZDI4ODg0XG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01cdFx0MHhjMGQyODg4OFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NXHRcdEdFTk1BU0soMTEsIDApXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTlx0R0VOTUFTSygxNCwgMTIpXG4mIzQzO1xuICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMXHRcdDB4ZTAwXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTXHRcdDB4ZTEyXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTXHRcdDB4ZTEzXG5AQCAtMjIyLDcgJiM0MzsyMzAsNDYgQEAgc3RhdGljIGludCBteGw4NjJ4eF9waHlfd3JpdGVfYzQ1X21paV9idXMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4gXHRyZXR1cm4gbXhsODYyeHhfcGh5X3dyaXRlX21tZChidXMtXHUwMDNlcHJpdiwgYWRkciwgZGV2YWRkLCByZWdudW0sIHZhbCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzOy8qIFJlYWQgdGhlIHN0YXRpYyBjaGlwIHBhcnQgbnVtYmVyIGFuZCB2ZXJzaW9uIGZyb20gdGhlIENISVAgSURcbiYjNDM7ICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZVxuJiM0MzsgKiBjYWNoZWQgYXQgc2V0dXAgYW5kIGxlZnQgemVybyB3aGVuIHRoZSBzd2l0Y2ggaXMgaW4gcmVzY3VlIG1vZGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHJlZyA9IHt9O1xuJiM0MztcdHUxNiBjaGlwaWRfbCwgY2hpcGlkX207XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTCk7XG4mIzQzO1x0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGNoaXBpZF9sID0gbGUzMl90b19jcHUocmVnLnZhbCk7XG4mIzQzO1xuJiM0MztcdHJlZy5hZGRyID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfQ0hJUElEX00pO1xuJiM0MztcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRjaGlwaWRfbSA9IGxlMzJfdG9fY3B1KHJlZy52YWwpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWFzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8XG4mIzQzO1x0XHRcdEZJRUxEX0dFVChNWEw4NjJYWF9DSElQSURfTV9QTlVNTSwgY2hpcGlkX20pIFx1MDAzY1x1MDAzYyA0O1xuJiM0MztcdHByaXYtXHUwMDNlYXNpY19yZXYgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTiwgY2hpcGlkX20pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG14bDg2Mnh4X3dhaXRfcmVhZHkgLSB3YWl0IGZvciB0aGUgc3dpdGNoIGZpcm13YXJlIHRvIGJlY29tZSBvcGVyYXRpb25hbFxuJiM0MzsgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2VcbiYjNDM7ICpcbiYjNDM7ICogUG9sbCB0aGUgZmlybXdhcmUgdW50aWwgaXQgcmVwb3J0cyBpdHMgdmVyc2lvbiBhbmQgYWNjZXB0c1xuJiM0MzsgKiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLCB0aGVuIGNhY2hlIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjaGlwIElELlxuJiM0MzsgKiBUYWtlcyBhdCBsZWFzdCB0d28gc2Vjb25kcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB2ZXIgPSB7fTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzLCB0aW1lb3V0O1xuQEAgLTI1NCw2ICYjNDM7MzAxLDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciA9IHZlci5pdl9tYWpvcjtcbiBcdFx0cHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yID0gdmVyLml2X21pbm9yO1xuIFx0XHRwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24gPSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChwcml2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgY2hpcCBJRDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBFUlJfUFRSKHJldCkpO1xuIFx0XHRyZXR1cm4gMDtcbiBcbiBub3RfcmVhZHlfeWV0OlxuQEAgLTYyMiwxNSAmIzQzOzY3NCw0OSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGludCBuX3VzZXJfcG9ydHMgPSAwLCBtYXhfdmxhbnM7XG4gXHRpbnQgaW5ncmVzc19maW5hbHMsIHZpZF9ydWxlcztcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4tXHRpbnQgcmV0LCBpO1xuJiM0MztcdGludCByZXQsIGksIHJlc2N1ZTtcbiBcbi1cdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBEZXRlY3QgdGhlIGxvYWRlciBvdmVyIFNCIFBESSBmaXJzdDogaXQgbmVlZHMgbm8gZmlybXdhcmUsIHVubGlrZSB0aGVcbiYjNDM7XHQgKiBDNDUgQVBJIChteGw4NjJ4eF9yZXNldC93YWl0X3JlYWR5KSB3aGljaCBzcGV3cyBDUkMgZXJyb3JzIHdoZW4gbm9uZVxuJiM0MztcdCAqIGFuc3dlcnMuIFRvdWNoIEM0NSBvbmx5IG9uY2UgcmVzY3VlIGlzIHJ1bGVkIG91dC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4mIzQzO1x0aWYgKHJlc2N1ZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXNjdWU7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKSB7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdC8qIHRoZSByZXNldCBtYXkgb25seSBub3cgaGF2ZSB0cmlnZ2VyZWQgcmVzY3VlIG1vZGUgKi9cbiYjNDM7XHRcdFx0cmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xuJiM0MztcdFx0XHRpZiAocmVzY3VlIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXNjdWU7XG4mIzQzO1x0XHRcdGlmIChyZXNjdWUgPT0gTVhMODYyWFhfTk9UX1JFU0NVRSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IHJlc2N1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSkge1xuJiM0MztcdFx0XHRkZXZfd2Fybihkcy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cJiMzNDspO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogRHJhaW4gdGhlIHdlZGdlZCBkb3dubG9hZCBpbiB0aGUgYmFja2dyb3VuZCBzbyBpdFxuJiM0MztcdFx0XHQgKiBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrOyBpbmZvIGFuZCBmbGFzaCBiZWNvbWVcbiYjNDM7XHRcdFx0ICogYXZhaWxhYmxlIG9uY2UgcmVhZHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRkZXZfd2Fybihkcy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHdpdGggYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJlY292ZXJpbmcgaW4gYmFja2dyb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNnByaXYtXHUwMDNlcmVzY3VlX2hlYWxfd29yayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc2VyZGVzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXNlcmRlc19wb3J0cyk7IGkmIzQzOyYjNDM7KVxuQEAgLTcxNSwxMSAmIzQzOzgwMSwyMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc3RhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpXG4gc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdHJldHVybiBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4ge1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSlcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuIH1cbkBAIC0xMzM3LDYgJiM0MzsxNDMzLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdC8qIERTQSByZWluaXRzIGZhaWxlZCB1c2VyIHBvcnRzIGFzIHVudXNlZDsgc2hhcmVkIHBvcnRzIG11c3RcbiYjNDM7XHQgKiBzdWNjZWVkIGZvciB0aGUgdHJlZSB0byByZWdpc3Rlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdHJldHVybiBkc2FfcG9ydF9pc191c2VyKGRwKSA/IC1FTk9ERVYgOiAwO1xuJiM0MztcbiBcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMTU3Miw2ICYjNDM7MTY3NCwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ZXRoZXJfYWRkcl9jb3B5KHFwYXJhbS5tYWMsIG1kYi1cdTAwM2VhZGRyKTtcbiBcbiBcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIE1YTDg2MlhYX01BQ19UQUJMRUVOVFJZUVVFUlksIHFwYXJhbSk7XG4mIzQzO1x0LyogLUVOT0RFVjogdGhlIGZpcm13YXJlIGFuZCBpdHMgTUFDIHRhYmxlIGFyZSBnb25lLCBub3RoaW5nIGxlZnRcbiYjNDM7XHQgKiB0byBkZWxldGVcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0ID09IC1FTk9ERVYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTYyOCw2ICYjNDM7MTczNSw5IEBAIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRzd2l0Y2ggKHN0YXRlKSB7XG4gXHRjYXNlIEJSX1NUQVRFX0RJU0FCTEVEOlxuIFx0XHRwYXJhbS5wb3J0X3N0YXRlID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfU1RQX1BPUlRfU1RBVEVfRElTQUJMRSk7XG5AQCAtMjAxNSw2ICYjNDM7MjEyNSwxMiBAQCBzdGF0aWMgdm9pZCBteGw4NjJ4eF9zdGF0c193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IHByaXYtXHUwMDNlZHM7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuIFxuJiM0MztcdC8qIEEgZ2V0X3N0YXRzNjQoKSByZS1hcm0gY2FuIHJhY2UgdGhlIGZsYXNoIHRlYXJkb3duJiMzOTtzIFdPUktfU1RPUFBFRFxuJiM0MztcdCAqIHNldCBhbmQgY2FuY2VsOyBiYWlsIGhlcmUgc28gYSBzdHJheSBwb2xsIG5ldmVyIHJ1bnMgZHVyaW5nIGEgZmxhc2guXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcylcbiBcdFx0bXhsODYyeHhfc3RhdHNfcG9sbChkcywgZHAtXHUwMDNlaW5kZXgpO1xuIFxuQEAgLTIwODYsNiAmIzQzOzIyMDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LmdldF9ybW9uX3N0YXRzID0gbXhsODYyeHhfZ2V0X3Jtb25fc3RhdHMsXG4gXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcbiYjNDM7XHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXG4mIzQzO1x0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG5pbmRleCA0MzJhNWYzZjJlMDhlNi4uMTI5OTg1ZjJiYmYzZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbkBAIC0xNCw2ICYjNDM7MTQsMTAgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXY7XG4gI2RlZmluZSBNWEw4NjJYWF9GSVJTVF9TRVJERVNfUE9SVFx0OVxuICNkZWZpbmUgTVhMODYyWFhfU0VSREVTX1NMT1RTXHRcdDRcbiBcbiYjNDM7LyogbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCkgcmV0dXJuIGNvZGVzIChuZWdhdGl2ZSB2YWx1ZXMgYXJlIGVycm9ycykgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFXHRcdDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9JTl9SRVNDVUVcdFx0MVxuJiM0MztcbiAjZGVmaW5lIE1YTDg2MlhYX0RFRkFVTFRfQlJJREdFXHRcdDBcbiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VTXHRcdDQ4XG4gI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFX1BPUlRTXHQxMjhcbkBAIC0zMDMsNiAmIzQzOzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7XG4gICogICAgICAgICAgICAgICAgICAgICAgZmxvb2RpbmcpXG4gICogQGZ3X3ZlcnNpb246ICAgICAgICAgY2FjaGVkIGZpcm13YXJlIHZlcnNpb24sIHBvcHVsYXRlZCBhdCBwcm9iZSBhbmRcbiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKVxuJiM0MzsgKiBAYXNpY19pZDogICAgICAgICAgICBjaGlwIHBhcnQgbnVtYmVyIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rIFwmIzM0O2FzaWMuaWRcJiMzNDsgZml4ZWQgdmVyc2lvblxuJiM0MzsgKiBAYXNpY19yZXY6ICAgICAgICAgICBjaGlwIHZlcnNpb24gcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycyxcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgXCYjMzQ7YXNpYy5yZXZcJiMzNDsgZml4ZWQgdmVyc2lvblxuICAqIEBzZXJkZXNfcG9ydHM6ICAgICAgIFNlckRlcyBpbnRlcmZhY2VzIGluY2wuIHN1Yi1pbnRlcmZhY2VzIGluIGNhc2Ugb2ZcbiAgKiAgICAgICAgICAgICAgICAgICAgICAxMEdfUVhHTUlJIG9yIFFTR01JSVxuICAqIEBzZXJkZXNfcmVmY291bnQ6ICAgIHBlci1YUENTIGNvdW50IG9mIHN1Yi1wb3J0cyBlbmFibGVkIGJ5IHBoeWxpbms7XG5AQCAtMzE5LDYgJiM0MzszMjcsMTUgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xuICAqIEBldmxhbl9pbmdyZXNzX3NpemU6IHBlci1wb3J0IGluZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXG4gICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemVcbiYjNDM7ICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSlcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2hcbiYjNDM7ICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93blxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZVxuJiM0MzsgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGZhaWwgZmFzdCxcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3NcbiYjNDM7ICogQHJlc2N1ZV9yZWFkeTogICAgICAgKHJlc2N1ZV9tb2RlKSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSBhbmQgd2lsbCBhY2NlcHRcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgYSBmbGFzaDsgZmFsc2Ugd2hpbGUgcmVzY3VlX2hlYWxfd29yayBpcyBkcmFpbmluZ1xuJiM0MzsgKiBAcmVzY3VlX2hlYWxfd29yazogICBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBkcmFpbmluZyBhIHdlZGdlZCBkb3dubG9hZCB0byBSRUFEWVxuICAqIEBzdGF0c193b3JrOiAgICAgICAgIHBlcmlvZGljIHdvcmsgaXRlbSB0aGF0IHBvbGxzIFJNT04gaGFyZHdhcmUgY291bnRlcnNcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xuICAqL1xuQEAgLTMyNiw5ICYjNDM7MzQzLDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmNfZXJyX3dvcms7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2N1ZV9oZWFsX3dvcms7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTE2IGRyb3BfbWV0ZXI7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiBmd192ZXJzaW9uO1xuJiM0MztcdHUxNiBhc2ljX2lkO1xuJiM0MztcdHU4IGFzaWNfcmV2O1xuIFx0c3RydWN0IG14bDg2Mnh4X3BjcyBzZXJkZXNfcG9ydHNbOF07XG4gXHRpbnQgc2VyZGVzX3JlZmNvdW50WzJdO1xuIFx0c3RydWN0IG11dGV4IHNlcmRlc19sb2NrO1xuQEAgLTMzNyw3ICYjNDM7MzU3LDEzIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcbiBcdHUxNiBldmxhbl9pbmdyZXNzX3NpemU7XG4gXHR1MTYgZXZsYW5fZWdyZXNzX3NpemU7XG4gXHR1MTYgdmZfYmxvY2tfc2l6ZTtcbiYjNDM7XHRib29sIGJsb2NrX2hvc3Q7XG4mIzQzO1x0Ym9vbCBza2lwX3RlYXJkb3duO1xuJiM0MztcdGJvb2wgcmVzY3VlX21vZGU7XG4mIzQzO1x0Ym9vbCByZXNjdWVfcmVhZHk7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7XG4gfTtcbiBcbiYjNDM7aW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9fTVhMODYyWFhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcbmluZGV4IDhjMTZlZjIzY2MxMDJhLi5jOWUxOTM0OGRlNjE5MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaFxuQEAgLTExNzAsNiAmIzQzOzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuIFx0aW50XHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1x0aW50XHQoKmRldmxpbmtfZmxhc2hfdXBkYXRlKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFx0aW50XHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uZDYwMjIyNjdhODM5Y2QgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS9kZXZsaW5rLmNcbkBAIC0yMCw2ICYjNDM7MjAsMTUgQEAgc3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXG5AQCAtMTY3LDE4ICYjNDM7MTc2LDMxIEBAIGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRscCxcbiBcdFx0XHRcdFx0XHRcdHBfbWF4KTtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XG4tXHQuaW5mb19nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LFxuLVx0LnNiX3Bvb2xfZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX2dldCxcbi1cdC5zYl9wb29sX3NldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9zZXQsXG4tXHQuc2JfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsXG4tXHQuc2JfcG9ydF9wb29sX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXG4tXHQuc2JfdGNfcG9vbF9iaW5kX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9nZXQsXG4tXHQuc2JfdGNfcG9vbF9iaW5kX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsXG4tXHQuc2Jfb2NjX3NuYXBzaG90XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFxuLVx0LnNiX29jY19tYXhfY2xlYXJcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFxuLVx0LnNiX29jY19wb3J0X3Bvb2xfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsXG4mIzQzOy8qIFRoZSBkZXZsaW5rIGNvcmUgcmVqZWN0cyBmbGFzaCByZXF1ZXN0cyB1cCBmcm9udCB3aGVuIHRoZSBmbGFzaF91cGRhdGVcbiYjNDM7ICogb3AgaXMgYWJzZW50LCBiZWZvcmUgZmV0Y2hpbmcgdGhlIGZpcm13YXJlIGZpbGUgZnJvbSB1c2Vyc3BhY2UuIE9ubHlcbiYjNDM7ICogaW5zdGFsbCB0aGUgb3AgZm9yIHN3aXRjaGVzIHdob3NlIGRyaXZlciBpbXBsZW1lbnRzIGl0LCBzbyB0aGF0XG4mIzQzOyAqIHVuc3VwcG9ydGVkIHJlcXVlc3RzIGtlZXAgZmFpbGluZyBlYXJseS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRFNBX0RFVkxJTktfT1BTXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdC5pbmZvX2dldFx0XHRcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXHRcdFxcXG4mIzQzO1x0LnNiX3Bvb2xfZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX2dldCxcdFxcXG4mIzQzO1x0LnNiX3Bvb2xfc2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcdFxcXG4mIzQzO1x0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFx0XFxcbiYjNDM7XHQuc2JfcG9ydF9wb29sX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXHRcXFxuJiM0MztcdC5zYl90Y19wb29sX2JpbmRfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXFxcbiYjNDM7XHQuc2JfdGNfcG9vbF9iaW5kX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsIFxcXG4mIzQzO1x0LnNiX29jY19zbmFwc2hvdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19zbmFwc2hvdCxcdFxcXG4mIzQzO1x0LnNiX29jY19tYXhfY2xlYXJcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFx0XFxcbiYjNDM7XHQuc2Jfb2NjX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCwgXFxcbiBcdC5zYl9vY2NfdGNfcG9ydF9iaW5kX2dldFx0PSBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldCxcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xuJiM0MztcdERTQV9ERVZMSU5LX09QU1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7XG4mIzQzO1x0RFNBX0RFVkxJTktfT1BTXG4mIzQzO1x0LmZsYXNoX3VwZGF0ZVx0XHRcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxuIH07XG4gXG4gaW50IGRzYV9kZXZsaW5rX3BhcmFtX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcbkBAIC0zNzgsMTIgJiM0Mzs0MDAsMTYgQEAgdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gaW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHM7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXG4mIzQzO1x0b3BzID0gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlID8gXHUwMDI2ZHNhX2RldmxpbmtfZmxhc2hfb3BzXG4mIzQzO1x0XHRcdFx0XHQgICAgOiBcdTAwMjZkc2FfZGV2bGlua19vcHM7XG4mIzQzO1xuIFx0LyogQWRkIHRoZSBzd2l0Y2ggdG8gZGV2bGluayBiZWZvcmUgY2FsbGluZyBzZXR1cCwgc28gdGhhdCBzZXR1cCBjYW5cbiBcdCAqIGFkZCBkcGlwZSB0YWJsZXNcbiBcdCAqL1xuLVx0ZGwgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNmRzYV9kZXZsaW5rX29wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtXHUwMDNlZGV2KTtcbiYjNDM7XHRkbCA9IGRldmxpbmtfYWxsb2Mob3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cdTAwM2VkZXYpO1xuIFx0aWYgKCFkbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkOTBlMGRmNDcyZWQ1ZWU4YjYzYTBjYjNjYThmM2YxYTQ4NWM1NjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMjo0NToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdAppbmRleCA0NzQ1MTQ4ZmVjZjRmZS4uMDU4OTk5ZDBkYzU2ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKQEAgLTk0LDYgJiM0Mzs5NCw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy4KICAgIG1seDUKICAgIG1seHN3CiAgICBtdjg4ZTZ4eHgKJiM0MzsgICBteGw4NjJ4eAogICAgbmV0ZGV2c2ltCiAgICBuZnAKICAgIG9jdGVvbnR4MgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iM2U5ZjdkNGQ0OTY5ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdApAQCAtMCwwICYjNDM7MSw2MyBAQAomIzQzOy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7bXhsODYyeHggZGV2bGluayBzdXBwb3J0CiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRldmxpbmsgZmVhdHVyZXMgaW1wbGVtZW50ZWQgYnkgdGhlCiYjNDM7YGBteGw4NjJ4eGBgIGRldmljZSBkcml2ZXIuCiYjNDM7CiYjNDM7SW5mbyB2ZXJzaW9ucwomIzQzOz09PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnMKJiM0MzsKJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkCiYjNDM7ICAgOndpZHRoczogNSA1IDUgODUKJiM0MzsKJiM0MzsgICAqIC0gTmFtZQomIzQzOyAgICAgLSBUeXBlCiYjNDM7ICAgICAtIEV4YW1wbGUKJiM0MzsgICAgIC0gRGVzY3JpcHRpb24KJiM0MzsgICAqIC0gYGBhc2ljLmlkYGAKJiM0MzsgICAgIC0gZml4ZWQKJiM0MzsgICAgIC0gODYyOAomIzQzOyAgICAgLSBUaGUgY2hpcCBwYXJ0IG51bWJlciByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLiBOb3QKJiM0MzsgICAgICAgcmVwb3J0ZWQgZm9yIGEgc3dpdGNoIHNpdHRpbmcgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBhcyB0aGUKJiM0MzsgICAgICAgcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2l0aCBhIHJ1bm5pbmcgZmlybXdhcmUuCiYjNDM7ICAgKiAtIGBgYXNpYy5yZXZgYAomIzQzOyAgICAgLSBmaXhlZAomIzQzOyAgICAgLSAwCiYjNDM7ICAgICAtIFRoZSBjaGlwIHZlcnNpb24gcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90IHJlcG9ydGVkCiYjNDM7ICAgICAgIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUgZWl0aGVyLgomIzQzOyAgICogLSBgYGZ3YGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIDEuMC43MAomIzQzOyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBzd2l0Y2gsIHJlcG9ydGVkIGFzIGJvdGgKJiM0MzsgICAgICAgcnVubmluZyBhbmQgc3RvcmVkIHNpbmNlIHRoZSBzd2l0Y2ggYm9vdHMgaXQgZnJvbSBpdHMgb3duIGZsYXNoLgomIzQzOyAgICAgICBJbiBNQ1Vib290IHJlc2N1ZSBtb2RlIG5vdGhpbmcgaXMgcmVwb3J0ZWQgd2hpbGUgYW4gaW50ZXJydXB0ZWQKJiM0MzsgICAgICAgZG93bmxvYWQgaXMgc3RpbGwgYmVpbmcgcmVjb3ZlcmVkIGluIHRoZSBiYWNrZ3JvdW5kOyBvbmNlIHRoZQomIzQzOyAgICAgICBsb2FkZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IGltYWdlIHRoZSB2ZXJzaW9uIGlzIHJlcG9ydGVkIChhcwomIzQzOyAgICAgICBib3RoIHJ1bm5pbmcgYW5kIHN0b3JlZCksIHdoaWNoIGlzIHRoZSBzaWduYWwgdGhhdCBhIGZsYXNoIHdpbGwgYmUKJiM0MzsgICAgICAgYWNjZXB0ZWQuIEl0IHJlYWRzICYjMzQ7MC4wLjAmIzM0OyB3aGVuIHRoZSBzd2l0Y2ggY2FtZSB1cCBzdHJhaWdodCBpbnRvCiYjNDM7ICAgICAgIE1DVWJvb3Qgd2l0aG91dCBldmVyIHJ1bm5pbmcgZmlybXdhcmUuCiYjNDM7CiYjNDM7Rmxhc2ggdXBkYXRlCiYjNDM7PT09PT09PT09PT09CiYjNDM7CiYjNDM7VGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBgYGRldmxpbmsgZGV2IGZsYXNoYGAuCiYjNDM7VGhlIHNpZ25lZCBmaXJtd2FyZSBpbWFnZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgc3dpdGNoIG92ZXIgdGhlIHNhbWUKJiM0MztNRElPIGJ1cyB3aGljaCBpcyBhbHNvIHVzZWQgdG8gbWFuYWdlIHRoZSBzd2l0Y2gsIHRoZW4gdmVyaWZpZWQgYW5kCiYjNDM7aW5zdGFsbGVkIGJ5IHRoZSBNQ1Vib290IGJvb3Rsb2FkZXIgcnVubmluZyBvbiB0aGUgc3dpdGNoLiBBbGwgcG9ydHMKJiM0MztvZiB0aGUgc3dpdGNoIGFyZSBjbG9zZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdXBkYXRlIGFuZCB0aGUgZHJpdmVyCiYjNDM7cmVwcm9iZXMgdGhlIHN3aXRjaCBhZnRlciBpdCBoYXMgcmVib290ZWQgaW50byB0aGUgbmV3IGZpcm13YXJlLiBBCiYjNDM7Y29tcGxldGUgZmxhc2ggYW5kIHJlcHJvYmUgY3ljbGUgdGFrZXMgYWJvdXQgb25lIG1pbnV0ZS4KJiM0MzsKJiM0MztBIHN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCBlLmcuIGFmdGVyIGFuIGludGVycnVwdGVkCiYjNDM7dXBkYXRlLCBpcyByZWdpc3RlcmVkIHdpdGhvdXQgdXNlciBwb3J0cy4gSWYgdGhlIHByZXZpb3VzIGRvd25sb2FkIHdhcwomIzQzO2ludGVycnVwdGVkIG1pZC10cmFuc2ZlciB0aGUgbG9hZGVyIGlzIHdlZGdlZDsgdGhlIGRyaXZlciBkcmFpbnMgaXQKJiM0MztiYWNrIHRvIGEgY2xlYW4gcmVhZHkgc3RhdGUgaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGNhbiBlYXNpbHkgdGFrZQomIzQzO21vcmUgdGhhbiAxMCBtaW51dGVzLiBEdXJpbmcgdGhhdCByZWNvdmVyeSBgYGRldmxpbmsgZGV2IGluZm9gYCByZXBvcnRzCiYjNDM7bm8gZmlybXdhcmUgdmVyc2lvbiBhbmQgYGBkZXZsaW5rIGRldiBmbGFzaGBgIHJldHVybnMgYGAtRUJVU1lgYC4KJiM0MztPbmNlIHRoZSBsb2FkZXIgaXMgcmVhZHkgdGhlIGZpcm13YXJlIHZlcnNpb24gYXBwZWFycyBhbmQgZmxhc2hpbmcgYQomIzQzO2Zpcm13YXJlIGltYWdlIHRocm91Z2ggdGhlIHJlZ3VsYXIgdXBkYXRlIGZsb3cgcmVjb3ZlcnMgdGhlIHN3aXRjaC4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNjBjZmYwMDk1M2RjYmUuLjNhNTVlZDJiYWQ5Y2JhIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTYxMDcsNiAmIzQzOzE2MTA3LDcgQEAgTToJRGFuaWVsIEdvbGxlICZsdDtkYW5pZWxAbWFrcm90b3BpYS5vcmcmZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tYXhsaW5lYXIsbXhsODYyeHgueWFtbAomIzQzO0Y6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdAogRjoJZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4LwogRjoJbmV0L2RzYS90YWdfbXhsODYyeHguYwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlCkBAIC0xLDMgJiM0MzsxLDMgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIG9iai0kKENPTkZJR19ORVRfRFNBX01YTDg2MikgJiM0Mzs9IG14bDg2Mnh4X2RzYS5vCi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8KJiM0MztteGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8gbXhsODYyeHgtZncubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oCmluZGV4IGExODBhNWRlY2ZmYzAxLi42Zjc3MTg5NTk4NGNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaApAQCAtMTIyNCw2ICYjNDM7MTIyNCwxNiBAQCBzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gewogCV9fbGUzMiBpdl9idWlsZF9udW07CiB9IF9fcGFja2VkOwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgLSBTeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZQomIzQzOyAqIEBhZGRyOiAzMi1iaXQgcmVnaXN0ZXIgYWRkcmVzcwomIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbHVlCiYjNDM7ICovCiYjNDM7c3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgewomIzQzOwlfX2xlMzIgYWRkcjsKJiM0MzsJX19sZTMyIHZhbDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogLyoqCiAgKiBlbnVtIG14bDg2Mnh4X3BvcnRfdHlwZSAtIFBvcnQgVHlwZQogICogQE1YTDg2MlhYX0xPR0lDQUxfUE9SVDogTG9naWNhbCBQb3J0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmgKaW5kZXggYzg3YTk1NWMxM2M0OGUuLmE4NjU0MjVhYTYxZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oCkBAIC03MCw3ICYjNDM7NzAsOSBAQAogI2RlZmluZSBJTlRfR1BIWV9SRUFECQkJKEdQWV9HUFkyWFhfTUFHSUMgJiM0MzsgMHgxKQogI2RlZmluZSBJTlRfR1BIWV9XUklURQkJCShHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MikKIAomIzQzOyNkZWZpbmUgU1lTX01JU0NfRldfVVBEQVRFCQkoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgxKQogI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OCQkoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgyKQomIzQzOyNkZWZpbmUgU1lTX01JU0NfUkVHX1JECQkJKFNZU19NSVNDX01BR0lDICYjNDM7IDB4OCkKIAogI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUcJKE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgxKQogI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19HRVRfU1RBVEUJKE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTRiMzU1NDUzNGMyYWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpAQCAtMCwwICYjNDM7MSw5NDkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlICZsdDtkYW5pZWxAbWFrcm90b3BpYS5vcmcmZ3Q7CiYjNDM7ICoKJiM0MzsgKiBTQiBQREkgLSBmaXJtd2FyZSBkb3dubG9hZCBpbnRlcmZhY2Ugb3ZlciBjbGF1c2UtMjIgU01ESU8KJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsgKgomIzQzOyAqIFRoZSBNeEw4NjJ4eCBNQ1Vib290IGxvYWRlciBhY2NlcHRzIGEgZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCBmb3VyICYjMzQ7U0IgUERJJiMzNDsKJiM0MzsgKiByZWdpc3RlcnMgaW4gdGhlIHN3aXRjaCBTTURJTyByZWdpc3RlciBzcGFjZS4gSXQgcnVucyB3aGVuZXZlciBubyBXU1AKJiM0MzsgKiBmaXJtd2FyZSBpcyBhY3RpdmU6IHRoZSBub3JtYWwgZmlybXdhcmUgdXBkYXRlIGVudGVycyBpdCBkZWxpYmVyYXRlbHkgLSB0aGUKJiM0MzsgKiBTWVNfTUlTQ19GV19VUERBVEUgQVBJIGNvbW1hbmQgc2V0cyBhIHN0aWNreSByZXNjdWUgYml0IGFuZCByZWJvb3RzIGludG8KJiM0MzsgKiBNQ1Vib290IC0gYW5kIHRoZSBsb2FkZXIgYWxzbyBzdGF5cyBoZXJlIHdoZW4gdGhlIHN0b3JlZCBXU1AgZmlybXdhcmUgZmFpbHMKJiM0MzsgKiBpdHMgYm9vdC10aW1lIGludGVncml0eSBjaGVjay4gVGhpcyBkcml2ZXIgZHJpdmVzIHRoZSBsb2FkZXImIzM5O3MgMHhjNTVjCiYjNDM7ICogJiMzNDtjb25zb2xlJiMzNDsgZG93bmxvYWQgcGF0aC4KJiM0MzsgKgomIzQzOyAqIFNNRElPIHJlZ2lzdGVyIGFjY2VzcyAobXhsODYyeHhfc21kaW9fcmVhZC93cml0ZSk6CiYjNDM7ICogICBNSUkgcmVnIDB4MWYgOj0gJmx0O3NiX3BkaV9yZWcmZ3Q7ICAgICAgOyBhZGRyZXNzL3BhZ2UgbGF0Y2gKJiM0MzsgKiAgIE1JSSByZWcgMHgwMCA6PSAvID0mZ3Q7ICZsdDt1MTYgZGF0YSZndDsgICA7IGRhdGEgd2luZG93CiYjNDM7ICoKJiM0MzsgKiBTQiBQREkgcmVnaXN0ZXJzIChob3N0IG5hbWUvYWRkciAgLSZndDsgIE1DVSBtYWlsYm94KToKJiM0MzsgKiAgIENUUkwgMHhlMTAwIC0mZ3Q7IDB4YzA5Mzg0MDAgICBtb2RlOiBSU1Q9MHgwMCAgUkQ9MHgwMSAgV1I9MHgwMgomIzQzOyAqICAgQUREUiAweGUxMDEgLSZndDsgMHhjMDkzODQwNCAgIFNCIHRhcmdldCB3b3JkIGFkZHJlc3MgKFNCMSBiYW5rID0gMHg3ODAwKQomIzQzOyAqICAgREFUQSAweGUxMDIgLSZndDsgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZAomIzQzOyAqICAgU1RBVCAweGUxMDMgLSZndDsgMHhjMDkzODQwYyAgIGhhbmRzaGFrZTogYSBtYWdpYyAoYmVsb3cpIG9yIGEgYnl0ZSBjb3VudAomIzQzOyAqCiYjNDM7ICogU1RBVCBtYWdpY3M6CiYjNDM7ICogICBSRUFEWSAgMHhjNTVjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGNvbnNvbGUgbG9vcCAgICAgICAgKHRoaXMgZHJpdmVyKQomIzQzOyAqICAgRExfUkRZIDB4YzMzYyAgIGxvYWRlciBpZGxlIGluIHRoZSBmbGFzaGxlc3MgbG9vcAomIzQzOyAqICAgU1RBUlQgIDB4ZjQ4ZiAgIGhvc3QgICAtJmd0OyBiZWdpbiBkb3dubG9hZCBzZXNzaW9uCiYjNDM7ICogICBBQ0sgICAgMHhmNDkwICAgbG9hZGVyIC0mZ3Q7IFNUQVJUIGFja25vd2xlZGdlZCAoU1RBUlQgJiM0MzsgMSkKJiM0MzsgKiAgIEVORCAgICAweDNjYzMgICBob3N0ICAgLSZndDsgZW5kIG9mIHRyYW5zZmVyIC8gZmluYWxpc2UKJiM0MzsgKiAgIFJEUkVHICAweGUyYzAgICBob3N0ICAgLSZndDsgcmVnaXN0ZXItcmVhZCBjb21tYW5kICh8IGluZGV4KSwgc2VlIGJlbG93CiYjNDM7ICoKJiM0MzsgKiBDb25zb2xlIGZsYXNoIHBhdGggKFNUQVQ9MHhjNTVjKSAtIG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKCk6CiYjNDM7ICoKJiM0MzsgKiAgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcgomIzQzOyAqICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tCiYjNDM7ICogICByZXNldCAoQ1RSTD1BRERSPURBVEE9MCkKJiM0MzsgKiAgIHJlYWQgU1RBVCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDB4YzU1YyAgIChSRUFEWSwgaWRsZSkKJiM0MzsgKiAgIFNUQVQgOj0gU1RBUlQoMHhmNDhmKSAgLS0tLS0tLS0tLS0tLS0mZ3Q7CiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICZsdDstLS0tLS0tLS0tLS0tLSBTVEFUID0gMHhmNDkwIChBQ0spCiYjNDM7ICogICBDVFJMIDo9IFdSCiYjNDM7ICogICBEQVRBIDo9IGhkclswLi45XSAgKDIwLWJ5dGUgaGVhZGVyOiB0eXBlLHNpemUxLGNyYzEsc2l6ZTIsY3JjMikKJiM0MzsgKiAgIHJlc2V0OyBTVEFUIDo9IDIwIChoZWFkZXIgbGVuKSAgLS0tLS0mZ3Q7IHBhcnNlIGhkcjsgcl9yZW1haW49c2l6ZTEmIzQzO3NpemUyOwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJBU0UgdGFyZ2V0IHJlZ2lvbihzKQomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7LS0tLS0tLS0tLS0tLS0gU1RBVD0yMSAobGVuJiM0MzsxKSwgdGhlbiBTVEFUPTAKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpCiYjNDM7ICogICAtLSBwYXlsb2FkLCBzdHJlYW1lZCBpbiBzbGljZXM6IC0tCiYjNDM7ICogICBDVFJMIDo9IFdSCiYjNDM7ICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLgomIzQzOyAqICAgICBhdCB3b3JkIDE2Mzg0OiByZXNldDsgQUREUjo9MHg3ODAwOyBDVFJMOj1XUiAgIChoYWxmLWJhbmsgLSZndDsgU0IxKQomIzQzOyAqICAgICBhdCB3b3JkIDMyNzYwOiBmbHVzaCBzbGljZToKJiM0MzsgKiAgICAgICAgcmVzZXQ7IFNUQVQgOj0gJmx0O2J5dGVzX3RoaXNfc2xpY2UmZ3Q7IC0tLSZndDsgcl9yZW1haW4gLT0gYnl0ZXM7IHByb2dyYW0KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0Oy0tLS0tLS0tLS0tLS0tLS0tLS0gU1RBVD0wICAocmVhZHkgZm9yIG5leHQgc2xpY2UpCiYjNDM7ICogICAuLi4gcmVwZWF0IHVudGlsIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHNlbnQgLi4uCiYjNDM7ICogICBTVEFUIDo9IEVORCgweDNjYzMpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0mZ3Q7IGZpbmFsaXNlCiYjNDM7ICoKJiM0MzsgKiBUaGUgcl9yZW1haW4gPT0gMCBydWxlIChjcml0aWNhbCk6CiYjNDM7ICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyCiYjNDM7ICogICBkb2VzIHJfcmVtYWluIC09IGNvdW50IGFuZCBzdGF5cyBpbiB0aGUgcmVjZWl2ZSBsb29wIHdoaWxlIHJfcmVtYWluICE9IDAuCiYjNDM7ICogICBJdCBsZWF2ZXMgdGhlIGxvb3AsIHZhbGlkYXRlcywgYW5kIC0gaWYgaXQgd2FzIGluIHJlc2N1ZSAtIGNsZWFycyBpdHMKJiM0MzsgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHMKJiM0MzsgKiAgIEVYQUNUTFkgMC4gQSBjb3VudCBsYXJnZXIgdGhhbiByX3JlbWFpbiB1bmRlcmZsb3dzIHRoZSAzMi1iaXQgY291bnRlciBhbmQKJiM0MzsgKiAgIHdlZGdlcyB0aGUgbG9hZGVyIHVudGlsIGEgcG93ZXIgY3ljbGUuIEhlbmNlOgomIzQzOyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nOwomIzQzOyAqICAgICAtIGludGVycnVwdGVkLWRvd25sb2FkIHJlY292ZXJ5IGZlZWRzIDEgYnl0ZSBhdCBhIHRpbWUgKHNlZSBiZWxvdykuCiYjNDM7ICoKJiM0MzsgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKToKJiM0MzsgKiAgIEEgaG9zdCB0aGF0IGRpZXMgbWlkLXBheWxvYWQgbGVhdmVzIHRoZSBsb2FkZXIgc3Bpbm5pbmcgaW4gdGhlIHNsaWNlIGxvb3AKJiM0MzsgKiAgIGhvbGRpbmcgU1RBVD0wIChubyBtYWdpYykuIEZlZWQgc2luZ2xlIDEtYnl0ZSBjaHVua3MgKG9uZSBEQVRBIHdvcmQgJiM0MzsKJiM0MzsgKiAgIFNUQVQ9MSkgdW50aWwgcl9yZW1haW4gcmVhY2hlcyAwLCB0aGVuIFNUQVQ9RU5EOyB0aGUgbG9hZGVyIGZpbmFsaXNlcyB0aGUKJiM0MzsgKiAgIChub3cgY29ycnVwdCkgaW1hZ2UgYW5kIHJlLWFybXMgUkVBRFkgZm9yIGEgY2xlYW4gcmVmbGFzaC4KJiM0MzsgKgomIzQzOyAqIFJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIChub24tZGVzdHJ1Y3RpdmUgbGl2ZW5lc3MgcHJvb2YpOgomIzQzOyAqICAgREFUQSA6PSAweDdjMjMgKG1hcmtlcik7IFNUQVQgOj0gMHhlMmMwfGlkeAomIzQzOyAqICAgICAtJmd0OyBsb2FkZXIgcmV0dXJucyBhIHJ1bnRpbWUgd29yZCBpbiBEQVRBIGFuZCByZS1hcm1zIFNUQVQ9MHhjNTVjLgomIzQzOyAqICAgVGhlIHJlcGx5IHNvdXJjZSBpcyBsb2FkZXIgQlNTLCBub3QgYSBjaGlwIGlkOyB1c2VkIG9ubHkgdG8gcHJvdmUgYSBsaXZlCiYjNDM7ICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLgomIzQzOyAqCiYjNDM7ICogVGhlIG90aGVyIFNUQVQgcmVhZHkgbWFnaWMsIDB4YzMzYywgbWFya3MgdGhlIGxvYWRlciYjMzk7cyBmbGFzaGxlc3MKJiM0MzsgKiBjaGlwLXRvLWNoaXAgZG93bmxvYWQgbW9kZSAoTXhMODYyODFTIDE2LXBvcnQgdGllcik7IHRoaXMgZHJpdmVyIGRvZXMgbm90CiYjNDM7ICogdXNlIGl0LgomIzQzOyAqCiYjNDM7ICogUmVzY3VlIGxpZmVjeWNsZSAoZGV2bGluayk6IHByb2JlIHJ1bnMgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCk7IGEgd2VkZ2VkCiYjNDM7ICogbG9hZGVyIGlzIGRyYWluZWQgYmFjayB0byBSRUFEWSBieSBhIGJhY2tncm91bmQgc2VsZi1oZWFsIChyZXNjdWVfaGVhbF93b3JrKSBzbwomIzQzOyAqIHRoZSBtdWx0aS1taW51dGUgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay4gZGV2bGluayBkZXYgaW5mbwomIzQzOyAqIGV4cG9zZXMgdGhlIGZ3IHZlcnNpb24gKHRoZSAmIzM0O2ZsYXNoYWJsZSYjMzQ7IHNpZ25hbCkgb25seSBvbmNlIGF0IFJFQURZOwomIzQzOyAqIGZsYXNoX3VwZGF0ZSByZXR1cm5zIC1FQlVTWSB1bnRpbCB0aGVuLCBhbmQgcmVwcm9iZXMgdG8gV1NQIGZpcm13YXJlIG9uIHN1Y2Nlc3MuCiYjNDM7ICoKJiM0MzsgKiBOb3RlczoKJiM0MzsgKiAgIC0gQ2hpcCBpZC9yZXZpc2lvbiAoMHhjMGQyODg4NC84OCkgYXJlIE5PVCByZWFjaGFibGUgb24gdGhpcyBjaGFubmVsOyB0aGV5CiYjNDM7ICogICAgIG5lZWQgdGhlIGNsYXVzZS00NSBNTUQgZmlybXdhcmUgbWFpbGJveCwgd2hpY2ggaXMgZGVhZCB1bmRlciBNQ1Vib290LgomIzQzOyAqICAgICBSZXNjdWUgaWRlbnRpdHkgaXMgYnkgU0IgUERJIGJlaGF2aW91ciBvbmx5IChteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QpLgomIzQzOyAqICAgLSBUaGUgU01ESU8gUEhZIGFkZHJlc3MgYW5kIHRoZSAweGUxeHggb2Zmc2V0cyBhcmUgT1RQLWNvbmZpZ3VyYWJsZTsgZGVyaXZlCiYjNDM7ICogICAgIHRoZW0gZnJvbSB0aGUgRFQgYmluZGluZywgZG8gbm90IGFzc3VtZSBmaXhlZCB2YWx1ZXMuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYzMyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2RzYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvc3dpdGNoZGV2LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWNtZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWZ3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtaG9zdC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBTQiBQREkgcmVnaXN0ZXJzIChjbGF1c2UtMjIgU01ESU8gYWRkcmVzcyBzcGFjZSkgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMCQkweGUxMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSCQkweGUxMDEKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBCQkweGUxMDIKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUCQkweGUxMDMKJiM0MzsKJiM0MzsvKiBTQiBQREkgQ1RSTCBtb2RlcyAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUCTB4MDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSCQkweDAyCiYjNDM7CiYjNDM7LyogU0IgUERJIGhhbmRzaGFrZSBtYWdpYyAocHVibGlzaGVkL2NvbnN1bWVkIHZpYSBTVEFUKSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JFQURZCQkweGM1NWMJLyogbG9hZGVyIGlkbGUsIGNvbnNvbGUgbG9vcCAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RMX1JFQURZCTB4YzMzYwkvKiBsb2FkZXIgaWRsZSwgZmxhc2hsZXNzIGxvb3AgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFSVAkJMHhmNDhmCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfRU5ECQkweDNjYzMKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFRwkJMHhlMmMwCS8qIHJlZ2lzdGVyLXJlYWQgY21kICh8IGluZGV4KSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUksJMHg3YzIzCS8qIG1hcmtlciBwbGFjZWQgaW4gREFUQSBmb3IgUkRSRUcgKi8KJiM0MzsKJiM0MzsvKiBCZWhhdmlvdXJhbCBwcmVzZW5jZSBwcm9iZTogdHdvIGRpc3RpbmN0IDE2LWJpdCBsYXRjaGVzIG9uIEFERFIvREFUQS4gKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BCQkweDVhNWEKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9ECQkweGE1YTUKJiM0MzsKJiM0MzsvKiBGaXJtd2FyZSB0cmFuc2ZlciBnZW9tZXRyeSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfSERSX1NJWkUJCTIwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEYJCTE2Mzg0CS8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0UJCTMyNzYwCS8qIHdvcmRzIHBlciBmdWxsIHNsaWNlICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUgkJMHg3ODAwCS8qIFNCMSB3b3JkIGFkZHJlc3MgKi8KJiM0MzsKJiM0MzsvKiBUaW1lb3V0cyAoZ2VuZXJvdXMgdXBwZXIgYm91bmRzKSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUwkzMDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUwk1MDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TCTMwMDAwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NUwkxMjAwMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUwk1MDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TCTUwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMAomIzQzOwomIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLAomIzQzOwkJCQkgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsCiYjNDM7CQkJCXZhbCAmbHQ7IDAgfHwgKHUxNil2YWwgPT0gZXhwZWN0ZWQsCiYjNDM7CQkJCTEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsCiYjNDM7CQkJCXByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgICAgIHUzMiBkYXRhX3dyaXR0ZW4pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsIGRhdGFfd3JpdHRlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwKJiM0MzsJCQkJCSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLAomIzQzOwkJCQkgIHUzMiBkb25lLCB1MzIgdG90YWwpCiYjNDM7ewomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUG9zdC1mbGFzaCByZXByb2JlLiBkZXZpY2VfcmVwcm9iZSgpIC0mZ3Q7IHJlbW92ZSgpIGZyZWVzIHByaXYsIHNvIHRoaXMgcnVucwomIzQzOyAqIGRldGFjaGVkIGZyb20gcHJpdiwgb24gb25seSB0aGUgaGVsZCBkZXZpY2UgcmVmZXJlbmNlLiBJdCBydW5zIGFzIGEga3RocmVhZAomIzQzOyAqIHNvIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkIHdpdGggbW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KCksCiYjNDM7ICogZnJvbSBjb3JlLWtlcm5lbCBjb2RlIC0tIGEgd29yayBpdGVtJiMzOTtzIHRyYWlsaW5nIG1vZHVsZV9wdXQoKSBjb3VsZCByZXR1cm4KJiM0MzsgKiBpbnRvIG1vZHVsZSB0ZXh0IGEgcmFjaW5nIHJtbW9kIGhhcyBhbHJlYWR5IGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4odm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CiYjNDM7CiYjNDM7CW1zbGVlcChNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TKTsKJiM0MzsJaWYgKGRldmljZV9yZXByb2JlKGRldikpCiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtyZXByb2JlIGZhaWxlZFxuJiMzNDspOwomIzQzOwlwdXRfZGV2aWNlKGRldik7CiYjNDM7CW1vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdCgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiB7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBTcGF3biB0aGUgcmVwcm9iZSBrdGhyZWFkIGZyb20gd29ya3F1ZXVlIGNvbnRleHQsIHdoZXJlIGt0aHJlYWRfY3JlYXRlKCkKJiM0MzsgKiBjYW5ub3QgcmV0dXJuIC1FSU5UUiBhcyBpdCBjYW4gZnJvbSB0aGUgZGV2bGluayBjYWxsZXImIzM5O3MgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmZfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa28gPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYsIHdvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrby0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CiYjNDM7CWtmcmVlKGtvKTsKJiM0MzsJdGFzayA9IGt0aHJlYWRfcnVuKG14bDg2Mnh4X3JlcHJvYmVfdGhyZWFkX2ZuLCBkZXYsICYjMzQ7bXhsODYyeHgtcmVwcm9iZSYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUih0YXNrKSkgewomIzQzOwkJZGV2X2VycihkZXYsCiYjNDM7CQkJJiMzNDtyZXByb2JlIGt0aHJlYWQgZmFpbGVkICglcGUpOyByZWxvYWQgdGhlIGRyaXZlciB0byByZXN0b3JlIG9wZXJhdGlvblxuJiMzNDssCiYjNDM7CQkJdGFzayk7CiYjNDM7CQlwdXRfZGV2aWNlKGRldik7CiYjNDM7CQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuCiYjNDM7ICogYWxsb2NhdGlvbiBmYWlsdXJlIGFib3J0cyBjbGVhbmx5LiBUaGUgY2FsbGVyIGhvbGRzIGEgbW9kdWxlIGFuZCBhIGRldmljZQomIzQzOyAqIHJlZmVyZW5jZTsgb25jZSB0aGUga2lja29mZiBpcyBzY2hlZHVsZWQgdGhlIHJlcHJvYmUga3RocmVhZCByZWxlYXNlcyBib3RoLgomIzQzOyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICpteGw4NjJ4eF9yZXByb2JlX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKmtvOwomIzQzOwomIzQzOwlrbyA9IGt6YWxsb2Nfb2JqKCprbyk7CiYjNDM7CWlmICgha28pCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJa28tJmd0O2RldiA9IGRldjsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7a28tJmd0O3dvcmssIG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZl9mbik7CiYjNDM7CXJldHVybiBrbzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQnl0ZS1jb3VudCBvZiBlYWNoIGNodW5rIGZlZCB0byB0aGUgbG9hZGVyIGR1cmluZyBkcmFpbi4gSXQgTVVTVCBiZSAxOiB0aGUKJiM0MzsgKiBsb2FkZXIgb25seSBsZXRzIHVzIG9ic2VydmUgJiMzNDtjb3VudGVyID09IDAmIzM0OywgbmV2ZXIgJiMzNDtjb3VudGVyICZsdDsgc3RlcCYjMzQ7LCBzbyBhbnkKJiM0MzsgKiBzdGVwICZndDsgMSBjYW4gc3VidHJhY3QgcGFzdCB6ZXJvLCB1bmRlcmZsb3cgdGhlIDMyLWJpdCBjb3VudGVyIGFuZCB3ZWRnZSB0aGUKJiM0MzsgKiBsb2FkZXIgZm9yIH4yXjMyIG1vcmUgYnl0ZXMgKGEgc3RhdGUgb25seSBhIHBvd2VyIGN5Y2xlIGNsZWFycykuIFN0ZXBwaW5nIGJ5CiYjNDM7ICogMSB3YWxrcyB0aGUgY291bnRlciB0aHJvdWdoIGV2ZXJ5IHZhbHVlIGFuZCBpcyBndWFyYW50ZWVkIHRvIGxhbmQgb24gemVybwomIzQzOyAqIHdoYXRldmVyIGl0cyAocG9zc2libHkgb2RkKSBzdGFydC4gQSAxLWJ5dGUgY2h1bmsgaXMgYSBwYXRoIHRoZSBsb2FkZXIKJiM0MzsgKiBhbHJlYWR5IGhhbmRsZXM6IHRoZSBub3JtYWwgdHJhbnNmZXIgZW5kcyB3aXRoIGEgc2luZ2xlIHRyYWlsaW5nIGJ5dGUgZm9yCiYjNDM7ICogb2RkLXNpemVkIGltYWdlcyAoc2VlIFN0ZXAgNikuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUwkxCiYjNDM7CiYjNDM7LyogUG9sbCBTVEFUIHdoaWxlIGRyYWluaW5nIGEgc3R1Y2sgZG93bmxvYWQ6IDAgbWVhbnMgJiMzNDtmZWVkIHRoZSBuZXh0IGNodW5rJiMzNDssCiYjNDM7ICogUkVBRFkgbWVhbnMgdGhlIGxvYWRlciBsZWZ0IHRoZSByZWNlaXZlIGxvb3AgYW5kIHJlLWFybWVkIGl0cyBjb21tYW5kIGxvb3AsCiYjNDM7ICogYW55dGhpbmcgZWxzZSBpcyBhIHRyYW5zaWVudCAodGhlIGNvdW50IGJlaW5nIGNvbnN1bWVkKSAtIEJVU1kgcGFzdCB0aGUKJiM0MzsgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuCiYjNDM7ICovCiYjNDM7ZW51bSB7IE1YTDg2MlhYX0RSQUlOX0ZFRUQsIE1YTDg2MlhYX0RSQUlOX1JFQURZLCBNWEw4NjJYWF9EUkFJTl9CVVNZIH07CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcmVhZF9wb2xsX3RpbWVvdXQobXhsODYyeHhfc21kaW9fcmVhZCwgdmFsLAomIzQzOwkJCSAgdmFsICZsdDsgMCB8fCAodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkgfHwKJiM0MzsJCQkgICh1MTYpdmFsID09IDAsCiYjNDM7CQkJICA1MCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlLAomIzQzOwkJCSAgcHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CWlmICgodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkpCiYjNDM7CQlyZXR1cm4gTVhMODYyWFhfRFJBSU5fUkVBRFk7CiYjNDM7CWlmICgodTE2KXZhbCA9PSAwKQomIzQzOwkJcmV0dXJuIE1YTDg2MlhYX0RSQUlOX0ZFRUQ7CiYjNDM7CXJldHVybiBNWEw4NjJYWF9EUkFJTl9CVVNZOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWNvdmVyIGEgc3dpdGNoIHdob3NlIFNCIFBESSBkb3dubG9hZCB3YXMgaW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIC0gdGhlCiYjNDM7ICogaG9zdCBkaWVkIGFmdGVyIE1DVWJvb3QgYmVnYW4gZXJhc2luZyBmbGFzaCwgd2hldGhlciBpdCBhYm9ydGVkIG1pZCBlcmFzZSBvcgomIzQzOyAqIG1pZCBpbWFnZS13cml0ZSwgYm90aCBlbmQgdXAgaW4gdGhlIHNhbWUgcGxhY2U6IHRoZSBwYXlsb2FkIHJlY2VpdmUgbG9vcC4KJiM0MzsgKiBUaGVyZSB0aGUgbG9hZGVyIHB1Ymxpc2hlcyBTVEFUPTAsIHdhaXRzIGZvciB0aGUgaG9zdCB0byB3cml0ZSBhIGJ5dGUtY291bnQKJiM0MzsgKiB0byBTVEFULCBETUFzIHRoYXQgbWFueSBieXRlcyBhbmQgc3VidHJhY3RzIHRoZSBjb3VudCBmcm9tIGEgcmVtYWluaW5nLWJ5dGVzCiYjNDM7ICogY291bnRlciwgbGVhdmluZyB0aGUgbG9vcCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyBleGFjdGx5IHplcm8uIFRoZQomIzQzOyAqIGltYWdlIHNpemUgZGllZCB3aXRoIHRoZSBob3N0LCBzbyB3ZSBmZWVkIHNpbmdsZS1ieXRlIGNodW5rcyAoc2VlCiYjNDM7ICogTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpIHRvIHdhbGsgdGhlIGNvdW50ZXIgdG8gemVybyB3aXRob3V0IHVuZGVyZmxvdywKJiM0MzsgKiB0aGVuIHNlbmQgRU5ELiBUaGUgbG9hZGVyIHZhbGlkYXRlcyB0aGUgKG5vdyBjb3JydXB0KSBpbWFnZSBhbmQgcmUtYXJtcwomIzQzOyAqIFJFQURZLCBvciBib290cyBhIHZhbGlkIGltYWdlIHRoYXQgaGFwcGVuZWQgdG8gc3Vydml2ZSBpbiBmbGFzaC4gVGhpcyBvbmx5CiYjNDM7ICogZmluYWxpc2VzIHRoZSB0cmFuc2ZlcjsgdGhlIGNhbGxlciYjMzk7cyByZXByb2JlIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlCiYjNDM7ICogcmVzdWx0cy4gUmV0dXJucyAwIG9uY2UgZmluYWxpc2VkLCAmbHQ7MCBvbiBlcnJvci4gRG9lcyBOT1QgcmVjb3ZlciBhIGNvdW50ZXIKJiM0MzsgKiBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGEKJiM0MzsgKiBwb3dlciBjeWNsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwkvKiBCb3VuZDogdHdpY2UgdGhlIGxvYWRlciYjMzk7cyAxNiBNaUIgaW1hZ2UgY2FwLCBvbmUgYnl0ZSBwZXIgY2h1bmsuICovCiYjNDM7CXUzMiBtYXhfY2h1bmtzID0gMnUgKiAoMTZ1ICZsdDsmbHQ7IDIwKSAvIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTOwomIzQzOwl1MzIgY2h1bmsgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkZXZfd2FybihkZXYsICYjMzQ7Zmxhc2g6IGRyYWluaW5nIGludGVycnVwdGVkIGRvd25sb2FkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdoaWxlIChjaHVuayAmbHQ7IG1heF9jaHVua3MpIHsKJiM0MzsJCS8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovCiYjNDM7CQlpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXJldHVybiAtRUNBTkNFTEVEOwomIzQzOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9SRUFEWSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fQlVTWSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIEZlZWQgb25lIHplcm8gYnl0ZTsgcmVzZXQgY2xlYXJlZCB0aGUgd3JpdGUgbGF0Y2guICovCiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJCQkgICBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJY2h1bmsmIzQzOyYjNDM7OwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNodW5rICZndDs9IG1heF9jaHVua3MpIHsKJiM0MzsJCWRldl9lcnIoZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGludGVycnVwdGVkIGRvd25sb2FkIGRpZCBub3QgZHJhaW4gYWZ0ZXIgJXUgY2h1bmtzXG4mIzM0OywKJiM0MzsJCQljaHVuayk7CiYjNDM7CQlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0VORCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogTGV0IHRoZSBsb2FkZXIgdmFsaWRhdGUgYW5kIHJlLWFybSBSRUFEWSwgb3IgYm9vdCBhIHN1cnZpdmluZyBpbWFnZTsKJiM0MzsJICogdGhlIGNhbGxlciYjMzk7cyByZXByb2JlIHRoZW4gY2xhc3NpZmllcyB3aGljaGV2ZXIgc3RhdGUgcmVzdWx0cy4KJiM0MzsJICovCiYjNDM7CW1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQmFja2dyb3VuZCBzZWxmLWhlYWw6IGRyYWluIGEgd2VkZ2VkIGRvd25sb2FkIG9mZiB0aGUgZGV2bGluayBmbGFzaCBwYXRoLCBzbwomIzQzOyAqIHRoZSBtaW51dGVzLWxvbmcgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay4gU2NoZWR1bGVkIGZyb20gcHJvYmU7CiYjNDM7ICogcmVwcm9iZXMgb24gc3VjY2VzcyBzbyB0aGUgcHJvYmUtdGltZSBkZXRlY3Rpb24gcmUtY2xhc3NpZmllcyB0aGUgc3dpdGNoLgomIzQzOyAqLwomIzQzO3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3ByaXYsIHJlc2N1ZV9oZWFsX3dvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRldl9pbmZvKGRldiwgJiMzNDtyZWNvdmVyaW5nIGludGVycnVwdGVkIGRvd25sb2FkIGluIGJhY2tncm91bmRcbiYjMzQ7KTsKJiM0MzsJcmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpOwomIzQzOwlpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBUaGUgaW50ZXJydXB0ZWQgdHJhbnNmZXIgaXMgZmluYWxpc2VkOyByZXByb2JlIHNvIHRoZSBwcm9iZS10aW1lCiYjNDM7CSAqIGRldGVjdGlvbiBicmluZ3MgdGhlIGRyaXZlciB1cCAtLSBmbGFzaGFibGUgaW4gcmVzY3VlIG1vZGUgaWYgdGhlCiYjNDM7CSAqIGxvYWRlciBpcyBhdCBSRUFEWSwgb3Igbm9ybWFsbHkgaWYgYSB2YWxpZCBpbWFnZSBib290ZWQuIFRoZSByZWZzCiYjNDM7CSAqIGFyZSByZWxlYXNlZCBieSB0aGUgcmVwcm9iZSBvbmNlIGl0IGNvbXBsZXRlcy4KJiM0MzsJICovCiYjNDM7CWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlnZXRfZGV2aWNlKGRldik7CiYjNDM7CWtvID0gbXhsODYyeHhfcmVwcm9iZV9hbGxvYyhkZXYpOwomIzQzOwlpZiAoIWtvKSB7CiYjNDM7CQlwdXRfZGV2aWNlKGRldik7CiYjNDM7CQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7a28tJmd0O3dvcmspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEZXRlY3QgTUNVYm9vdCByZXNjdWUgbW9kZSBvdmVyIGNsYXVzZS0yMiBTTURJTyBhbG9uZSwgc28gdGhlIGNhbGxlciBjYW4gcnVsZQomIzQzOyAqIHRoZSBsb2FkZXIgb3V0IGJlZm9yZSBhbnkgQzQ1IEFQSSByZXF1ZXN0ICh3aGljaCBzcGV3cyBDUkMgZXJyb3JzIHdoZW4gbm8gV1NQCiYjNDM7ICogZmlybXdhcmUgYW5zd2VycykuIEEgc2NyYXRjaCB3cml0ZSB0byBBRERSL0RBVEEgbXVzdCBsYXRjaCBvciB0aGUgY2hpcCBpcwomIzQzOyAqIGFic2VudCAoLUVOT0RFVik7IFNUQVQgdGhlbiBjbGFzc2lmaWVzIHRoZSBzdGF0ZSwgcG9rZWQgZGVzdHJ1Y3RpdmVseSBvbmx5CiYjNDM7ICogd2hlbiAwLCB0aGUgb25lIHZhbHVlIGEgcnVubmluZyBmaXJtd2FyZSBuZXZlciBob2xkczoKJiM0MzsgKgomIzQzOyAqICAtIDB4YzMzYzogZmxhc2hsZXNzIGxvb3AsIHJlYWR5LgomIzQzOyAqICAtIDB4YzU1YzogY29uc29sZSBsb29wLCBpZiB0aGUgcmVnaXN0ZXItcmVhZCBjaGFsbGVuZ2UgaXMgc2VydmljZWQuCiYjNDM7ICogIC0gb3RoZXIgbm9uLXplcm86IHJ1bm5pbmcgZmlybXdhcmUsIGxlZnQgdW5wb2tlZC4KJiM0MzsgKiAgLSAwOiB3ZWRnZWQgcmVjZWl2ZSBsb29wLCBpZiBhIDEtYnl0ZSBzbGljZS1hZHZhbmNlIGRyYWlucyBiYWNrIHRvIDAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE1YTDg2MlhYX0lOX1JFU0NVRSwgTVhMODYyWFhfTk9UX1JFU0NVRSwgb3IgbmVnYXRpdmUgKC1FTk9ERVYvU01ESU8pLgomIzQzOyAqLwomIzQzO2ludCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgc3RhdCwgZGF0LCByZXQsIHJiLCBhLCBkOwomIzQzOwomIzQzOwkvKiByZXNjdWVfcmVhZHkgZ2F0ZXMgZmxhc2hpbmc7IGEgd2VkZ2VkIGxvYWRlciBuZWVkcyB0aGUgZHJhaW4gZmlyc3QuICovCiYjNDM7CXByaXYtJmd0O3Jlc2N1ZV9yZWFkeSA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBQcmVzZW5jZTogYSBsaXZlIGNoaXAgbGF0Y2hlcyB0aGUgc2NyYXRjaCB3cml0ZSwgYW4gYWJzZW50IG9uZSBmbG9hdHMuICovCiYjNDM7CWEgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUiwKJiM0MzsJCQkJIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTsKJiM0MzsJaWYgKGEgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwKJiM0MzsJCQkJIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKTsKJiM0MzsJaWYgKGQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGQ7CiYjNDM7CWEgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSKTsKJiM0MzsJaWYgKGEgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBKTsKJiM0MzsJaWYgKGQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGQ7CiYjNDM7CWlmICgodTE2KWEgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0EgfHwKJiM0MzsJICAgICh1MTYpZCAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3RhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpOwomIzQzOwlpZiAoc3RhdCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gc3RhdDsKJiM0MzsKJiM0MzsJLyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3AgKE14TDg2MjgxUyB0aWVyKTogdGhpcyBkcml2ZXIgZG9lcyBub3QKJiM0MzsJICogc3VwcG9ydCBpdCAtLSB0aGUgY29uc29sZSBmbGFzaCBwYXRoIGV4cGVjdHMgUkVBRFkuIFRyZWF0IGl0IGFzIGFuCiYjNDM7CSAqIHVudXNhYmxlIGNvbmZpZ3VyYXRpb24sIGxpa2UgYW55IG90aGVyIHVuc3VwcG9ydGVkIHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFkpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJLyogQ29uc29sZSBsb29wIGF0IFJFQURZOiBjb25maXJtIHRoZSBsaXZlIG1haWxib3ggd2l0aCB0aGUgcmVnaXN0ZXItcmVhZAomIzQzOwkgKiBjaGFsbGVuZ2UgKGNvbnN1bWVzIHRoZSBtYXJrZXIgZnJvbSBEQVRBIGFuZCByZS1hcm1zIFJFQURZKS4KJiM0MzsJICovCiYjNDM7CWlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKSB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwKJiM0MzsJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9SRFJFRyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSwKJiM0MzsJCQkJCSAgICAgICBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7CiYjNDM7CQlkYXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBKTsKJiM0MzsJCWlmIChkYXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiBkYXQ7CiYjNDM7CQlteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CQlpZiAoIXJiICZhbXA7JmFtcDsgKHUxNilkYXQgIT0gTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspIHsKJiM0MzsJCQlwcml2LSZndDtyZXNjdWVfcmVhZHkgPSB0cnVlOwomIzQzOwkJCXJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbnkgb3RoZXIgbm9uLXplcm8gdmFsdWUgaXMgYSBydW5uaW5nIGZpcm13YXJlLCBub3QgYSBsb2FkZXIuICovCiYjNDM7CWlmIChzdGF0KQomIzQzOwkJcmV0dXJuIE1YTDg2MlhYX05PVF9SRVNDVUU7CiYjNDM7CiYjNDM7CS8qIFNUQVQgPT0gMDogYSB3ZWRnZWQgcmVjZWl2ZSBsb29wIGNvbnN1bWVzIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgYmFjawomIzQzOwkgKiB0byAwIChmZWVkIG9uZSBEQVRBIHdvcmQgZmlyc3QsIGxpa2UgYSBkcmFpbiBjaHVuaykuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTsKJiM0MzsJaWYgKCFyYikKJiM0MzsJCXJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PREVWOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNQ1Vib290IGZpcm13YXJlIGltYWdlIGhlYWRlciAqLwomIzQzO3N0cnVjdCBteGw4NjJ4eF9md19oZHIgewomIzQzOwlfX2xlMzIgaW1hZ2VfdHlwZTsKJiM0MzsJX19sZTMyIGltYWdlX3NpemVfMTsKJiM0MzsJX19sZTMyIGltYWdlX2NoZWNrc3VtXzE7CiYjNDM7CV9fbGUzMiBpbWFnZV9zaXplXzI7CiYjNDM7CV9fbGUzMiBpbWFnZV9jaGVja3N1bV8yOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyICpwYXlsb2FkX3NpemUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7CiYjNDM7CXUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsOwomIzQzOwljb25zdCB1OCAqcGF5bG9hZDsKJiM0MzsJdTMyIGNyYzsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICZsdDsgTVhMODYyWFhfRldfSERSX1NJWkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBteGw4NjJ4eF9md19oZHIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsJcGF5bG9hZCA9IGZ3LSZndDtkYXRhICYjNDM7IE1YTDg2MlhYX0ZXX0hEUl9TSVpFOwomIzQzOwlzaXplMSA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2Vfc2l6ZV8xKTsKJiM0MzsJc2l6ZTIgPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX3NpemVfMik7CiYjNDM7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coc2l6ZTEsIHNpemUyLCAmYW1wO3RvdGFsKSB8fAomIzQzOwkgICAgdG90YWwgJmd0OyBmdy0mZ3Q7c2l6ZSAtIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRvdGFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgd2l0aCBlbXB0eSBwYXlsb2FkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2l6ZTEpIHsKJiM0MzsJCWNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTsKJiM0MzsJCWlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8xKSkgewomIzQzOwkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Zmxhc2g6IGltYWdlIDEgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcbiYjMzQ7LAomIzQzOwkJCQljcmMsIGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2VfY2hlY2tzdW1fMSkpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaXplMikgewomIzQzOwkJY3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCAmIzQzOyBzaXplMSwgc2l6ZTIpOwomIzQzOwkJaWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX2NoZWNrc3VtXzIpKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxuJiMzNDssCiYjNDM7CQkJCWNyYywgbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8yKSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnBheWxvYWRfc2l6ZSA9IHRvdGFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyIHBheWxvYWRfc2l6ZSwgc3RydWN0IGRldmxpbmsgKmRsKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKnBheWxvYWQgPSBmdy0mZ3Q7ZGF0YSAmIzQzOyBNWEw4NjJYWF9GV19IRFJfU0laRTsKJiM0MzsJdTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXh0X25vdGlmeSA9IGppZmZpZXMgLSAxOwomIzQzOwl1MTYgd29yZCwgZmRhdGE7CiYjNDM7CWludCByZXQsIGk7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMTogcmVib290IHRoZSBmaXJtd2FyZSBpbnRvIE1DVWJvb3QgcmVzY3VlIG1vZGUgKi8KJiM0MzsJaWYgKCFwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLAomIzQzOwkJCQkJZmFsc2UsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O2ZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCUVSUl9QVFIocmV0KSk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdGVwIDI6IHdhaXQgZm9yIGJvb3Rsb2FkZXIgcmVhZHkgKi8KJiM0MzsJbXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCAmIzM0O1dhaXRpbmcgZm9yIGJvb3Rsb2FkZXImIzM0OywgMCwgMCk7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJLyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdAomIzQzOwkgKiByZWJvb3RzIGluc3RlYWQgb2Ygd2FpdGluZyBmb3JldmVyLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksCiYjNDM7CQkJCQlNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBib290bG9hZGVyIG5vdCByZWFkeTogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMzogc3RhcnQgaGFuZHNoYWtlICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCQkgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCAmIzQzOyAxLAomIzQzOwkJCQkJTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlnb3RvIGVuZF9tYWdpYzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqLwomIzQzOwlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7RXJhc2luZyBmbGFzaCYjMzQ7LCAwLCAwKTsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXdvcmQgPSBmdy0mZ3Q7ZGF0YVtpICogMl0gfAomIzQzOwkJICAgICAgICgodTE2KWZ3LSZndDtkYXRhW2kgKiAyICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byB3cml0ZV9lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwkvKiB0aGUgYnl0ZSBjb3VudCBpbiBTVEFUIHRyaWdnZXJzIHRoZSBlcmFzZSAqLwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkJICAgTVhMODYyWFhfRldfSERSX1NJWkUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwkvKiBBQ0sgaXMgYnl0ZSBjb3VudCAmIzQzOyAxICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgJiM0MzsgMSwKJiM0MzsJCQkJCU1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBoZWFkZXIgQUNLIGZhaWxlZDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLAomIzQzOwkJCQkJTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqLwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwl3aGlsZSAoaWR4ICZsdDsgcGF5bG9hZF9zaXplKSB7CiYjNDM7CQlpZiAoaWR4ICYjNDM7IDEgJmx0OyBwYXlsb2FkX3NpemUpIHsKJiM0MzsJCQlmZGF0YSA9IHBheWxvYWRbaWR4XSB8CiYjNDM7CQkJCSgodTE2KXBheWxvYWRbaWR4ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwkJCWlkeCAmIzQzOz0gMjsKJiM0MzsJCQlkYXRhX3dyaXR0ZW4gJiM0Mzs9IDI7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZkYXRhID0gcGF5bG9hZFtpZHhdOwomIzQzOwkJCWlkeCYjNDM7JiM0Mzs7CiYjNDM7CQkJZGF0YV93cml0dGVuJiM0MzsmIzQzOzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCBmZGF0YSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHdyaXRlX2VycjsKJiM0MzsJCXdvcmRfaWR4JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChpZHggJmd0Oz0gcGF5bG9hZF9zaXplKSB7CiYjNDM7CQkJcmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBIYWxmLWJhbmsgYm91bmRhcnk6IHN3aXRjaCB0byBTQjEgYWRkcmVzcyAqLwomIzQzOwkJaWYgKHdvcmRfaWR4ID09IE1YTDg2MlhYX0ZXX0JBTktfSEFMRikgewomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLAomIzQzOwkJCQkJCSAgIE1YTDg2MlhYX0ZXX1NCMV9BRERSKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CQkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIHdyaXRlX2VycjsKJiM0MzsJCX0gZWxzZSBpZiAod29yZF9pZHggJmd0Oz0gTVhMODYyWFhfRldfQkFOS19TTElDRSkgewomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pOwomIzQzOwkJCWlmIChyZXQpIHsKJiM0MzsJCQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJCSYjMzQ7Zmxhc2g6IHdyaXRlIHRpbWVvdXQgYXQgJXUvJXU6ICVwZVxuJiMzNDssCiYjNDM7CQkJCQlpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTsKJiM0MzsJCQkJZ290byBlbmRfbWFnaWM7CiYjNDM7CQkJfQomIzQzOwkJCXdvcmRfaWR4ID0gMDsKJiM0MzsJCQlkYXRhX3dyaXR0ZW4gPSAwOwomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbmV4dF9ub3RpZnkpKSB7CiYjNDM7CQkJCW14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgJiMzNDtGbGFzaGluZyYjMzQ7LCBpZHgsCiYjNDM7CQkJCQkJICAgICAgcGF5bG9hZF9zaXplKTsKJiM0MzsJCQkJbmV4dF9ub3RpZnkgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBmaW5hbCB3cml0ZSB0aW1lb3V0OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKHJldCkpOwomIzQzOwkJZ290byBlbmRfbWFnaWM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCAmIzM0O0ZsYXNoaW5nJiMzNDssIHBheWxvYWRfc2l6ZSwgcGF5bG9hZF9zaXplKTsKJiM0MzsJZ290byBlbmRfbWFnaWM7CiYjNDM7CiYjNDM7d3JpdGVfZXJyOgomIzQzOwlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LCAmIzM0O2ZsYXNoOiBTTURJTyB3cml0ZSBmYWlsZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQlFUlJfUFRSKHJldCkpOwomIzQzO2VuZF9tYWdpYzoKJiM0MzsJLyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqLwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpOwomIzQzOwltc2xlZXAoTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCSAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJY2hhciBidWZbMTZdOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBObyBjaGlwLWlkL3JldmlzaW9uIGluIE1DVWJvb3QgKG5lZWRzIHRoZSBmaXJtd2FyZSBNTUQgbWFpbGJveCkuIFRoZQomIzQzOwkgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlICYjMzQ7cmVhZHkgdG8gZmxhc2gmIzM0OyBzaWduYWw6IHJlcG9ydCBpdCBvbmx5CiYjNDM7CSAqIG9uY2UgdGhlIGxvYWRlciBpcyBhdCBhIGNsZWFuIFJFQURZLCBub3RoaW5nIHdoaWxlIHN0aWxsIGRyYWluaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKSB7CiYjNDM7CQlpZiAoIVJFQURfT05DRShwcml2LSZndDtyZXNjdWVfcmVhZHkpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldS4ldS4ldSYjMzQ7LAomIzQzOwkJCSBwcml2LSZndDtmd192ZXJzaW9uLm1ham9yLCBwcml2LSZndDtmd192ZXJzaW9uLm1pbm9yLAomIzQzOwkJCSBwcml2LSZndDtmd192ZXJzaW9uLnJldmlzaW9uKTsKJiM0MzsJCXJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCBidWYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCAmIzM0O2Z3JiMzNDssIGJ1Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQSAwIHBhcnQgbnVtYmVyIG1lYW5zIHRoZSBDSElQIElEIHJlYWQgZmFpbGVkIG9yIHRoZSBwYXJ0IGlzCiYjNDM7CSAqIHVuZnVzZWQ7IG9taXQgaXQgcmF0aGVyIHRoYW4gcHVibGlzaCBhIGJvZ3VzICYjMzQ7MDAwMCYjMzQ7IHRoYXQgZnd1cGQKJiM0MzsJICogd291bGQgbWF0Y2ggZmlybXdhcmUgYWdhaW5zdCAtLSBpdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIGRyaXZlcgomIzQzOwkgKiBuYW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2FzaWNfaWQpIHsKJiM0MzsJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JTA0WCYjMzQ7LCBwcml2LSZndDthc2ljX2lkKTsKJiM0MzsJCXJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsCiYjNDM7CQkJCQkJICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsCiYjNDM7CQkJCQkJICAgICBidWYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldSYjMzQ7LCBwcml2LSZndDthc2ljX3Jldik7CiYjNDM7CQlyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLAomIzQzOwkJCQkJCSAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX1JFViwKJiM0MzsJCQkJCQkgICAgIGJ1Zik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldS4ldS4ldSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWFqb3IsIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWlub3IsCiYjNDM7CQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5yZXZpc2lvbik7CiYjNDM7CiYjNDM7CXJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCBidWYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogYm9vdHMgdGhpcyBpbWFnZSBmcm9tIGl0cyBvd24gZmxhc2g6IHN0b3JlZCA9PSBydW5uaW5nICovCiYjNDM7CXJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCBidWYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbzsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJdTMyIHBheWxvYWRfc2l6ZTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O2NvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy0mZ3Q7ZncsICZhbXA7cGF5bG9hZF9zaXplKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVmdXNlIHRvIGZsYXNoIHdoaWxlIHRoZSBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBpcyBzdGlsbCBkcmFpbmluZy4gKi8KJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlICZhbXA7JmFtcDsgIVJFQURfT05DRShwcml2LSZndDtyZXNjdWVfcmVhZHkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O3N3aXRjaCBpcyByZWNvdmVyaW5nIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZXRyeSBzaG9ydGx5JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgcmVmZXJlbmNlcyB0aGUgcmVwcm9iZSB3b3JrIG5lZWRzIHRvIHJlc3RvcmUgbm9ybWFsIG9wZXJhdGlvbgomIzQzOwkgKiBtdXN0IGJlIGhlbGQgYmVmb3JlIHRoZSBzd2l0Y2ggaXMgZGlzdHVyYmVkOyB0aGUgd29yayBpdHNlbGYgaXMKJiM0MzsJICogc2NoZWR1bGVkIG9ubHkgb25jZSB0aGUgZmxhc2ggaXMgZG9uZSAoc2VlIGJlbG93KS4KJiM0MzsJICovCiYjNDM7CWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CWdldF9kZXZpY2UoZHMtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIHRoZSByZXByb2JlIGtpY2tvZmYgYmVmb3JlIGRpc3R1cmJpbmcgdGhlIHN3aXRjaCwgc28gYW4KJiM0MzsJICogLUVOT01FTSBoZXJlIGNhbm5vdCBzdHJhbmQgaXQgZmxhc2hlZCBidXQgbmV2ZXIgcmVwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlrbyA9IG14bDg2Mnh4X3JlcHJvYmVfYWxsb2MoZHMtJmd0O2Rldik7CiYjNDM7CWlmICgha28pIHsKJiM0MzsJCXB1dF9kZXZpY2UoZHMtJmd0O2Rldik7CiYjNDM7CQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCWRldl9pbmZvKGRzLSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7Zmxhc2g6IGZsYXNoaW5nIHN3aXRjaCB2aWEgTUNVYm9vdCByZXNjdWUgbW9kZVxuJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlkZXZfaW5mbyhkcy0mZ3Q7ZGV2LCAmIzM0O2ZsYXNoOiBydW5uaW5nIGZpcm13YXJlICV1LiV1LiV1XG4mIzM0OywKJiM0MzsJCQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciwKJiM0MzsJCQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5yZXZpc2lvbik7CiYjNDM7CiYjNDM7CS8qIENsb3NlIHBvcnRzIHdoaWxlIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCBhbGl2ZSBzbyB0aGUgRFNBCiYjNDM7CSAqIGNvcmUmIzM5O3MgTURCL0ZEQiB0cmFja2luZyBpcyBkcmFpbmVkLCBhbmQgZGV0YWNoIHVzZXIgcG9ydHMKJiM0MzsJICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGUKJiM0MzsJICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC4KJiM0MzsJICovCiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHsKJiM0MzsJCWlmIChkcC0mZ3Q7dXNlcikgewomIzQzOwkJCWRldl9jbG9zZShkcC0mZ3Q7dXNlcik7CiYjNDM7CQkJbmV0aWZfZGV2aWNlX2RldGFjaChkcC0mZ3Q7dXNlcik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpCiYjNDM7CQlkZXZfY2xvc2UoZHAtJmd0O2NvbmR1aXQpOwomIzQzOwkvKiBUaGUgYnJpZGdlIGRlZmVycyB0aGUgU1RQIHN0YXRlIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IGNsb3NpbmcKJiM0MzsJICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2VzcygpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwltdXRleF9sb2NrX25lc3RlZCgmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7CiYjNDM7CXByaXYtJmd0O2Jsb2NrX2hvc3QgPSB0cnVlOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CiYjNDM7CXNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtzdGF0c193b3JrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O2NyY19lcnJfd29yayk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkcy0mZ3Q7bnVtX3BvcnRzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtJmd0O2Z3LCBwYXlsb2FkX3NpemUsCiYjNDM7CQkJCSAgICAgIGRzLSZndDtkZXZsaW5rKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7ZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywKJiM0MzsJCQkJICBNRElPX01VVEVYX05FU1RFRCk7CiYjNDM7CQlwcml2LSZndDtibG9ja19ob3N0ID0gZmFsc2U7CiYjNDM7CQlwcml2LSZndDtyZXNjdWVfbW9kZSA9IGZhbHNlOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwomIzQzOwkJLyogUmVmcmVzaCB0aGUgY2FjaGVkIHZlcnNpb25zIHNvIHRoZSBmbGFzaCB1cGRhdGUgb25seQomIzQzOwkJICogY29tcGxldGVzIG9uY2UgdGhlIG5ldyBmaXJtd2FyZSBpcyBjb25maXJtZWQgcnVubmluZyBhbmQKJiM0MzsJCSAqIGRldmxpbmsgZGV2IGluZm8gcmVwb3J0cyBpdC4gTXVzdCBoYXBwZW4gYmVmb3JlIHNldHRpbmcKJiM0MzsJCSAqIHNraXBfdGVhcmRvd24sIHdoaWNoIGRpc2NhcmRzIGFsbCBmaXJtd2FyZSBBUEkgcmVhZHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtuZXcgZmlybXdhcmUgZGlkIG5vdCBiZWNvbWUgcmVhZHkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOwomIzQzOwlwcml2LSZndDtza2lwX3RlYXJkb3duID0gdHJ1ZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwomIzQzOwkvKiBLaWNrIG9mZiB0aGUgcmVwcm9iZSBsYXN0OyB0aGUga2lja29mZiB3YXMgYWxsb2NhdGVkIHVwIGZyb250IGFuZAomIzQzOwkgKiBpdHMgbW9kdWxlIGFuZCBkZXZpY2UgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2tvLSZndDt3b3JrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oCkBAIC0wLDAgJiM0MzsxLDIwIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fTVhMODYyWFhfRldfSAomIzQzOyNkZWZpbmUgX19NWEw4NjJYWF9GV19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgbXhsODYyeHhfcHJpdjsKJiM0MztzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7CiYjNDM7dm9pZCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCSAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX01YTDg2MlhYX0ZXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jCmluZGV4IDRhY2QyMTZmN2NjMDA5Li4yZGJkMDc0YzBmZTI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jCkBAIC0xNSw2ICYjNDM7MTUsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1jbWQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1mdy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHgtaG9zdC5oJiMzNDsKIAogI2RlZmluZSBDVFJMX0JVU1lfTUFTSwkJCUJJVCgxNSkKQEAgLTM0MCw2ICYjNDM7MzQyLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsCiAKIAltdXRleF9sb2NrX25lc3RlZCgmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7CiAKJiM0MzsJaWYgKHByaXYtJmd0O3NraXBfdGVhcmRvd24pIHsKJiM0MzsJCXJldCA9IHJlYWQgPyAtRU5PREVWIDogMDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtibG9ja19ob3N0ICZhbXA7JmFtcDsgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkgewomIzQzOwkJcmV0ID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAltYXggPSAoc2l6ZSAmIzQzOyAxKSAvIDI7CiAKIAlyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7CkBAIC00OTUsMTIgJiM0Mzs1MTIsNDkgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHCQkweDFmCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TTURJT19QQUdFX01BU0sJMHhmZmYwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TTURJT19PRkZfTUFTSwkJMHgwMDBmCiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2J1czsKJiM0MzsJaW50IHBoeSA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsCiYjNDM7CQkJICAgICAgYWRkciAmYW1wOyBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlyZXQgPSBfX21kaW9idXNfcmVhZChidXMsIHBoeSwgYWRkciAmYW1wOyBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LSZndDttZGlvZGV2LSZndDtidXM7CiYjNDM7CWludCBwaHkgPSBwcml2LSZndDttZGlvZGV2LSZndDthZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLAomIzQzOwkJCSAgICAgIGFkZHIgJmFtcDsgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyICZhbXA7IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLLAomIzQzOwkJCQkgICAgICB2YWwpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogdm9pZCBteGw4NjJ4eF9ob3N0X2luaXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiB7CiAJSU5JVF9XT1JLKCZhbXA7cHJpdi0mZ3Q7Y3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pOwomIzQzOwlJTklUX1dPUksoJmFtcDtwcml2LSZndDtyZXNjdWVfaGVhbF93b3JrLCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKTsKIH0KIAogdm9pZCBteGw4NjJ4eF9ob3N0X3NodXRkb3duKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQogewogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtjcmNfZXJyX3dvcmspOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7cmVzY3VlX2hlYWxfd29yayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaAppbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaApAQCAtMTgsNSAmIzQzOzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSwKIAlteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgJmFtcDsoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKQogCiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpOwomIzQzO2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcik7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCk7CiAKICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAogCXN3aXRjaCAocG9ydCkgewogCWNhc2UgOSAuLi4gMTY6CiYjNDM7CQlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAJCWlmICghTVhMODYyWFhfRldfVkVSX01JTihwcml2LCAxLCAwLCA4NCkpIHsKIAkJCWRldl93YXJuX29uY2UoZHAtJmd0O2RzLSZndDtkZXYsCiAJCQkJICAgICAgJiMzNDtTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMKaW5kZXggNDVkMjM3YjNhNDBmMTAuLjhkMjE3NDdjZGYxNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICYjMzQ7bXhsODYyeHguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtZncuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWhvc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LXBoeWxpbmsuaCYjMzQ7CiAKQEAgLTcxLDYgJiM0Mzs3MiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIG14bDg2Mnh4X3Jtb25fcmFuZ2VzW10gPSB7CiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1RJTUVPVVRfTVMJMTAwMDAKICNkZWZpbmUgTVhMODYyWFhfUkVBRFlfUE9MTF9NUwkJMTAwCiAKJiM0MzsvKiBDaGlwIElEIHJlZ2lzdGVycywgcmVhZCB2aWEgU1lTX01JU0NfUkVHX1JEICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9DSElQSURfTAkJMHhjMGQyODg4NAomIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX00JCTB4YzBkMjg4ODgKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MCQlHRU5NQVNLKDE1LCAxMikKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NCQlHRU5NQVNLKDExLCAwKQomIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTglHRU5NQVNLKDE0LCAxMikKJiM0MzsKICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMCQkweGUwMAogI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTCQkweGUxMgogI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTCQkweGUxMwpAQCAtMjIyLDcgJiM0MzsyMzAsNDYgQEAgc3RhdGljIGludCBteGw4NjJ4eF9waHlfd3JpdGVfYzQ1X21paV9idXMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsCiAJcmV0dXJuIG14bDg2Mnh4X3BoeV93cml0ZV9tbWQoYnVzLSZndDtwcml2LCBhZGRyLCBkZXZhZGQsIHJlZ251bSwgdmFsKTsKIH0KIAotc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0MzsvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElECiYjNDM7ICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZQomIzQzOyAqIGNhY2hlZCBhdCBzZXR1cCBhbmQgbGVmdCB6ZXJvIHdoZW4gdGhlIHN3aXRjaCBpcyBpbiByZXNjdWUgbW9kZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHJlZyA9IHt9OwomIzQzOwl1MTYgY2hpcGlkX2wsIGNoaXBpZF9tOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9MKTsKJiM0MzsJcmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJY2hpcGlkX2wgPSBsZTMyX3RvX2NwdShyZWcudmFsKTsKJiM0MzsKJiM0MzsJcmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTSk7CiYjNDM7CXJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWNoaXBpZF9tID0gbGUzMl90b19jcHUocmVnLnZhbCk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2FzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8CiYjNDM7CQkJRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NLCBjaGlwaWRfbSkgJmx0OyZsdDsgNDsKJiM0MzsJcHJpdi0mZ3Q7YXNpY19yZXYgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTiwgY2hpcGlkX20pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbXhsODYyeHhfd2FpdF9yZWFkeSAtIHdhaXQgZm9yIHRoZSBzd2l0Y2ggZmlybXdhcmUgdG8gYmVjb21lIG9wZXJhdGlvbmFsCiYjNDM7ICogQGRzOiBEU0Egc3dpdGNoIGluc3RhbmNlCiYjNDM7ICoKJiM0MzsgKiBQb2xsIHRoZSBmaXJtd2FyZSB1bnRpbCBpdCByZXBvcnRzIGl0cyB2ZXJzaW9uIGFuZCBhY2NlcHRzCiYjNDM7ICogY29uZmlndXJhdGlvbiBjb21tYW5kcywgdGhlbiBjYWNoZSB0aGUgZmlybXdhcmUgdmVyc2lvbiBhbmQgY2hpcCBJRC4KJiM0MzsgKiBUYWtlcyBhdCBsZWFzdCB0d28gc2Vjb25kcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KJiM0MzsgKi8KJiM0MztpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9OwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzLCB0aW1lb3V0OwpAQCAtMjU0LDYgJiM0MzszMDEsMTEgQEAgc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciA9IHZlci5pdl9tYWpvcjsKIAkJcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciA9IHZlci5pdl9taW5vcjsKIAkJcHJpdi0mZ3Q7ZndfdmVyc2lvbi5yZXZpc2lvbiA9IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbik7CiYjNDM7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9yZWFkX2NoaXBfaWQocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWRldl93YXJuKGRzLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgY2hpcCBJRDogJXBlXG4mIzM0OywKJiM0MzsJCQkJIEVSUl9QVFIocmV0KSk7CiAJCXJldHVybiAwOwogCiBub3RfcmVhZHlfeWV0OgpAQCAtNjIyLDE1ICYjNDM7Njc0LDQ5IEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWludCBuX3VzZXJfcG9ydHMgPSAwLCBtYXhfdmxhbnM7CiAJaW50IGluZ3Jlc3NfZmluYWxzLCB2aWRfcnVsZXM7CiAJc3RydWN0IGRzYV9wb3J0ICpkcDsKLQlpbnQgcmV0LCBpOwomIzQzOwlpbnQgcmV0LCBpLCByZXNjdWU7CiAKLQlyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkvKiBEZXRlY3QgdGhlIGxvYWRlciBvdmVyIFNCIFBESSBmaXJzdDogaXQgbmVlZHMgbm8gZmlybXdhcmUsIHVubGlrZSB0aGUKJiM0MzsJICogQzQ1IEFQSSAobXhsODYyeHhfcmVzZXQvd2FpdF9yZWFkeSkgd2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vbmUKJiM0MzsJICogYW5zd2Vycy4gVG91Y2ggQzQ1IG9ubHkgb25jZSByZXNjdWUgaXMgcnVsZWQgb3V0LgomIzQzOwkgKi8KJiM0MzsJcmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpOwomIzQzOwlpZiAocmVzY3VlICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXNjdWU7CiAKLQlyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpIHsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqLwomIzQzOwkJCXJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTsKJiM0MzsJCQlpZiAocmVzY3VlICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJlc2N1ZTsKJiM0MzsJCQlpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cmVzY3VlX21vZGUgPSByZXNjdWU7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJaWYgKHByaXYtJmd0O3Jlc2N1ZV9yZWFkeSkgewomIzQzOwkJCWRldl93YXJuKGRzLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcbiYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogRHJhaW4gdGhlIHdlZGdlZCBkb3dubG9hZCBpbiB0aGUgYmFja2dyb3VuZCBzbyBpdAomIzQzOwkJCSAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZQomIzQzOwkJCSAqIGF2YWlsYWJsZSBvbmNlIHJlYWR5LgomIzQzOwkJCSAqLwomIzQzOwkJCWRldl93YXJuKGRzLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHdpdGggYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJlY292ZXJpbmcgaW4gYmFja2dyb3VuZFxuJiMzNDspOwomIzQzOwkJCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7cHJpdi0mZ3Q7cmVzY3VlX2hlYWxfd29yayk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3NlcmRlc19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDtzZXJkZXNfcG9ydHMpOyBpJiM0MzsmIzQzOykKQEAgLTcxNSwxMSAmIzQzOzgwMSwyMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc3RhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpCiBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIHsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmIChteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSkpCiAJCWRldl9lcnIoZHMtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb3J0ICVkXG4mIzM0OywgcG9ydCk7CiB9CkBAIC0xMzM3LDYgJiM0MzsxNDMzLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogCWJvb2wgaXNfY3B1X3BvcnQgPSBkc2FfcG9ydF9pc19jcHUoZHApOwogCWludCByZXQ7CiAKJiM0MzsJLyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdAomIzQzOwkgKiBzdWNjZWVkIGZvciB0aGUgdHJlZSB0byByZWdpc3Rlci4KJiM0MzsJICovCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybiBkc2FfcG9ydF9pc191c2VyKGRwKSA/IC1FTk9ERVYgOiAwOwomIzQzOwogCXJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTU3Miw2ICYjNDM7MTY3NCwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCWV0aGVyX2FkZHJfY29weShxcGFyYW0ubWFjLCBtZGItJmd0O2FkZHIpOwogCiAJcmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgTVhMODYyWFhfTUFDX1RBQkxFRU5UUllRVUVSWSwgcXBhcmFtKTsKJiM0MzsJLyogLUVOT0RFVjogdGhlIGZpcm13YXJlIGFuZCBpdHMgTUFDIHRhYmxlIGFyZSBnb25lLCBub3RoaW5nIGxlZnQKJiM0MzsJICogdG8gZGVsZXRlCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0ID09IC1FTk9ERVYpCiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjI4LDYgJiM0MzsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBCUl9TVEFURV9ESVNBQkxFRDoKIAkJcGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpOwpAQCAtMjAxNSw2ICYjNDM7MjEyNSwxMiBAQCBzdGF0aWMgdm9pZCBteGw4NjJ4eF9zdGF0c193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBwcml2LSZndDtkczsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwogCiYjNDM7CS8qIEEgZ2V0X3N0YXRzNjQoKSByZS1hcm0gY2FuIHJhY2UgdGhlIGZsYXNoIHRlYXJkb3duJiMzOTtzIFdPUktfU1RPUFBFRAomIzQzOwkgKiBzZXQgYW5kIGNhbmNlbDsgYmFpbCBoZXJlIHNvIGEgc3RyYXkgcG9sbCBuZXZlciBydW5zIGR1cmluZyBhIGZsYXNoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCAmYW1wO3ByaXYtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcykKIAkJbXhsODYyeHhfc3RhdHNfcG9sbChkcywgZHAtJmd0O2luZGV4KTsKIApAQCAtMjA4Niw2ICYjNDM7MjIwMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHsKIAkuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLAogCS5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLAogCS5nZXRfc3RhdHM2NCA9IG14bDg2Mnh4X2dldF9zdGF0czY0LAomIzQzOwkuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsCiYjNDM7CS5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLAogfTsKIAogc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCmluZGV4IDQzMmE1ZjNmMmUwOGU2Li4xMjk5ODVmMmJiZjNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmgKQEAgLTE0LDYgJiM0MzsxNCwxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdjsKICNkZWZpbmUgTVhMODYyWFhfRklSU1RfU0VSREVTX1BPUlQJOQogI2RlZmluZSBNWEw4NjJYWF9TRVJERVNfU0xPVFMJCTQKIAomIzQzOy8qIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpIHJldHVybiBjb2RlcyAobmVnYXRpdmUgdmFsdWVzIGFyZSBlcnJvcnMpICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFCQkwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9JTl9SRVNDVUUJCTEKJiM0MzsKICNkZWZpbmUgTVhMODYyWFhfREVGQVVMVF9CUklER0UJCTAKICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRVMJCTQ4CiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VfUE9SVFMJMTI4CkBAIC0zMDMsNiAmIzQzOzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7CiAgKiAgICAgICAgICAgICAgICAgICAgICBmbG9vZGluZykKICAqIEBmd192ZXJzaW9uOiAgICAgICAgIGNhY2hlZCBmaXJtd2FyZSB2ZXJzaW9uLCBwb3B1bGF0ZWQgYXQgcHJvYmUgYW5kCiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKQomIzQzOyAqIEBhc2ljX2lkOiAgICAgICAgICAgIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycywKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayAmIzM0O2FzaWMuaWQmIzM0OyBmaXhlZCB2ZXJzaW9uCiYjNDM7ICogQGFzaWNfcmV2OiAgICAgICAgICAgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgJiMzNDthc2ljLnJldiYjMzQ7IGZpeGVkIHZlcnNpb24KICAqIEBzZXJkZXNfcG9ydHM6ICAgICAgIFNlckRlcyBpbnRlcmZhY2VzIGluY2wuIHN1Yi1pbnRlcmZhY2VzIGluIGNhc2Ugb2YKICAqICAgICAgICAgICAgICAgICAgICAgIDEwR19RWEdNSUkgb3IgUVNHTUlJCiAgKiBAc2VyZGVzX3JlZmNvdW50OiAgICBwZXItWFBDUyBjb3VudCBvZiBzdWItcG9ydHMgZW5hYmxlZCBieSBwaHlsaW5rOwpAQCAtMzE5LDYgJiM0MzszMjcsMTUgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gewogICogQGV2bGFuX2luZ3Jlc3Nfc2l6ZTogcGVyLXBvcnQgaW5ncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemUKICAqIEBldmxhbl9lZ3Jlc3Nfc2l6ZTogIHBlci1wb3J0IGVncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemUKICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemUKJiM0MzsgKiBAYmxvY2tfaG9zdDogICAgICAgICByZWplY3QgZmlybXdhcmUgQVBJIGNvbW1hbmRzIChleGNlcHQgRldfVVBEQVRFKQomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoCiYjNDM7ICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93bgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZCBieSB0aGUgcG9zdC1mbGFzaCByZXByb2JlCiYjNDM7ICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kcyBmYWlsIGZhc3QsCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3MKJiM0MzsgKiBAcmVzY3VlX3JlYWR5OiAgICAgICAocmVzY3VlX21vZGUpIGxvYWRlciBpcyBhdCBhIGNsZWFuIFJFQURZIGFuZCB3aWxsIGFjY2VwdAomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGEgZmxhc2g7IGZhbHNlIHdoaWxlIHJlc2N1ZV9oZWFsX3dvcmsgaXMgZHJhaW5pbmcKJiM0MzsgKiBAcmVzY3VlX2hlYWxfd29yazogICBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBkcmFpbmluZyBhIHdlZGdlZCBkb3dubG9hZCB0byBSRUFEWQogICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVycwogICogICAgICAgICAgICAgICAgICAgICAgYW5kIGFjY3VtdWxhdGVzIHRoZW0gaW50byA2NC1iaXQgcGVyLXBvcnQgc3RhdHMKICAqLwpAQCAtMzI2LDkgJiM0MzszNDMsMTIgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXYgewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiAJc3RydWN0IHdvcmtfc3RydWN0IGNyY19lcnJfd29yazsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHJlc2N1ZV9oZWFsX3dvcms7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgZHJvcF9tZXRlcjsKIAlzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiBmd192ZXJzaW9uOwomIzQzOwl1MTYgYXNpY19pZDsKJiM0MzsJdTggYXNpY19yZXY7CiAJc3RydWN0IG14bDg2Mnh4X3BjcyBzZXJkZXNfcG9ydHNbOF07CiAJaW50IHNlcmRlc19yZWZjb3VudFsyXTsKIAlzdHJ1Y3QgbXV0ZXggc2VyZGVzX2xvY2s7CkBAIC0zMzcsNyAmIzQzOzM1NywxMyBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7CiAJdTE2IGV2bGFuX2luZ3Jlc3Nfc2l6ZTsKIAl1MTYgZXZsYW5fZWdyZXNzX3NpemU7CiAJdTE2IHZmX2Jsb2NrX3NpemU7CiYjNDM7CWJvb2wgYmxvY2tfaG9zdDsKJiM0MzsJYm9vbCBza2lwX3RlYXJkb3duOwomIzQzOwlib29sIHJlc2N1ZV9tb2RlOwomIzQzOwlib29sIHJlc2N1ZV9yZWFkeTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7CiB9OwogCiYjNDM7aW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKJiM0MzsKICNlbmRpZiAvKiBfX01YTDg2MlhYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtMTE3MCw2ICYjNDM7MTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7CiAJaW50CSgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogCQkJCSAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwlpbnQJKCpkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAlpbnQJKCpkZXZsaW5rX3NiX3Bvb2xfZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmMKaW5kZXggZWQzNDJmMzQ1NjkyYmIuLmQ2MDIyMjY3YTgzOWNkIDEwMDY0NAotLS0gYS9uZXQvZHNhL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL2RldmxpbmsuYwpAQCAtMjAsNiAmIzQzOzIwLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRzLSZndDtvcHMtJmd0O2RldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsCiAJCQkJICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCwKIAkJCQkgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbykKQEAgLTE2NywxOCAmIzQzOzE3NiwzMSBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsCiAJCQkJCQkJcF9tYXgpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHsKLQkuaW5mb19nZXQJCQk9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LAotCS5zYl9wb29sX2dldAkJCT0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsCi0JLnNiX3Bvb2xfc2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX3NldCwKLQkuc2JfcG9ydF9wb29sX2dldAkJPSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LAotCS5zYl9wb3J0X3Bvb2xfc2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsCi0JLnNiX3RjX3Bvb2xfYmluZF9nZXQJCT0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwKLQkuc2JfdGNfcG9vbF9iaW5kX3NldAkJPSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LAotCS5zYl9vY2Nfc25hcHNob3QJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LAotCS5zYl9vY2NfbWF4X2NsZWFyCQk9IGRzYV9kZXZsaW5rX3NiX29jY19tYXhfY2xlYXIsCi0JLnNiX29jY19wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LAomIzQzOy8qIFRoZSBkZXZsaW5rIGNvcmUgcmVqZWN0cyBmbGFzaCByZXF1ZXN0cyB1cCBmcm9udCB3aGVuIHRoZSBmbGFzaF91cGRhdGUKJiM0MzsgKiBvcCBpcyBhYnNlbnQsIGJlZm9yZSBmZXRjaGluZyB0aGUgZmlybXdhcmUgZmlsZSBmcm9tIHVzZXJzcGFjZS4gT25seQomIzQzOyAqIGluc3RhbGwgdGhlIG9wIGZvciBzd2l0Y2hlcyB3aG9zZSBkcml2ZXIgaW1wbGVtZW50cyBpdCwgc28gdGhhdAomIzQzOyAqIHVuc3VwcG9ydGVkIHJlcXVlc3RzIGtlZXAgZmFpbGluZyBlYXJseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIERTQV9ERVZMSU5LX09QUwkJCQkJCQlcCiYjNDM7CS5pbmZvX2dldAkJCT0gZHNhX2RldmxpbmtfaW5mb19nZXQsCQlcCiYjNDM7CS5zYl9wb29sX2dldAkJCT0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsCVwKJiM0MzsJLnNiX3Bvb2xfc2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX3NldCwJXAomIzQzOwkuc2JfcG9ydF9wb29sX2dldAkJPSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LAlcCiYjNDM7CS5zYl9wb3J0X3Bvb2xfc2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsCVwKJiM0MzsJLnNiX3RjX3Bvb2xfYmluZF9nZXQJCT0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXAomIzQzOwkuc2JfdGNfcG9vbF9iaW5kX3NldAkJPSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LCBcCiYjNDM7CS5zYl9vY2Nfc25hcHNob3QJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LAlcCiYjNDM7CS5zYl9vY2NfbWF4X2NsZWFyCQk9IGRzYV9kZXZsaW5rX3NiX29jY19tYXhfY2xlYXIsCVwKJiM0MzsJLnNiX29jY19wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LCBcCiAJLnNiX29jY190Y19wb3J0X2JpbmRfZ2V0CT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQsCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7CiYjNDM7CURTQV9ERVZMSU5LX09QUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7CiYjNDM7CURTQV9ERVZMSU5LX09QUwomIzQzOwkuZmxhc2hfdXBkYXRlCQkJPSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsCiB9OwogCiBpbnQgZHNhX2RldmxpbmtfcGFyYW1fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLApAQCAtMzc4LDEyICYjNDM7NDAwLDE2IEBAIHZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogaW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzOwogCXN0cnVjdCBkZXZsaW5rICpkbDsKIAomIzQzOwlvcHMgPSBkcy0mZ3Q7b3BzLSZndDtkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/ICZhbXA7ZHNhX2RldmxpbmtfZmxhc2hfb3BzCiYjNDM7CQkJCQkgICAgOiAmYW1wO2RzYV9kZXZsaW5rX29wczsKJiM0MzsKIAkvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhbgogCSAqIGFkZCBkcGlwZSB0YWJsZXMKIAkgKi8KLQlkbCA9IGRldmxpbmtfYWxsb2MoJmFtcDtkc2FfZGV2bGlua19vcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLSZndDtkZXYpOwomIzQzOwlkbCA9IGRldmxpbmtfYWxsb2Mob3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy0mZ3Q7ZGV2KTsKIAlpZiAoIWRsKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI0NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaCBkcml2ZXIsIGFkZGluZyBmaXJtd2FyZSBmbGFzaGluZyBhbmQgZGV2bGluayBzdXBwb3J0LiBJdCB0b3VjaGVzIGEgZmV3IGZpbGVzOiBgbXhsODYyeHgtZncuY2AsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBteGw4NjJ4eC5jYCwgYG14bDg2Mnh4LWhvc3QuY2AsIGBteGw4NjJ4eC1waHlsaW5rLmNgLCBhbmQgYG5ldC9kc2EvZGV2bGluay5jYC4gQmVmb3JlIEkgZGl2ZSBpbnRvIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBldmVuICpwb3NzaWJsZSogaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHNraXBwaW5nIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpGaXJzdCB0aG91Z2h0OiBpcyB0aGUgYG14bDg2Mnh4YCBhIFBDSWUgc3dpdGNoPyBOb3BlLCBpdCYjMzk7cyBhIERTQSBzd2l0Y2gsIHdoaWNoIGlzIGltcG9ydGFudC4gRFNBIHN3aXRjaGVzIGFyZSBjb25uZWN0ZWQgdmlhIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSBmcm9tIHRoZSBQQ0llIHN3aXRjaGVzIG1lbnRpb25lZCBpbiB0aGUgcHJvbXB0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBEU0Egc3dpdGNoIGlzIGNvbm5lY3RlZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdXNlcyBNRElPIChgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2YCkuIE1ESU8gaXMgYSBzZXJpYWwgYnVzLCB1bmxpa2UgUENJZS4KCk5vdywgdGhlIE1ESU8gZGV2aWNlcy4uLiBhcmUgdGhleSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZW11bGF0ZWQgb3IgZnV6emVkIHZpYSBzb21lIHZpcnR1YWwgTURJTyBidXM/IFN5emthbGxlciBkb2VzbiYjMzk7dCB1c3VhbGx5IGVtdWxhdGUgc3BlY2lmaWMgTURJTyBEU0Egc3dpdGNoZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZHJpdmVyIG9yIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc29tZSBnZW5lcmljIGludGVyZmFjZS4gVGhlIHByb21wdCBjb250aW51ZXMgdG8gY2F1dGlvbiBhYm91dCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoKU28sIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBgbXhsODYyeHhgIHJlYWNoYWJsZSBpbiBRRU1VPyBDYW4gSSBpbnN0YW50aWF0ZSBpdCBpbiBhIHdheSB0aGF0IHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aD8gSG93IHdvdWxkIEkgZ2V0IHRoaXMgdG8gd29yaz8gSSBrbm93IEkyQy9NRElPL1NQSSBkZXZpY2VzIGNhbiBzb21ldGltZXMgYmUgaW5zdGFudGlhdGVkIHZpYSBzeXNmcyBvciBuZXRsaW5rIGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBidXMsIG9yIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cy4gU3l6a2FsbGVyIGhhcyBzb21lIHN1cHBvcnQgZm9yIGluamVjdGluZyBJMkMvU1BJIGRldmljZXMsIGJ1dCBNRElPPyBOb3Qgc3VyZSBhYm91dCB0aGF0LgoKVGhlbiwgdGhlcmUmIzM5O3MgZGV2bGluay4gRGV2bGluayBjb21tYW5kcyBjYW4gYmUgc2VudCB0byAqYW55KiByZWdpc3RlcmVkIGRldmxpbmsgZGV2aWNlLiBIb3dldmVyLCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgaGFzIHRvICpwcm9iZSogYmVmb3JlIHRoZSBkZXZsaW5rIGRldmljZSBjYW4gYmUgcmVnaXN0ZXJlZCwgcmlnaHQ/IEFuZCB0aGUgZHJpdmVyIHByb2JlcyBvbiBhbiBNRElPIGJ1cy4gT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNgIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJvYmluZyBzZXF1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtteGw4NjJ4eF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjE3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjIwOC1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIyMDk6c3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMjEwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMzE4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXhsODYyeHhfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjMxOTpcdC5wcm9iZSAgPSBteGw4NjJ4eF9wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIzMjAtXHQucmVtb3ZlID0gbXhsODYyeHhfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIGBteGw4NjJ4eGAgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtZGlvX2RyaXZlcmAsIHNwZWNpZmljYWxseSB0aGUgYG14bDg2Mnh4YCBvbmUuIFRoZSBxdWVzdGlvbiBpcywgY2FuIFN5emthbGxlciBlZmZlY3RpdmVseSBwcm9iZSBhbmQgZnV6eiB0aGlzIHRoaW5nPyBJIGtub3cgU3l6a2FsbGVyIGNhbiBoYW5kbGUgY2VydGFpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBgdmhjaWAgZm9yIFVTQiBvciBgbmV0ZGV2c2ltYCBmb3IgbmV0d29yayBkZXZpY2VzLCBhbmQgZXZlbiBgbWFjODAyMTFfaHdzaW1gLiBCdXQgTURJTyBpcyB0cmlja3kuIEl0IGxvb2tzIGxpa2Ugc29tZSBkcml2ZXJzLCBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBtaWdodCBiZSBwcm9iZWFibGUgd2l0aCBzb21lIGVmZm9ydCwgYW5kIGhhcmR3YXJlIERTQSBzd2l0Y2hlcyB0eXBpY2FsbHkgcmVxdWlyZSBhIGRldmljZSB0cmVlLCB3aGljaCBTeXprYWxsZXIgZG9lc24mIzM5O3QgZHluYW1pY2FsbHkgaGFuZGxlIGZvciBNRElPIGRldmljZXMgdW5sZXNzIGEgdmVyeSBzcGVjaWZpYyAmIzM0O3BzZXVkby1kZXZpY2UmIzM0OyBleGlzdHMuCgpOb3csIEkgKmRvKiBzZWUgdGhhdCBTeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rXy4uLmAgd2hpY2ggY291bGQgYmUgdXNlZnVsLCBidXQgdGhhdCByZWxpZXMgb24gdGhlIGRldmljZSBiZWluZyAqcHJlc2VudCogaW4gdGhlIGZpcnN0IHBsYWNlLiBJZiB0aGUgYG14bDg2Mnh4YCBkZXZpY2UgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgbXhsODYyeHhfcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLCB3aGljaCBtZWFucyB0aGUgZGV2bGluayBmbGFzaCB1cGRhdGUgY29kZSB3aWxsIGFsc28gYmUgdW5yZWFjaGFibGUuIFRoYXQmIzM5O3MgYSBwcm9ibGVtLgoKSG1tLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhhdCBjb2RlIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmU/IEkgc2F3IHRoYXQgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgdXNlcyBNRElPIHJlYWRzIGFuZCB3cml0ZXMuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgdGhlcmUsIGl0IHNob3VsZCBmYWlsIHdpdGggYC1FTk9ERVZgLiBUaGF0IGNvdWxkIGJlIGEgcG9zc2libGUgZW50cnkgcG9pbnQsIGJ1dCBpdCBzdGlsbCBtZWFucyB0aGVyZSBhcmUgZGV2aWNlIGRlcGVuZGVuY2llcy4gRXZlbiBpZiBJIGNvdWxkIHNvbWVob3cgaW5zdGFudGlhdGUgdGhlIGRldmljZSwgaXQgc3RpbGwgY29tbXVuaWNhdGVzIHdpdGggdGhlIGhhcmR3YXJlIHZpYSBNRElPLgoKVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHgsIGEgKnNwZWNpZmljKiBoYXJkd2FyZSBzd2l0Y2guIERvZXMgUUVNVSBldmVuIGVtdWxhdGUgdGhpcz8gTm8sIGl0IGRvZXNuJiMzOTt0LiBBbmQgdGhhdCYjMzk7cyB0aGUga2lja2VyLiBTaW5jZSBJIGNhbiYjMzk7dCBlbXVsYXRlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB0aGUgY29yZSBjb2RlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGJ5IFN5emthbGxlci4KClRoZXJlZm9yZSwgZm9yIG15IHB1cnBvc2VzLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJiMzOTt0IHRoZXJlLgoKSG93ZXZlciwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjazsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHNlZSBjaGFuZ2VzIGluIGBuZXQvZHNhL2RldmxpbmsuY2AgdGhhdCByZWxhdGUgdG8gYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgYW5kIHRoYXQmIzM5O3MgZ2VuZXJpYyBEU0EgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIHRoZXJlLiBMZXQgbWUgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhL2RldmxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RldmxpbmsuYz0xMT1zdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbi0tXG5uZXQvZHNhL2RldmxpbmsuYy0yMi1cbm5ldC9kc2EvZGV2bGluay5jOjIzOnN0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcbm5ldC9kc2EvZGV2bGluay5jLTI0LVx0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvZHNhL2RldmxpbmsuYz0yMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7XG5uZXQvZHNhL2RldmxpbmsuYy0yMDItXHREU0FfREVWTElOS19PUFNcbm5ldC9kc2EvZGV2bGluay5jOjIwMzpcdC5mbGFzaF91cGRhdGVcdFx0XHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbm5ldC9kc2EvZGV2bGluay5jLTIwNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgUGF0Y2ggZm9yIERTQSBEZXZsaW5rIEZsYXNoIFVwZGF0ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHMgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgdG8gYG5ldC9kc2EvZGV2bGluay5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElzIHRoaXMgYSBjb21tb24gb3BlcmF0aW9uIHdpdGhpbiB0aGUgRFNBIHdvcmxkLCBvciBpcyB0aGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBzd2l0Y2ggb3IgZmFtaWx5IG9mIHN3aXRjaGVzPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBhbnkgb3RoZXIgRFNBIHN3aXRjaGVzIGN1cnJlbnRseSB1dGlsaXplIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBuZXcgYWRkaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCB3aXRoaW4gYHN0cnVjdCBkc2Ffc3dpdGNoX29wc2AgYWNyb3NzIG90aGVyIGRyaXZlcnMuIFRoYXQmIzM5O2xsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBmb2xsb3dzIGFuIGVzdGFibGlzaGVkIHBhdHRlcm4gb3IgaW50cm9kdWNlcyBhIG5vdmVsIGFwcHJvYWNoLiBUaGlzIGluaXRpYWwgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UmIzM5O3MgaW1wbGljYXRpb25zIGZvciB0aGUgYnJvYWRlciBEU0EgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYz0yMDU9c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTIwNy17XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzoyMDg6XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTIwOS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM9NzczPWludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYy04MzAtXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzo4MzE6aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jOjgzMjpcdFx0XHRcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtODMzLVx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3Lmg9MTM9aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oLTE1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaDoxNjppbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3Lmg6MTc6XHRcdFx0XHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oLTE4LVx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTIxNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIyMDUtXHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyMjA2Olx0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMjA3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMDkKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIFBsdW1iaW5nOiBObyBGdXp6aW5nIE5lZWRlZCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGVyZSB3ZSYjMzk7cmUgYXQuIFRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpbiBgbmV0L2RzYS9kZXZsaW5rLmNgIGlzIG1pbm9yLCBqdXN0IGEgc2luZ2xlIGZ1bmN0aW9uIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLiBJdCBlc3NlbnRpYWxseSBzZXJ2ZXMgYXMgYSBicmlkZ2UsIGNhbGxpbmcgYSBkcml2ZXItc3BlY2lmaWMgZnVuY3Rpb24gYGRzLSZndDtvcHMtJmd0O2RldmxpbmtfZmxhc2hfdXBkYXRlYC4gVGhlIHByb2JsZW0/IE9ubHkgdGhlIGBteGw4NjJ4eGAgZHJpdmVyIGFjdHVhbGx5ICppbXBsZW1lbnRzKiB0aGF0IGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2suCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0NvdWxkIGEgbW9yZSBhY2Nlc3NpYmxlIGRyaXZlciwgbGlrZSBgZHNhX2xvb3BgLCBgZHNhX21vY2tgLCBvciBldmVuIGBtdjg4ZTZ4eHhgLCBzb21laG93IGxldmVyYWdlIHRoaXM/JiMzNDsgQnV0IGEgcXVpY2sgY2hlY2sgY29uZmlybXM6IE5vLCBvbmx5IGBteGw4NjJ4eGAgaXMgdXNpbmcgaXQuIEFuZCBgbXhsODYyeHhgIGlzIGEgKmhhcmR3YXJlKiBzd2l0Y2gsIHdoaWNoIG1lYW5zIGl0IGNhbiYjMzk7dCBiZSBwcm9iZWQgb3IgdXNlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBRRU1VIHNldHVwLgoKU28sIHRoaXMgcGF0Y2ggaXMgYmFzaWNhbGx5IGEgbmljaGUgZmVhdHVyZSBhZGRpdGlvbiBmb3Igb25lIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gVGhlIGNvcmUgRFNBIHBsdW1iaW5nIGl0IHRvdWNoZXMgaXMgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIGluIGFueSBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhlcmUmIzM5O3Mgbm8gcG9zc2libGUgd2F5IHRvIHRyaWdnZXIgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgaW4gYSBmdXp6YWJsZSBlbnZpcm9ubWVudC4gSSBkb3VibGUtY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIGEgZHJpdmVyICpkaWRuJiMzOTt0KiBwcm92aWRlIHRoYXQgY2FsbGJhY2ssIHRoZSBkZWZhdWx0IHBhdGggd291bGRuJiMzOTt0IHNvbWVob3cgbGVhZCB1cyB0aGVyZS4gSXQmIzM5O3MgYWxsIGxvY2tlZCBiZWhpbmQgdGhhdCBgZGV2bGlua19mbGFzaF91cGRhdGVgIHBvaW50ZXIsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXIuCgpUaGVyZWZvcmUsIG5vLCB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIGFueXRoaW5nIGludGVyZXN0aW5nIHdpdGggdGhlIGdpdmVuIHNldHVwIGlzIGVmZmVjdGl2ZWx5IHplcm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIG1pbm9yIHBsdW1iaW5nIGFkZGVkIHRvIHRoZSBnZW5lcmljIERTQSBkZXZsaW5rIGNvcmUgaXMgb25seSByZWFjaGFibGUgaWYgYSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBjYWxsYmFjaywgd2hpY2ggY3VycmVudGx5IG9ubHkgdGhlIHVucmVhY2hhYmxlIGBteGw4NjJ4eGAgZHJpdmVyIGRvZXMuIFRodXMsIHRoZSBuZXcgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmltYXJpbHkgYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgbWlub3IgcGx1bWJpbmcgYWRkZWQgdG8gdGhlIGdlbmVyaWMgRFNBIGRldmxpbmsgY29yZSBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBgZGV2bGlua19mbGFzaF91cGRhdGVgIGNhbGxiYWNrLCB3aGljaCBjdXJyZW50bHkgb25seSB0aGUgdW5yZWFjaGFibGUgYG14bDg2Mnh4YCBkcml2ZXIgZG9lcy4gVGh1cywgdGhlIG5ldyBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NToxMi45NzE5NDM5NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIwNDQxNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIG1pbm9yIHBsdW1iaW5nIGFkZGVkIHRvIHRoZSBnZW5lcmljIERTQSBkZXZsaW5rIGNvcmUgaXMgb25seSByZWFjaGFibGUgaWYgYSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBjYWxsYmFjaywgd2hpY2ggY3VycmVudGx5IG9ubHkgdGhlIHVucmVhY2hhYmxlIGBteGw4NjJ4eGAgZHJpdmVyIGRvZXMuIFRodXMsIHRoZSBuZXcgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NToxMi45NzE5NDk0NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODY1MTczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkOTBlMGRmNDcyZWQ1ZWU4YjYzYTBjYjNjYThmM2YxYTQ4NWM1NjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6NDU6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuaW5kZXggNDc0NTE0OGZlY2Y0ZmUuLjA1ODk5OWQwZGM1NmYyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbkBAIC05NCw2ICs5NCw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy5cXG4gICAgbWx4NVxcbiAgICBtbHhzd1xcbiAgICBtdjg4ZTZ4eHhcXG4rICAgbXhsODYyeHhcXG4gICAgbmV0ZGV2c2ltXFxuICAgIG5mcFxcbiAgICBvY3Rlb250eDJcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjNlOWY3ZDRkNDk2OWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XFxuQEAgLTAsMCArMSw2MyBAQFxcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rPT09PT09PT09PT09PT09PT09PT09PT09XFxuK214bDg2Mnh4IGRldmxpbmsgc3VwcG9ydFxcbis9PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZVxcbitgYG14bDg2Mnh4YGAgZGV2aWNlIGRyaXZlci5cXG4rXFxuK0luZm8gdmVyc2lvbnNcXG4rPT09PT09PT09PT09PVxcbitcXG4rVGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXFxuK1xcbisuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkXFxuKyAgIDp3aWR0aHM6IDUgNSA1IDg1XFxuK1xcbisgICAqIC0gTmFtZVxcbisgICAgIC0gVHlwZVxcbisgICAgIC0gRXhhbXBsZVxcbisgICAgIC0gRGVzY3JpcHRpb25cXG4rICAgKiAtIGBgYXNpYy5pZGBgXFxuKyAgICAgLSBmaXhlZFxcbisgICAgIC0gODYyOFxcbisgICAgIC0gVGhlIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90XFxuKyAgICAgICByZXBvcnRlZCBmb3IgYSBzd2l0Y2ggc2l0dGluZyBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGFzIHRoZVxcbisgICAgICAgcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2l0aCBhIHJ1bm5pbmcgZmlybXdhcmUuXFxuKyAgICogLSBgYGFzaWMucmV2YGBcXG4rICAgICAtIGZpeGVkXFxuKyAgICAgLSAwXFxuKyAgICAgLSBUaGUgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdCByZXBvcnRlZFxcbisgICAgICAgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBlaXRoZXIuXFxuKyAgICogLSBgYGZ3YGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gMS4wLjcwXFxuKyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBzd2l0Y2gsIHJlcG9ydGVkIGFzIGJvdGhcXG4rICAgICAgIHJ1bm5pbmcgYW5kIHN0b3JlZCBzaW5jZSB0aGUgc3dpdGNoIGJvb3RzIGl0IGZyb20gaXRzIG93biBmbGFzaC5cXG4rICAgICAgIEluIE1DVWJvb3QgcmVzY3VlIG1vZGUgbm90aGluZyBpcyByZXBvcnRlZCB3aGlsZSBhbiBpbnRlcnJ1cHRlZFxcbisgICAgICAgZG93bmxvYWQgaXMgc3RpbGwgYmVpbmcgcmVjb3ZlcmVkIGluIHRoZSBiYWNrZ3JvdW5kOyBvbmNlIHRoZVxcbisgICAgICAgbG9hZGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBpbWFnZSB0aGUgdmVyc2lvbiBpcyByZXBvcnRlZCAoYXNcXG4rICAgICAgIGJvdGggcnVubmluZyBhbmQgc3RvcmVkKSwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IGEgZmxhc2ggd2lsbCBiZVxcbisgICAgICAgYWNjZXB0ZWQuIEl0IHJlYWRzIFxcXCIwLjAuMFxcXCIgd2hlbiB0aGUgc3dpdGNoIGNhbWUgdXAgc3RyYWlnaHQgaW50b1xcbisgICAgICAgTUNVYm9vdCB3aXRob3V0IGV2ZXIgcnVubmluZyBmaXJtd2FyZS5cXG4rXFxuK0ZsYXNoIHVwZGF0ZVxcbis9PT09PT09PT09PT1cXG4rXFxuK1RoZSBgYG14bDg2Mnh4YGAgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgYGBkZXZsaW5rIGRldiBmbGFzaGBgLlxcbitUaGUgc2lnbmVkIGZpcm13YXJlIGltYWdlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBzd2l0Y2ggb3ZlciB0aGUgc2FtZVxcbitNRElPIGJ1cyB3aGljaCBpcyBhbHNvIHVzZWQgdG8gbWFuYWdlIHRoZSBzd2l0Y2gsIHRoZW4gdmVyaWZpZWQgYW5kXFxuK2luc3RhbGxlZCBieSB0aGUgTUNVYm9vdCBib290bG9hZGVyIHJ1bm5pbmcgb24gdGhlIHN3aXRjaC4gQWxsIHBvcnRzXFxuK29mIHRoZSBzd2l0Y2ggYXJlIGNsb3NlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1cGRhdGUgYW5kIHRoZSBkcml2ZXJcXG4rcmVwcm9iZXMgdGhlIHN3aXRjaCBhZnRlciBpdCBoYXMgcmVib290ZWQgaW50byB0aGUgbmV3IGZpcm13YXJlLiBBXFxuK2NvbXBsZXRlIGZsYXNoIGFuZCByZXByb2JlIGN5Y2xlIHRha2VzIGFib3V0IG9uZSBtaW51dGUuXFxuK1xcbitBIHN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCBlLmcuIGFmdGVyIGFuIGludGVycnVwdGVkXFxuK3VwZGF0ZSwgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IHVzZXIgcG9ydHMuIElmIHRoZSBwcmV2aW91cyBkb3dubG9hZCB3YXNcXG4raW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIHRoZSBsb2FkZXIgaXMgd2VkZ2VkOyB0aGUgZHJpdmVyIGRyYWlucyBpdFxcbitiYWNrIHRvIGEgY2xlYW4gcmVhZHkgc3RhdGUgaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGNhbiBlYXNpbHkgdGFrZVxcbittb3JlIHRoYW4gMTAgbWludXRlcy4gRHVyaW5nIHRoYXQgcmVjb3ZlcnkgYGBkZXZsaW5rIGRldiBpbmZvYGAgcmVwb3J0c1xcbitubyBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBgYGRldmxpbmsgZGV2IGZsYXNoYGAgcmV0dXJucyBgYC1FQlVTWWBgLlxcbitPbmNlIHRoZSBsb2FkZXIgaXMgcmVhZHkgdGhlIGZpcm13YXJlIHZlcnNpb24gYXBwZWFycyBhbmQgZmxhc2hpbmcgYVxcbitmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIHRoZSByZWd1bGFyIHVwZGF0ZSBmbG93IHJlY292ZXJzIHRoZSBzd2l0Y2guXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA2MGNmZjAwOTUzZGNiZS4uM2E1NWVkMmJhZDljYmEgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNjEwNyw2ICsxNjEwNyw3IEBAIE06XFx0RGFuaWVsIEdvbGxlIFxcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tYXhsaW5lYXIsbXhsODYyeHgueWFtbFxcbitGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdFxcbiBGOlxcdGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cXG4gRjpcXHRuZXQvZHNhL3RhZ19teGw4NjJ4eC5jXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcXG5pbmRleCBhN2JlMGU2NjY5ZGZhNS4uYmNjYWMwZDBmNzAzZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuQEAgLTEsMyArMSwzIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSArPSBteGw4NjJ4eF9kc2Eub1xcbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cXG4rbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXFxuaW5kZXggYTE4MGE1ZGVjZmZjMDEuLjZmNzcxODk1OTg0Y2IzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxcbkBAIC0xMjI0LDYgKzEyMjQsMTYgQEAgc3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHtcXG4gXFx0X19sZTMyIGl2X2J1aWxkX251bTtcXG4gfSBfX3BhY2tlZDtcXG4gXFxuKy8qKlxcbisgKiBzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyAtIFN5c3RlbSByZWdpc3RlciByZWFkL3dyaXRlXFxuKyAqIEBhZGRyOiAzMi1iaXQgcmVnaXN0ZXIgYWRkcmVzc1xcbisgKiBAdmFsOiByZWdpc3RlciB2YWx1ZVxcbisgKi9cXG4rc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncge1xcbitcXHRfX2xlMzIgYWRkcjtcXG4rXFx0X19sZTMyIHZhbDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuIC8qKlxcbiAgKiBlbnVtIG14bDg2Mnh4X3BvcnRfdHlwZSAtIFBvcnQgVHlwZVxcbiAgKiBATVhMODYyWFhfTE9HSUNBTF9QT1JUOiBMb2dpY2FsIFBvcnRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmE4NjU0MjVhYTYxZTFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbkBAIC03MCw3ICs3MCw5IEBAXFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFxcdFxcdFxcdChHUFlfR1BZMlhYX01BR0lDICsgMHgxKVxcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXFx0XFx0XFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDIpXFxuIFxcbisjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVxcdFxcdChTWVNfTUlTQ19NQUdJQyArIDB4MSlcXG4gI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OXFx0XFx0KFNZU19NSVNDX01BR0lDICsgMHgyKVxcbisjZGVmaW5lIFNZU19NSVNDX1JFR19SRFxcdFxcdFxcdChTWVNfTUlTQ19NQUdJQyArIDB4OClcXG4gXFxuICNkZWZpbmUgTVhMODYyWFhfWFBDU19QQ1NfQ09ORklHXFx0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgKyAweDEpXFxuICNkZWZpbmUgTVhMODYyWFhfWFBDU19QQ1NfR0VUX1NUQVRFXFx0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgKyAweDIpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NGIzNTU0NTM0YzJhZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xcbkBAIC0wLDAgKzEsOTQ5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIEZpcm13YXJlIGZsYXNoIGFuZCBkZXZsaW5rIHN1cHBvcnQgZm9yIE1heExpbmVhciBNeEw4NjJ4eFxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlIFxcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcXHUwMDNlXFxuKyAqXFxuKyAqIFNCIFBESSAtIGZpcm13YXJlIGRvd25sb2FkIGludGVyZmFjZSBvdmVyIGNsYXVzZS0yMiBTTURJT1xcbisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rICpcXG4rICogVGhlIE14TDg2Mnh4IE1DVWJvb3QgbG9hZGVyIGFjY2VwdHMgYSBmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIGZvdXIgXFxcIlNCIFBESVxcXCJcXG4rICogcmVnaXN0ZXJzIGluIHRoZSBzd2l0Y2ggU01ESU8gcmVnaXN0ZXIgc3BhY2UuIEl0IHJ1bnMgd2hlbmV2ZXIgbm8gV1NQXFxuKyAqIGZpcm13YXJlIGlzIGFjdGl2ZTogdGhlIG5vcm1hbCBmaXJtd2FyZSB1cGRhdGUgZW50ZXJzIGl0IGRlbGliZXJhdGVseSAtIHRoZVxcbisgKiBTWVNfTUlTQ19GV19VUERBVEUgQVBJIGNvbW1hbmQgc2V0cyBhIHN0aWNreSByZXNjdWUgYml0IGFuZCByZWJvb3RzIGludG9cXG4rICogTUNVYm9vdCAtIGFuZCB0aGUgbG9hZGVyIGFsc28gc3RheXMgaGVyZSB3aGVuIHRoZSBzdG9yZWQgV1NQIGZpcm13YXJlIGZhaWxzXFxuKyAqIGl0cyBib290LXRpbWUgaW50ZWdyaXR5IGNoZWNrLiBUaGlzIGRyaXZlciBkcml2ZXMgdGhlIGxvYWRlcidzIDB4YzU1Y1xcbisgKiBcXFwiY29uc29sZVxcXCIgZG93bmxvYWQgcGF0aC5cXG4rICpcXG4rICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKTpcXG4rICogICBNSUkgcmVnIDB4MWYgOj0gXFx1MDAzY3NiX3BkaV9yZWdcXHUwMDNlICAgICAgOyBhZGRyZXNzL3BhZ2UgbGF0Y2hcXG4rICogICBNSUkgcmVnIDB4MDAgOj0gLyA9XFx1MDAzZSBcXHUwMDNjdTE2IGRhdGFcXHUwMDNlICAgOyBkYXRhIHdpbmRvd1xcbisgKlxcbisgKiBTQiBQREkgcmVnaXN0ZXJzIChob3N0IG5hbWUvYWRkciAgLVxcdTAwM2UgIE1DVSBtYWlsYm94KTpcXG4rICogICBDVFJMIDB4ZTEwMCAtXFx1MDAzZSAweGMwOTM4NDAwICAgbW9kZTogUlNUPTB4MDAgIFJEPTB4MDEgIFdSPTB4MDJcXG4rICogICBBRERSIDB4ZTEwMSAtXFx1MDAzZSAweGMwOTM4NDA0ICAgU0IgdGFyZ2V0IHdvcmQgYWRkcmVzcyAoU0IxIGJhbmsgPSAweDc4MDApXFxuKyAqICAgREFUQSAweGUxMDIgLVxcdTAwM2UgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZFxcbisgKiAgIFNUQVQgMHhlMTAzIC1cXHUwMDNlIDB4YzA5Mzg0MGMgICBoYW5kc2hha2U6IGEgbWFnaWMgKGJlbG93KSBvciBhIGJ5dGUgY291bnRcXG4rICpcXG4rICogU1RBVCBtYWdpY3M6XFxuKyAqICAgUkVBRFkgIDB4YzU1YyAgIGxvYWRlciBpZGxlIGluIHRoZSBjb25zb2xlIGxvb3AgICAgICAgICh0aGlzIGRyaXZlcilcXG4rICogICBETF9SRFkgMHhjMzNjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGZsYXNobGVzcyBsb29wXFxuKyAqICAgU1RBUlQgIDB4ZjQ4ZiAgIGhvc3QgICAtXFx1MDAzZSBiZWdpbiBkb3dubG9hZCBzZXNzaW9uXFxuKyAqICAgQUNLICAgIDB4ZjQ5MCAgIGxvYWRlciAtXFx1MDAzZSBTVEFSVCBhY2tub3dsZWRnZWQgKFNUQVJUICsgMSlcXG4rICogICBFTkQgICAgMHgzY2MzICAgaG9zdCAgIC1cXHUwMDNlIGVuZCBvZiB0cmFuc2ZlciAvIGZpbmFsaXNlXFxuKyAqICAgUkRSRUcgIDB4ZTJjMCAgIGhvc3QgICAtXFx1MDAzZSByZWdpc3Rlci1yZWFkIGNvbW1hbmQgKHwgaW5kZXgpLCBzZWUgYmVsb3dcXG4rICpcXG4rICogQ29uc29sZSBmbGFzaCBwYXRoIChTVEFUPTB4YzU1YykgLSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZSgpOlxcbisgKlxcbisgKiAgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlclxcbisgKiAgIC0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLVxcbisgKiAgIHJlc2V0IChDVFJMPUFERFI9REFUQT0wKVxcbisgKiAgIHJlYWQgU1RBVCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDB4YzU1YyAgIChSRUFEWSwgaWRsZSlcXG4rICogICBTVEFUIDo9IFNUQVJUKDB4ZjQ4ZikgIC0tLS0tLS0tLS0tLS0tXFx1MDAzZVxcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzYy0tLS0tLS0tLS0tLS0tIFNUQVQgPSAweGY0OTAgKEFDSylcXG4rICogICBDVFJMIDo9IFdSXFxuKyAqICAgREFUQSA6PSBoZHJbMC4uOV0gICgyMC1ieXRlIGhlYWRlcjogdHlwZSxzaXplMSxjcmMxLHNpemUyLGNyYzIpXFxuKyAqICAgcmVzZXQ7IFNUQVQgOj0gMjAgKGhlYWRlciBsZW4pICAtLS0tLVxcdTAwM2UgcGFyc2UgaGRyOyByX3JlbWFpbj1zaXplMStzaXplMjtcXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkFTRSB0YXJnZXQgcmVnaW9uKHMpXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcXHUwMDNjLS0tLS0tLS0tLS0tLS0gU1RBVD0yMSAobGVuKzEpLCB0aGVuIFNUQVQ9MFxcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpXFxuKyAqICAgLS0gcGF5bG9hZCwgc3RyZWFtZWQgaW4gc2xpY2VzOiAtLVxcbisgKiAgIENUUkwgOj0gV1JcXG4rICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLlxcbisgKiAgICAgYXQgd29yZCAxNjM4NDogcmVzZXQ7IEFERFI6PTB4NzgwMDsgQ1RSTDo9V1IgICAoaGFsZi1iYW5rIC1cXHUwMDNlIFNCMSlcXG4rICogICAgIGF0IHdvcmQgMzI3NjA6IGZsdXNoIHNsaWNlOlxcbisgKiAgICAgICAgcmVzZXQ7IFNUQVQgOj0gXFx1MDAzY2J5dGVzX3RoaXNfc2xpY2VcXHUwMDNlIC0tLVxcdTAwM2Ugcl9yZW1haW4gLT0gYnl0ZXM7IHByb2dyYW1cXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2MtLS0tLS0tLS0tLS0tLS0tLS0tIFNUQVQ9MCAgKHJlYWR5IGZvciBuZXh0IHNsaWNlKVxcbisgKiAgIC4uLiByZXBlYXQgdW50aWwgdGhlIHdob2xlIHBheWxvYWQgaXMgc2VudCAuLi5cXG4rICogICBTVEFUIDo9IEVORCgweDNjYzMpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHUwMDNlIGZpbmFsaXNlXFxuKyAqXFxuKyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKTpcXG4rICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyXFxuKyAqICAgZG9lcyByX3JlbWFpbiAtPSBjb3VudCBhbmQgc3RheXMgaW4gdGhlIHJlY2VpdmUgbG9vcCB3aGlsZSByX3JlbWFpbiAhPSAwLlxcbisgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0c1xcbisgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHNcXG4rICogICBFWEFDVExZIDAuIEEgY291bnQgbGFyZ2VyIHRoYW4gcl9yZW1haW4gdW5kZXJmbG93cyB0aGUgMzItYml0IGNvdW50ZXIgYW5kXFxuKyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6XFxuKyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nO1xcbisgKiAgICAgLSBpbnRlcnJ1cHRlZC1kb3dubG9hZCByZWNvdmVyeSBmZWVkcyAxIGJ5dGUgYXQgYSB0aW1lIChzZWUgYmVsb3cpLlxcbisgKlxcbisgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKTpcXG4rICogICBBIGhvc3QgdGhhdCBkaWVzIG1pZC1wYXlsb2FkIGxlYXZlcyB0aGUgbG9hZGVyIHNwaW5uaW5nIGluIHRoZSBzbGljZSBsb29wXFxuKyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCArXFxuKyAqICAgU1RBVD0xKSB1bnRpbCByX3JlbWFpbiByZWFjaGVzIDAsIHRoZW4gU1RBVD1FTkQ7IHRoZSBsb2FkZXIgZmluYWxpc2VzIHRoZVxcbisgKiAgIChub3cgY29ycnVwdCkgaW1hZ2UgYW5kIHJlLWFybXMgUkVBRFkgZm9yIGEgY2xlYW4gcmVmbGFzaC5cXG4rICpcXG4rICogUmVnaXN0ZXItcmVhZCBjaGFsbGVuZ2UgKG5vbi1kZXN0cnVjdGl2ZSBsaXZlbmVzcyBwcm9vZik6XFxuKyAqICAgREFUQSA6PSAweDdjMjMgKG1hcmtlcik7IFNUQVQgOj0gMHhlMmMwfGlkeFxcbisgKiAgICAgLVxcdTAwM2UgbG9hZGVyIHJldHVybnMgYSBydW50aW1lIHdvcmQgaW4gREFUQSBhbmQgcmUtYXJtcyBTVEFUPTB4YzU1Yy5cXG4rICogICBUaGUgcmVwbHkgc291cmNlIGlzIGxvYWRlciBCU1MsIG5vdCBhIGNoaXAgaWQ7IHVzZWQgb25seSB0byBwcm92ZSBhIGxpdmVcXG4rICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLlxcbisgKlxcbisgKiBUaGUgb3RoZXIgU1RBVCByZWFkeSBtYWdpYywgMHhjMzNjLCBtYXJrcyB0aGUgbG9hZGVyJ3MgZmxhc2hsZXNzXFxuKyAqIGNoaXAtdG8tY2hpcCBkb3dubG9hZCBtb2RlIChNeEw4NjI4MVMgMTYtcG9ydCB0aWVyKTsgdGhpcyBkcml2ZXIgZG9lcyBub3RcXG4rICogdXNlIGl0LlxcbisgKlxcbisgKiBSZXNjdWUgbGlmZWN5Y2xlIChkZXZsaW5rKTogcHJvYmUgcnVucyBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKTsgYSB3ZWRnZWRcXG4rICogbG9hZGVyIGlzIGRyYWluZWQgYmFjayB0byBSRUFEWSBieSBhIGJhY2tncm91bmQgc2VsZi1oZWFsIChyZXNjdWVfaGVhbF93b3JrKSBzb1xcbisgKiB0aGUgbXVsdGktbWludXRlIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suIGRldmxpbmsgZGV2IGluZm9cXG4rICogZXhwb3NlcyB0aGUgZncgdmVyc2lvbiAodGhlIFxcXCJmbGFzaGFibGVcXFwiIHNpZ25hbCkgb25seSBvbmNlIGF0IFJFQURZO1xcbisgKiBmbGFzaF91cGRhdGUgcmV0dXJucyAtRUJVU1kgdW50aWwgdGhlbiwgYW5kIHJlcHJvYmVzIHRvIFdTUCBmaXJtd2FyZSBvbiBzdWNjZXNzLlxcbisgKlxcbisgKiBOb3RlczpcXG4rICogICAtIENoaXAgaWQvcmV2aXNpb24gKDB4YzBkMjg4ODQvODgpIGFyZSBOT1QgcmVhY2hhYmxlIG9uIHRoaXMgY2hhbm5lbDsgdGhleVxcbisgKiAgICAgbmVlZCB0aGUgY2xhdXNlLTQ1IE1NRCBmaXJtd2FyZSBtYWlsYm94LCB3aGljaCBpcyBkZWFkIHVuZGVyIE1DVWJvb3QuXFxuKyAqICAgICBSZXNjdWUgaWRlbnRpdHkgaXMgYnkgU0IgUERJIGJlaGF2aW91ciBvbmx5IChteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QpLlxcbisgKiAgIC0gVGhlIFNNRElPIFBIWSBhZGRyZXNzIGFuZCB0aGUgMHhlMXh4IG9mZnNldHMgYXJlIE9UUC1jb25maWd1cmFibGU7IGRlcml2ZVxcbisgKiAgICAgdGhlbSBmcm9tIHRoZSBEVCBiaW5kaW5nLCBkbyBub3QgYXNzdW1lIGZpeGVkIHZhbHVlcy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L292ZXJmbG93LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3N3aXRjaGRldi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1hcGkuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4rXFxuKy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXFx0XFx0MHhlMTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0FERFJcXHRcXHQweGUxMDFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfREFUQVxcdFxcdDB4ZTEwMlxcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXFx0XFx0MHhlMTAzXFxuK1xcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVFxcdDB4MDBcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlxcdFxcdDB4MDJcXG4rXFxuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKHB1Ymxpc2hlZC9jb25zdW1lZCB2aWEgU1RBVCkgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFlcXHRcXHQweGM1NWNcXHQvKiBsb2FkZXIgaWRsZSwgY29uc29sZSBsb29wICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RMX1JFQURZXFx0MHhjMzNjXFx0LyogbG9hZGVyIGlkbGUsIGZsYXNobGVzcyBsb29wICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUXFx0XFx0MHhmNDhmXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0VORFxcdFxcdDB4M2NjM1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR1xcdFxcdDB4ZTJjMFxcdC8qIHJlZ2lzdGVyLXJlYWQgY21kICh8IGluZGV4KSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLXFx0MHg3YzIzXFx0LyogbWFya2VyIHBsYWNlZCBpbiBEQVRBIGZvciBSRFJFRyAqL1xcbitcXG4rLyogQmVoYXZpb3VyYWwgcHJlc2VuY2UgcHJvYmU6IHR3byBkaXN0aW5jdCAxNi1iaXQgbGF0Y2hlcyBvbiBBRERSL0RBVEEuICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0FcXHRcXHQweDVhNWFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRFxcdFxcdDB4YTVhNVxcbitcXG4rLyogRmlybXdhcmUgdHJhbnNmZXIgZ2VvbWV0cnkgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19IRFJfU0laRVxcdFxcdDIwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19IQUxGXFx0XFx0MTYzODRcXHQvKiB3b3JkcyBwZXIgaGFsZi1iYW5rICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRVxcdFxcdDMyNzYwXFx0Lyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlxcdFxcdDB4NzgwMFxcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cXG4rXFxuKy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1xcdDMwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXFx0MzAwMDAwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1xcdDEyMDAwMFxcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TXFx0NTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMFxcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0XFx0ICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGV4cGVjdGVkLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsXFxuK1xcdFxcdFxcdFxcdHZhbCBcXHUwMDNjIDAgfHwgKHUxNil2YWwgPT0gZXhwZWN0ZWQsXFxuK1xcdFxcdFxcdFxcdDEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTMyIGRhdGFfd3JpdHRlbilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBkb25lLCB1MzIgdG90YWwpXFxuK3tcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XFxuK31cXG4rXFxuKy8qIFBvc3QtZmxhc2ggcmVwcm9iZS4gZGV2aWNlX3JlcHJvYmUoKSAtXFx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIHJ1bnNcXG4rICogZGV0YWNoZWQgZnJvbSBwcml2LCBvbiBvbmx5IHRoZSBoZWxkIGRldmljZSByZWZlcmVuY2UuIEl0IHJ1bnMgYXMgYSBrdGhyZWFkXFxuKyAqIHNvIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkIHdpdGggbW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KCksXFxuKyAqIGZyb20gY29yZS1rZXJuZWwgY29kZSAtLSBhIHdvcmsgaXRlbSdzIHRyYWlsaW5nIG1vZHVsZV9wdXQoKSBjb3VsZCByZXR1cm5cXG4rICogaW50byBtb2R1bGUgdGV4dCBhIHJhY2luZyBybW1vZCBoYXMgYWxyZWFkeSBmcmVlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4odm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xcbitcXG4rXFx0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVMpO1xcbitcXHRpZiAoZGV2aWNlX3JlcHJvYmUoZGV2KSlcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJyZXByb2JlIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdHB1dF9kZXZpY2UoZGV2KTtcXG4rXFx0bW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KDApO1xcbit9XFxuK1xcbitzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmIHtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rfTtcXG4rXFxuKy8qIFNwYXduIHRoZSByZXByb2JlIGt0aHJlYWQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgd2hlcmUga3RocmVhZF9jcmVhdGUoKVxcbisgKiBjYW5ub3QgcmV0dXJuIC1FSU5UUiBhcyBpdCBjYW4gZnJvbSB0aGUgZGV2bGluayBjYWxsZXIncyBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbyA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmLCB3b3JrKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0ga28tXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbitcXG4rXFx0a2ZyZWUoa28pO1xcbitcXHR0YXNrID0ga3RocmVhZF9ydW4obXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4sIGRldiwgXFxcIm14bDg2Mnh4LXJlcHJvYmVcXFwiKTtcXG4rXFx0aWYgKElTX0VSUih0YXNrKSkge1xcbitcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFxcInJlcHJvYmUga3RocmVhZCBmYWlsZWQgKCVwZSk7IHJlbG9hZCB0aGUgZHJpdmVyIHRvIHJlc3RvcmUgb3BlcmF0aW9uXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR0YXNrKTtcXG4rXFx0XFx0cHV0X2RldmljZShkZXYpO1xcbitcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuXFxuKyAqIGFsbG9jYXRpb24gZmFpbHVyZSBhYm9ydHMgY2xlYW5seS4gVGhlIGNhbGxlciBob2xkcyBhIG1vZHVsZSBhbmQgYSBkZXZpY2VcXG4rICogcmVmZXJlbmNlOyBvbmNlIHRoZSBraWNrb2ZmIGlzIHNjaGVkdWxlZCB0aGUgcmVwcm9iZSBrdGhyZWFkIHJlbGVhc2VzIGJvdGguXFxuKyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKm14bDg2Mnh4X3JlcHJvYmVfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKmtvO1xcbitcXG4rXFx0a28gPSBremFsbG9jX29iaigqa28pO1xcbitcXHRpZiAoIWtvKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0a28tXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZrby1cXHUwMDNld29yaywgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmX2ZuKTtcXG4rXFx0cmV0dXJuIGtvO1xcbit9XFxuK1xcbisvKiBCeXRlLWNvdW50IG9mIGVhY2ggY2h1bmsgZmVkIHRvIHRoZSBsb2FkZXIgZHVyaW5nIGRyYWluLiBJdCBNVVNUIGJlIDE6IHRoZVxcbisgKiBsb2FkZXIgb25seSBsZXRzIHVzIG9ic2VydmUgXFxcImNvdW50ZXIgPT0gMFxcXCIsIG5ldmVyIFxcXCJjb3VudGVyIFxcdTAwM2Mgc3RlcFxcXCIsIHNvIGFueVxcbisgKiBzdGVwIFxcdTAwM2UgMSBjYW4gc3VidHJhY3QgcGFzdCB6ZXJvLCB1bmRlcmZsb3cgdGhlIDMyLWJpdCBjb3VudGVyIGFuZCB3ZWRnZSB0aGVcXG4rICogbG9hZGVyIGZvciB+Ml4zMiBtb3JlIGJ5dGVzIChhIHN0YXRlIG9ubHkgYSBwb3dlciBjeWNsZSBjbGVhcnMpLiBTdGVwcGluZyBieVxcbisgKiAxIHdhbGtzIHRoZSBjb3VudGVyIHRocm91Z2ggZXZlcnkgdmFsdWUgYW5kIGlzIGd1YXJhbnRlZWQgdG8gbGFuZCBvbiB6ZXJvXFxuKyAqIHdoYXRldmVyIGl0cyAocG9zc2libHkgb2RkKSBzdGFydC4gQSAxLWJ5dGUgY2h1bmsgaXMgYSBwYXRoIHRoZSBsb2FkZXJcXG4rICogYWxyZWFkeSBoYW5kbGVzOiB0aGUgbm9ybWFsIHRyYW5zZmVyIGVuZHMgd2l0aCBhIHNpbmdsZSB0cmFpbGluZyBieXRlIGZvclxcbisgKiBvZGQtc2l6ZWQgaW1hZ2VzIChzZWUgU3RlcCA2KS5cXG4rICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVNcXHQxXFxuK1xcbisvKiBQb2xsIFNUQVQgd2hpbGUgZHJhaW5pbmcgYSBzdHVjayBkb3dubG9hZDogMCBtZWFucyBcXFwiZmVlZCB0aGUgbmV4dCBjaHVua1xcXCIsXFxuKyAqIFJFQURZIG1lYW5zIHRoZSBsb2FkZXIgbGVmdCB0aGUgcmVjZWl2ZSBsb29wIGFuZCByZS1hcm1lZCBpdHMgY29tbWFuZCBsb29wLFxcbisgKiBhbnl0aGluZyBlbHNlIGlzIGEgdHJhbnNpZW50ICh0aGUgY291bnQgYmVpbmcgY29uc3VtZWQpIC0gQlVTWSBwYXN0IHRoZVxcbisgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuXFxuKyAqL1xcbitlbnVtIHsgTVhMODYyWFhfRFJBSU5fRkVFRCwgTVhMODYyWFhfRFJBSU5fUkVBRFksIE1YTDg2MlhYX0RSQUlOX0JVU1kgfTtcXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxcbit7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsXFxuK1xcdFxcdFxcdCAgdmFsIFxcdTAwM2MgMCB8fCAodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkgfHxcXG4rXFx0XFx0XFx0ICAodTE2KXZhbCA9PSAwLFxcbitcXHRcXHRcXHQgIDUwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXFxuK1xcdFxcdFxcdCAgcHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFx0aWYgKCh1MTYpdmFsID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSlcXG4rXFx0XFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX1JFQURZO1xcbitcXHRpZiAoKHUxNil2YWwgPT0gMClcXG4rXFx0XFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX0ZFRUQ7XFxuK1xcdHJldHVybiBNWEw4NjJYWF9EUkFJTl9CVVNZO1xcbit9XFxuK1xcbisvKiBSZWNvdmVyIGEgc3dpdGNoIHdob3NlIFNCIFBESSBkb3dubG9hZCB3YXMgaW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIC0gdGhlXFxuKyAqIGhvc3QgZGllZCBhZnRlciBNQ1Vib290IGJlZ2FuIGVyYXNpbmcgZmxhc2gsIHdoZXRoZXIgaXQgYWJvcnRlZCBtaWQgZXJhc2Ugb3JcXG4rICogbWlkIGltYWdlLXdyaXRlLCBib3RoIGVuZCB1cCBpbiB0aGUgc2FtZSBwbGFjZTogdGhlIHBheWxvYWQgcmVjZWl2ZSBsb29wLlxcbisgKiBUaGVyZSB0aGUgbG9hZGVyIHB1Ymxpc2hlcyBTVEFUPTAsIHdhaXRzIGZvciB0aGUgaG9zdCB0byB3cml0ZSBhIGJ5dGUtY291bnRcXG4rICogdG8gU1RBVCwgRE1BcyB0aGF0IG1hbnkgYnl0ZXMgYW5kIHN1YnRyYWN0cyB0aGUgY291bnQgZnJvbSBhIHJlbWFpbmluZy1ieXRlc1xcbisgKiBjb3VudGVyLCBsZWF2aW5nIHRoZSBsb29wIG9ubHkgd2hlbiB0aGUgY291bnRlciByZWFjaGVzIGV4YWN0bHkgemVyby4gVGhlXFxuKyAqIGltYWdlIHNpemUgZGllZCB3aXRoIHRoZSBob3N0LCBzbyB3ZSBmZWVkIHNpbmdsZS1ieXRlIGNodW5rcyAoc2VlXFxuKyAqIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKSB0byB3YWxrIHRoZSBjb3VudGVyIHRvIHplcm8gd2l0aG91dCB1bmRlcmZsb3csXFxuKyAqIHRoZW4gc2VuZCBFTkQuIFRoZSBsb2FkZXIgdmFsaWRhdGVzIHRoZSAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zXFxuKyAqIFJFQURZLCBvciBib290cyBhIHZhbGlkIGltYWdlIHRoYXQgaGFwcGVuZWQgdG8gc3Vydml2ZSBpbiBmbGFzaC4gVGhpcyBvbmx5XFxuKyAqIGZpbmFsaXNlcyB0aGUgdHJhbnNmZXI7IHRoZSBjYWxsZXIncyByZXByb2JlIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlXFxuKyAqIHJlc3VsdHMuIFJldHVybnMgMCBvbmNlIGZpbmFsaXNlZCwgXFx1MDAzYzAgb24gZXJyb3IuIERvZXMgTk9UIHJlY292ZXIgYSBjb3VudGVyXFxuKyAqIGFscmVhZHkgdW5kZXJmbG93ZWQgYnkgYW4gZWFybGllciBvdmVyc2l6ZWQtY2h1bmsgYXR0ZW1wdCAtIHRoYXQgbmVlZHMgYVxcbisgKiBwb3dlciBjeWNsZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfcmVzY3VlX2RyYWluKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXY7XFxuK1xcdC8qIEJvdW5kOiB0d2ljZSB0aGUgbG9hZGVyJ3MgMTYgTWlCIGltYWdlIGNhcCwgb25lIGJ5dGUgcGVyIGNodW5rLiAqL1xcbitcXHR1MzIgbWF4X2NodW5rcyA9IDJ1ICogKDE2dSBcXHUwMDNjXFx1MDAzYyAyMCkgLyBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUztcXG4rXFx0dTMyIGNodW5rID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldl93YXJuKGRldiwgXFxcImZsYXNoOiBkcmFpbmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZFxcXFxuXFxcIik7XFxuK1xcbitcXHR3aGlsZSAoY2h1bmsgXFx1MDAzYyBtYXhfY2h1bmtzKSB7XFxuK1xcdFxcdC8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovXFxuK1xcdFxcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XFxuK1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihwcml2LCAyMDAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fUkVBRFkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX0JVU1kpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogRmVlZCBvbmUgemVybyBieXRlOyByZXNldCBjbGVhcmVkIHRoZSB3cml0ZSBsYXRjaC4gKi9cXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGNodW5rKys7XFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY2h1bmsgXFx1MDAzZT0gbWF4X2NodW5rcykge1xcbitcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFxcImZsYXNoOiBpbnRlcnJ1cHRlZCBkb3dubG9hZCBkaWQgbm90IGRyYWluIGFmdGVyICV1IGNodW5rc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0Y2h1bmspO1xcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIExldCB0aGUgbG9hZGVyIHZhbGlkYXRlIGFuZCByZS1hcm0gUkVBRFksIG9yIGJvb3QgYSBzdXJ2aXZpbmcgaW1hZ2U7XFxuK1xcdCAqIHRoZSBjYWxsZXIncyByZXByb2JlIHRoZW4gY2xhc3NpZmllcyB3aGljaGV2ZXIgc3RhdGUgcmVzdWx0cy5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQmFja2dyb3VuZCBzZWxmLWhlYWw6IGRyYWluIGEgd2VkZ2VkIGRvd25sb2FkIG9mZiB0aGUgZGV2bGluayBmbGFzaCBwYXRoLCBzb1xcbisgKiB0aGUgbWludXRlcy1sb25nIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suIFNjaGVkdWxlZCBmcm9tIHByb2JlO1xcbisgKiByZXByb2JlcyBvbiBzdWNjZXNzIHNvIHRoZSBwcm9iZS10aW1lIGRldGVjdGlvbiByZS1jbGFzc2lmaWVzIHRoZSBzd2l0Y2guXFxuKyAqL1xcbit2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9wcml2LCByZXNjdWVfaGVhbF93b3JrKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkZXZfaW5mbyhkZXYsIFxcXCJyZWNvdmVyaW5nIGludGVycnVwdGVkIGRvd25sb2FkIGluIGJhY2tncm91bmRcXFxcblxcXCIpO1xcbitcXHRyZXQgPSBteGw4NjJ4eF9yZXNjdWVfZHJhaW4ocHJpdik7XFxuK1xcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBUaGUgaW50ZXJydXB0ZWQgdHJhbnNmZXIgaXMgZmluYWxpc2VkOyByZXByb2JlIHNvIHRoZSBwcm9iZS10aW1lXFxuK1xcdCAqIGRldGVjdGlvbiBicmluZ3MgdGhlIGRyaXZlciB1cCAtLSBmbGFzaGFibGUgaW4gcmVzY3VlIG1vZGUgaWYgdGhlXFxuK1xcdCAqIGxvYWRlciBpcyBhdCBSRUFEWSwgb3Igbm9ybWFsbHkgaWYgYSB2YWxpZCBpbWFnZSBib290ZWQuIFRoZSByZWZzXFxuK1xcdCAqIGFyZSByZWxlYXNlZCBieSB0aGUgcmVwcm9iZSBvbmNlIGl0IGNvbXBsZXRlcy5cXG4rXFx0ICovXFxuK1xcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGdldF9kZXZpY2UoZGV2KTtcXG4rXFx0a28gPSBteGw4NjJ4eF9yZXByb2JlX2FsbG9jKGRldik7XFxuK1xcdGlmICgha28pIHtcXG4rXFx0XFx0cHV0X2RldmljZShkZXYpO1xcbitcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmtvLVxcdTAwM2V3b3JrKTtcXG4rfVxcbitcXG4rLyogRGV0ZWN0IE1DVWJvb3QgcmVzY3VlIG1vZGUgb3ZlciBjbGF1c2UtMjIgU01ESU8gYWxvbmUsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1bGVcXG4rICogdGhlIGxvYWRlciBvdXQgYmVmb3JlIGFueSBDNDUgQVBJIHJlcXVlc3QgKHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBubyBXU1BcXG4rICogZmlybXdhcmUgYW5zd2VycykuIEEgc2NyYXRjaCB3cml0ZSB0byBBRERSL0RBVEEgbXVzdCBsYXRjaCBvciB0aGUgY2hpcCBpc1xcbisgKiBhYnNlbnQgKC1FTk9ERVYpOyBTVEFUIHRoZW4gY2xhc3NpZmllcyB0aGUgc3RhdGUsIHBva2VkIGRlc3RydWN0aXZlbHkgb25seVxcbisgKiB3aGVuIDAsIHRoZSBvbmUgdmFsdWUgYSBydW5uaW5nIGZpcm13YXJlIG5ldmVyIGhvbGRzOlxcbisgKlxcbisgKiAgLSAweGMzM2M6IGZsYXNobGVzcyBsb29wLCByZWFkeS5cXG4rICogIC0gMHhjNTVjOiBjb25zb2xlIGxvb3AsIGlmIHRoZSByZWdpc3Rlci1yZWFkIGNoYWxsZW5nZSBpcyBzZXJ2aWNlZC5cXG4rICogIC0gb3RoZXIgbm9uLXplcm86IHJ1bm5pbmcgZmlybXdhcmUsIGxlZnQgdW5wb2tlZC5cXG4rICogIC0gMDogd2VkZ2VkIHJlY2VpdmUgbG9vcCwgaWYgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBkcmFpbnMgYmFjayB0byAwLlxcbisgKlxcbisgKiBSZXR1cm46IE1YTDg2MlhYX0lOX1JFU0NVRSwgTVhMODYyWFhfTk9UX1JFU0NVRSwgb3IgbmVnYXRpdmUgKC1FTk9ERVYvU01ESU8pLlxcbisgKi9cXG4raW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgc3RhdCwgZGF0LCByZXQsIHJiLCBhLCBkO1xcbitcXG4rXFx0LyogcmVzY3VlX3JlYWR5IGdhdGVzIGZsYXNoaW5nOyBhIHdlZGdlZCBsb2FkZXIgbmVlZHMgdGhlIGRyYWluIGZpcnN0LiAqL1xcbitcXHRwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIFByZXNlbmNlOiBhIGxpdmUgY2hpcCBsYXRjaGVzIHRoZSBzY3JhdGNoIHdyaXRlLCBhbiBhYnNlbnQgb25lIGZsb2F0cy4gKi9cXG4rXFx0YSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbitcXHRcXHRcXHRcXHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0EpO1xcbitcXHRpZiAoYSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBhO1xcbitcXHRkID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXFxuK1xcdFxcdFxcdFxcdCBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCk7XFxuK1xcdGlmIChkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGQ7XFxuK1xcdGEgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSKTtcXG4rXFx0aWYgKGEgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gYTtcXG4rXFx0ZCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xcbitcXHRpZiAoZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBkO1xcbitcXHRpZiAoKHUxNilhICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BIHx8XFxuK1xcdCAgICAodTE2KWQgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0QpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN0YXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTtcXG4rXFx0aWYgKHN0YXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gc3RhdDtcXG4rXFxuK1xcdC8qIEZsYXNobGVzcy1kb3dubG9hZCBsb29wIChNeEw4NjI4MVMgdGllcik6IHRoaXMgZHJpdmVyIGRvZXMgbm90XFxuK1xcdCAqIHN1cHBvcnQgaXQgLS0gdGhlIGNvbnNvbGUgZmxhc2ggcGF0aCBleHBlY3RzIFJFQURZLiBUcmVhdCBpdCBhcyBhblxcbitcXHQgKiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLCBsaWtlIGFueSBvdGhlciB1bnN1cHBvcnRlZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX0RMX1JFQURZKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdC8qIENvbnNvbGUgbG9vcCBhdCBSRUFEWTogY29uZmlybSB0aGUgbGl2ZSBtYWlsYm94IHdpdGggdGhlIHJlZ2lzdGVyLXJlYWRcXG4rXFx0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoKHUxNilzdGF0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSkge1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9SRFJFRyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xcbitcXHRcXHRkYXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBKTtcXG4rXFx0XFx0aWYgKGRhdCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBkYXQ7XFxuK1xcdFxcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4rXFx0XFx0aWYgKCFyYiBcXHUwMDI2XFx1MDAyNiAodTE2KWRhdCAhPSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSykge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbnkgb3RoZXIgbm9uLXplcm8gdmFsdWUgaXMgYSBydW5uaW5nIGZpcm13YXJlLCBub3QgYSBsb2FkZXIuICovXFxuK1xcdGlmIChzdGF0KVxcbitcXHRcXHRyZXR1cm4gTVhMODYyWFhfTk9UX1JFU0NVRTtcXG4rXFxuK1xcdC8qIFNUQVQgPT0gMDogYSB3ZWRnZWQgcmVjZWl2ZSBsb29wIGNvbnN1bWVzIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgYmFja1xcbitcXHQgKiB0byAwIChmZWVkIG9uZSBEQVRBIHdvcmQgZmlyc3QsIGxpa2UgYSBkcmFpbiBjaHVuaykuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIDB4MDAwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAoIXJiKVxcbitcXHRcXHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xcbitcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuKy8qIE1DVWJvb3QgZmlybXdhcmUgaW1hZ2UgaGVhZGVyICovXFxuK3N0cnVjdCBteGw4NjJ4eF9md19oZHIge1xcbitcXHRfX2xlMzIgaW1hZ2VfdHlwZTtcXG4rXFx0X19sZTMyIGltYWdlX3NpemVfMTtcXG4rXFx0X19sZTMyIGltYWdlX2NoZWNrc3VtXzE7XFxuK1xcdF9fbGUzMiBpbWFnZV9zaXplXzI7XFxuK1xcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyICpwYXlsb2FkX3NpemUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xcbitcXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcXG4rXFx0Y29uc3QgdTggKnBheWxvYWQ7XFxuK1xcdHUzMiBjcmM7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgXFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXHRwYXlsb2FkID0gZnctXFx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcXG4rXFx0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX3NpemVfMSk7XFxuK1xcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9zaXplXzIpO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhzaXplMSwgc2l6ZTIsIFxcdTAwMjZ0b3RhbCkgfHxcXG4rXFx0ICAgIHRvdGFsIFxcdTAwM2UgZnctXFx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0b3RhbCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNpemUxKSB7XFxuK1xcdFxcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcXG4rXFx0XFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoc2l6ZTIpIHtcXG4rXFx0XFx0Y3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCArIHNpemUxLCBzaXplMik7XFxuK1xcdFxcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzIpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0KnBheWxvYWRfc2l6ZSA9IHRvdGFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcXG4re1xcbitcXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVxcdTAwM2VkYXRhICsgTVhMODYyWFhfRldfSERSX1NJWkU7XFxuK1xcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV4dF9ub3RpZnkgPSBqaWZmaWVzIC0gMTtcXG4rXFx0dTE2IHdvcmQsIGZkYXRhO1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0LyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKSB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJmbGFzaDogRldfVVBEQVRFIGNvbW1hbmQgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogU3RlcCAyOiB3YWl0IGZvciBib290bG9hZGVyIHJlYWR5ICovXFxuK1xcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXFxcIldhaXRpbmcgZm9yIGJvb3Rsb2FkZXJcXFwiLCAwLCAwKTtcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcbitcXHQvKiBGYWlsdXJlcyBmcm9tIGhlcmUgb24gbXVzdCBnbyB0aHJvdWdoIGVuZF9tYWdpYyBzbyBNQ1Vib290XFxuK1xcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcXG4rXFx0XFx0XFx0XFx0XFx0TVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdGdvdG8gZW5kX21hZ2ljO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX1NUQVJUKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBUlQgKyAxLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxcXFxuXFxcIiwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNDogdHJhbnNmZXIgaW1hZ2UgaGVhZGVyICovXFxuK1xcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXFxcIkVyYXNpbmcgZmxhc2hcXFwiLCAwLCAwKTtcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSsrKSB7XFxuK1xcdFxcdHdvcmQgPSBmdy1cXHUwMDNlZGF0YVtpICogMl0gfFxcbitcXHRcXHQgICAgICAgKCh1MTYpZnctXFx1MDAzZWRhdGFbaSAqIDIgKyAxXSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0LyogdGhlIGJ5dGUgY291bnQgaW4gU1RBVCB0cmlnZ2VycyB0aGUgZXJhc2UgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0LyogQUNLIGlzIGJ5dGUgY291bnQgKyAxICovXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgKyAxLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdGdvdG8gZW5kX21hZ2ljO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0TVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGVyYXNlIHRpbWVvdXQ6ICVwZVxcXFxuXFxcIiwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcbitcXHR3aGlsZSAoaWR4IFxcdTAwM2MgcGF5bG9hZF9zaXplKSB7XFxuK1xcdFxcdGlmIChpZHggKyAxIFxcdTAwM2MgcGF5bG9hZF9zaXplKSB7XFxuK1xcdFxcdFxcdGZkYXRhID0gcGF5bG9hZFtpZHhdIHxcXG4rXFx0XFx0XFx0XFx0KCh1MTYpcGF5bG9hZFtpZHggKyAxXSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0XFx0aWR4ICs9IDI7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbiArPSAyO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRmZGF0YSA9IHBheWxvYWRbaWR4XTtcXG4rXFx0XFx0XFx0aWR4Kys7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbisrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgZmRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcdFxcdHdvcmRfaWR4Kys7XFxuK1xcbitcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IHBheWxvYWRfc2l6ZSkge1xcbitcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEhhbGYtYmFuayBib3VuZGFyeTogc3dpdGNoIHRvIFNCMSBhZGRyZXNzICovXFxuK1xcdFxcdGlmICh3b3JkX2lkeCA9PSBNWEw4NjJYWF9GV19CQU5LX0hBTEYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFx0XFx0fSBlbHNlIGlmICh3b3JkX2lkeCBcXHUwMDNlPSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFKSB7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcImZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHR3b3JkX2lkeCA9IDA7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbiA9IDA7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkge1xcbitcXHRcXHRcXHRcXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFxcXCJGbGFzaGluZ1xcXCIsIGlkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGF5bG9hZF9zaXplKTtcXG4rXFx0XFx0XFx0XFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiRmxhc2hpbmdcXFwiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XFxuK1xcdGdvdG8gZW5kX21hZ2ljO1xcbitcXG4rd3JpdGVfZXJyOlxcbitcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCJmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdEVSUl9QVFIocmV0KSk7XFxuK2VuZF9tYWdpYzpcXG4rXFx0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcXG4rXFx0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRjaGFyIGJ1ZlsxNl07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBObyBjaGlwLWlkL3JldmlzaW9uIGluIE1DVWJvb3QgKG5lZWRzIHRoZSBmaXJtd2FyZSBNTUQgbWFpbGJveCkuIFRoZVxcbitcXHQgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlIFxcXCJyZWFkeSB0byBmbGFzaFxcXCIgc2lnbmFsOiByZXBvcnQgaXQgb25seVxcbitcXHQgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldS4ldS4ldVxcXCIsXFxuK1xcdFxcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxcbitcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XFxuK1xcdFxcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXFxcImZ3XFxcIiwgYnVmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcXFwiZndcXFwiLCBidWYpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBIDAgcGFydCBudW1iZXIgbWVhbnMgdGhlIENISVAgSUQgcmVhZCBmYWlsZWQgb3IgdGhlIHBhcnQgaXNcXG4rXFx0ICogdW5mdXNlZDsgb21pdCBpdCByYXRoZXIgdGhhbiBwdWJsaXNoIGEgYm9ndXMgXFxcIjAwMDBcXFwiIHRoYXQgZnd1cGRcXG4rXFx0ICogd291bGQgbWF0Y2ggZmlybXdhcmUgYWdhaW5zdCAtLSBpdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIGRyaXZlclxcbitcXHQgKiBuYW1lLlxcbitcXHQgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZWFzaWNfaWQpIHtcXG4rXFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiUwNFhcXFwiLCBwcml2LVxcdTAwM2Vhc2ljX2lkKTtcXG4rXFx0XFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgYnVmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldVxcXCIsIHByaXYtXFx1MDAzZWFzaWNfcmV2KTtcXG4rXFx0XFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfUkVWLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJ1Zik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldS4ldS4ldVxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XFxuK1xcbitcXHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFxcXCJmd1xcXCIsIGJ1Zik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi9cXG4rXFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcXFwiZndcXFwiLCBidWYpO1xcbit9XFxuK1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBwYXlsb2FkX3NpemU7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVxcdTAwM2VmdywgXFx1MDAyNnBheWxvYWRfc2l6ZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImZpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJlZnVzZSB0byBmbGFzaCB3aGlsZSB0aGUgYmFja2dyb3VuZCBzZWxmLWhlYWwgaXMgc3RpbGwgZHJhaW5pbmcuICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSBcXHUwMDI2XFx1MDAyNiAhUkVBRF9PTkNFKHByaXYtXFx1MDAzZXJlc2N1ZV9yZWFkeSkpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcInN3aXRjaCBpcyByZWNvdmVyaW5nIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZXRyeSBzaG9ydGx5XFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSByZWZlcmVuY2VzIHRoZSByZXByb2JlIHdvcmsgbmVlZHMgdG8gcmVzdG9yZSBub3JtYWwgb3BlcmF0aW9uXFxuK1xcdCAqIG11c3QgYmUgaGVsZCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQ7IHRoZSB3b3JrIGl0c2VsZiBpc1xcbitcXHQgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0Z2V0X2RldmljZShkcy1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdC8qIEFsbG9jYXRlIHRoZSByZXByb2JlIGtpY2tvZmYgYmVmb3JlIGRpc3R1cmJpbmcgdGhlIHN3aXRjaCwgc28gYW5cXG4rXFx0ICogLUVOT01FTSBoZXJlIGNhbm5vdCBzdHJhbmQgaXQgZmxhc2hlZCBidXQgbmV2ZXIgcmVwcm9iZWQuXFxuK1xcdCAqL1xcbitcXHRrbyA9IG14bDg2Mnh4X3JlcHJvYmVfYWxsb2MoZHMtXFx1MDAzZWRldik7XFxuK1xcdGlmICgha28pIHtcXG4rXFx0XFx0cHV0X2RldmljZShkcy1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdGRldl9pbmZvKGRzLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiZmxhc2g6IGZsYXNoaW5nIHN3aXRjaCB2aWEgTUNVYm9vdCByZXNjdWUgbW9kZVxcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGV2X2luZm8oZHMtXFx1MDAzZWRldiwgXFxcImZsYXNoOiBydW5uaW5nIGZpcm13YXJlICV1LiV1LiV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5taW5vcixcXG4rXFx0XFx0XFx0IHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xcbitcXG4rXFx0LyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0FcXG4rXFx0ICogY29yZSdzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzXFxuK1xcdCAqIHNvIHVzZXJzcGFjZSBjYW5ub3QgcmVvcGVuIHRoZW0gZHVyaW5nIHRoZSBmbGFzaC4gVGhlXFxuK1xcdCAqIGNvbmR1aXQgYmVsb25ncyB0byB0aGUgTUFDIGRyaXZlciBhbmQgaXMgb25seSBjbG9zZWQuXFxuK1xcdCAqL1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XFxuK1xcdFxcdGlmIChkcC1cXHUwMDNldXNlcikge1xcbitcXHRcXHRcXHRkZXZfY2xvc2UoZHAtXFx1MDAzZXVzZXIpO1xcbitcXHRcXHRcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKGRwLVxcdTAwM2V1c2VyKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoZHAsIGRzKVxcbitcXHRcXHRkZXZfY2xvc2UoZHAtXFx1MDAzZWNvbmR1aXQpO1xcbitcXHQvKiBUaGUgYnJpZGdlIGRlZmVycyB0aGUgU1RQIHN0YXRlIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IGNsb3NpbmdcXG4rXFx0ICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2VzcygpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XFxuK1xcdHByaXYtXFx1MDAzZWJsb2NrX2hvc3QgPSB0cnVlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdHNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFxcdTAwMjZwcml2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdHNfd29yayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yayk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkcy1cXHUwMDNlbnVtX3BvcnRzOyBpKyspXFxuK1xcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayk7XFxuK1xcbitcXHRyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtXFx1MDAzZWZ3LCBwYXlsb2FkX3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGRzLVxcdTAwM2VkZXZsaW5rKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImZpcm13YXJlIHRyYW5zZmVyIGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrLFxcbitcXHRcXHRcXHRcXHQgIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlYmxvY2tfaG9zdCA9IGZhbHNlO1xcbitcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdFxcdC8qIFJlZnJlc2ggdGhlIGNhY2hlZCB2ZXJzaW9ucyBzbyB0aGUgZmxhc2ggdXBkYXRlIG9ubHlcXG4rXFx0XFx0ICogY29tcGxldGVzIG9uY2UgdGhlIG5ldyBmaXJtd2FyZSBpcyBjb25maXJtZWQgcnVubmluZyBhbmRcXG4rXFx0XFx0ICogZGV2bGluayBkZXYgaW5mbyByZXBvcnRzIGl0LiBNdXN0IGhhcHBlbiBiZWZvcmUgc2V0dGluZ1xcbitcXHRcXHQgKiBza2lwX3RlYXJkb3duLCB3aGljaCBkaXNjYXJkcyBhbGwgZmlybXdhcmUgQVBJIHJlYWRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJuZXcgZmlybXdhcmUgZGlkIG5vdCBiZWNvbWUgcmVhZHlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XFxuK1xcdHByaXYtXFx1MDAzZXNraXBfdGVhcmRvd24gPSB0cnVlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdC8qIEtpY2sgb2ZmIHRoZSByZXByb2JlIGxhc3Q7IHRoZSBraWNrb2ZmIHdhcyBhbGxvY2F0ZWQgdXAgZnJvbnQgYW5kXFxuK1xcdCAqIGl0cyBtb2R1bGUgYW5kIGRldmljZSByZWZlcmVuY2VzIGFyZSBhbHJlYWR5IGhlbGQuXFxuK1xcdCAqL1xcbitcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZrby1cXHUwMDNld29yayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxcbkBAIC0wLDAgKzEsMjAgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rXFxuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXFxuKyNkZWZpbmUgX19NWEw4NjJYWF9GV19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rc3RydWN0IG14bDg2Mnh4X3ByaXY7XFxuK3N0cnVjdCB3b3JrX3N0cnVjdDtcXG4rXFxuK2ludCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xcbit2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitcXG4rI2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuY1xcbmluZGV4IDRhY2QyMTZmN2NjMDA5Li4yZGJkMDc0YzBmZTI2YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuY1xcbkBAIC0xNSw2ICsxNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1jbWQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWZ3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC1ob3N0LmhcXFwiXFxuIFxcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXFx0XFx0XFx0QklUKDE1KVxcbkBAIC0zNDAsNiArMzQyLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXFxuIFxcbiBcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4gXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vza2lwX3RlYXJkb3duKSB7XFxuK1xcdFxcdHJldCA9IHJlYWQgPyAtRU5PREVWIDogMDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWJsb2NrX2hvc3QgXFx1MDAyNlxcdTAwMjYgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkge1xcbitcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRtYXggPSAoc2l6ZSArIDEpIC8gMjtcXG4gXFxuIFxcdHJldCA9IG14bDg2Mnh4X2J1c3lfd2FpdChwcml2KTtcXG5AQCAtNDk1LDEyICs1MTIsNDkgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXFx0XFx0MHgxZlxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1xcdDB4ZmZmMFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXFx0XFx0MHgwMDBmXFxuK1xcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0aW50IHBoeSA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXFxuK1xcdFxcdFxcdCAgICAgIGFkZHIgXFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgcGh5ID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgYWRkciBcXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZhbCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yaywgbXhsODYyeHhfY3JjX2Vycl93b3JrX2ZuKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VyZXNjdWVfaGVhbF93b3JrLCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKTtcXG4gfVxcbiBcXG4gdm9pZCBteGw4NjJ4eF9ob3N0X3NodXRkb3duKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXFxuQEAgLTE4LDUgKzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSxcXG4gXFx0bXhsODYyeHhfYXBpX3dyYXAoZGV2LCBjbWQsIFxcdTAwMjYoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKVxcbiBcXG4gaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KTtcXG4raW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKTtcXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCk7XFxuIFxcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmNcXG5pbmRleCBiNjg5NjUyYWE5YjkyMC4uYTViNjk0MGI1NTJlOWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmNcXG5AQCAtNDA2LDYgKzQwNiw4IEBAIG14bDg2Mnh4X3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcbiBcXHRzd2l0Y2ggKHBvcnQpIHtcXG4gXFx0Y2FzZSA5IC4uLiAxNjpcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xcbiBcXHRcXHRcXHRkZXZfd2Fybl9vbmNlKGRwLVxcdTAwM2Vkcy1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXFwiU2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xcbmluZGV4IDQ1ZDIzN2IzYTQwZjEwLi44ZDIxNzQ3Y2RmMTVlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC1hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LXBoeWxpbmsuaFxcXCJcXG4gXFxuQEAgLTcxLDYgKzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXhsODYyeHhfcm1vbl9yYW5nZXNbXSA9IHtcXG4gI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9USU1FT1VUX01TXFx0MTAwMDBcXG4gI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9QT0xMX01TXFx0XFx0MTAwXFxuIFxcbisvKiBDaGlwIElEIHJlZ2lzdGVycywgcmVhZCB2aWEgU1lTX01JU0NfUkVHX1JEICovXFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX0xcXHRcXHQweGMwZDI4ODg0XFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01cXHRcXHQweGMwZDI4ODg4XFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX0xfUE5VTUxcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rI2RlZmluZSBNWEw4NjJYWF9DSElQSURfTV9QTlVNTVxcdFxcdEdFTk1BU0soMTEsIDApXFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTlxcdEdFTk1BU0soMTQsIDEyKVxcbitcXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fSU5TVF9TRUxcXHRcXHQweGUwMFxcbiAjZGVmaW5lIE1YTDg2MlhYX1RDTV9DQlNcXHRcXHQweGUxMlxcbiAjZGVmaW5lIE1YTDg2MlhYX1RDTV9FQlNcXHRcXHQweGUxM1xcbkBAIC0yMjIsNyArMjMwLDQ2IEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcGh5X3dyaXRlX2M0NV9taWlfYnVzKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLFxcbiBcXHRyZXR1cm4gbXhsODYyeHhfcGh5X3dyaXRlX21tZChidXMtXFx1MDAzZXByaXYsIGFkZHIsIGRldmFkZCwgcmVnbnVtLCB2YWwpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbisvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElEXFxuKyAqIHJlZ2lzdGVycy4gT25seSBwb3NzaWJsZSB3aXRoIGEgcnVubmluZyBmaXJtd2FyZSwgc28gdGhlIHZhbHVlcyBhcmVcXG4rICogY2FjaGVkIGF0IHNldHVwIGFuZCBsZWZ0IHplcm8gd2hlbiB0aGUgc3dpdGNoIGlzIGluIHJlc2N1ZSBtb2RlLlxcbisgKi9cXG4rc3RhdGljIGludCBteGw4NjJ4eF9yZWFkX2NoaXBfaWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgcmVnID0ge307XFxuK1xcdHUxNiBjaGlwaWRfbCwgY2hpcGlkX207XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9MKTtcXG4rXFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRjaGlwaWRfbCA9IGxlMzJfdG9fY3B1KHJlZy52YWwpO1xcbitcXG4rXFx0cmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTSk7XFxuK1xcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0Y2hpcGlkX20gPSBsZTMyX3RvX2NwdShyZWcudmFsKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWFzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8XFxuK1xcdFxcdFxcdEZJRUxEX0dFVChNWEw4NjJYWF9DSElQSURfTV9QTlVNTSwgY2hpcGlkX20pIFxcdTAwM2NcXHUwMDNjIDQ7XFxuK1xcdHByaXYtXFx1MDAzZWFzaWNfcmV2ID0gRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT04sIGNoaXBpZF9tKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogbXhsODYyeHhfd2FpdF9yZWFkeSAtIHdhaXQgZm9yIHRoZSBzd2l0Y2ggZmlybXdhcmUgdG8gYmVjb21lIG9wZXJhdGlvbmFsXFxuKyAqIEBkczogRFNBIHN3aXRjaCBpbnN0YW5jZVxcbisgKlxcbisgKiBQb2xsIHRoZSBmaXJtd2FyZSB1bnRpbCBpdCByZXBvcnRzIGl0cyB2ZXJzaW9uIGFuZCBhY2NlcHRzXFxuKyAqIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMsIHRoZW4gY2FjaGUgdGhlIGZpcm13YXJlIHZlcnNpb24gYW5kIGNoaXAgSUQuXFxuKyAqIFRha2VzIGF0IGxlYXN0IHR3byBzZWNvbmRzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuXFxuKyAqL1xcbitpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9O1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcywgdGltZW91dDtcXG5AQCAtMjU0LDYgKzMwMSwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yID0gdmVyLml2X21ham9yO1xcbiBcXHRcXHRwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yID0gdmVyLml2X21pbm9yO1xcbiBcXHRcXHRwcml2LVxcdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uID0gbGUxNl90b19jcHUodmVyLml2X3JldmlzaW9uKTtcXG4rXFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChwcml2KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZHMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byByZWFkIGNoaXAgSUQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IEVSUl9QVFIocmV0KSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gbm90X3JlYWR5X3lldDpcXG5AQCAtNjIyLDE1ICs2NzQsNDkgQEAgc3RhdGljIGludCBteGw4NjJ4eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGludCBuX3VzZXJfcG9ydHMgPSAwLCBtYXhfdmxhbnM7XFxuIFxcdGludCBpbmdyZXNzX2ZpbmFscywgdmlkX3J1bGVzO1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbi1cXHRpbnQgcmV0LCBpO1xcbitcXHRpbnQgcmV0LCBpLCByZXNjdWU7XFxuIFxcbi1cXHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogRGV0ZWN0IHRoZSBsb2FkZXIgb3ZlciBTQiBQREkgZmlyc3Q6IGl0IG5lZWRzIG5vIGZpcm13YXJlLCB1bmxpa2UgdGhlXFxuK1xcdCAqIEM0NSBBUEkgKG14bDg2Mnh4X3Jlc2V0L3dhaXRfcmVhZHkpIHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBub25lXFxuK1xcdCAqIGFuc3dlcnMuIFRvdWNoIEM0NSBvbmx5IG9uY2UgcmVzY3VlIGlzIHJ1bGVkIG91dC5cXG4rXFx0ICovXFxuK1xcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcXG4rXFx0aWYgKHJlc2N1ZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXNjdWU7XFxuIFxcbi1cXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKSB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0LyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqL1xcbitcXHRcXHRcXHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XFxuK1xcdFxcdFxcdGlmIChyZXNjdWUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmVzY3VlO1xcbitcXHRcXHRcXHRpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlcmVzY3VlX21vZGUgPSByZXNjdWU7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9yZWFkeSkge1xcbitcXHRcXHRcXHRkZXZfd2Fybihkcy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcInN3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXFxcblxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBEcmFpbiB0aGUgd2VkZ2VkIGRvd25sb2FkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIGl0XFxuK1xcdFxcdFxcdCAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZVxcbitcXHRcXHRcXHQgKiBhdmFpbGFibGUgb25jZSByZWFkeS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGRldl93YXJuKGRzLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwic3dpdGNoIGluIE1DVWJvb3Qgd2l0aCBhbiBpbnRlcnJ1cHRlZCBkb3dubG9hZCwgcmVjb3ZlcmluZyBpbiBiYWNrZ3JvdW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNnByaXYtXFx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzZXJkZXNfbG9jayk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXNlcmRlc19wb3J0cyk7IGkrKylcXG5AQCAtNzE1LDExICs4MDEsMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRyZXR1cm4gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgdHJ1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGlmIChteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSkpXFxuIFxcdFxcdGRldl9lcnIoZHMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbiB9XFxuQEAgLTEzMzcsNiArMTQzMywxMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4gXFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHQvKiBEU0EgcmVpbml0cyBmYWlsZWQgdXNlciBwb3J0cyBhcyB1bnVzZWQ7IHNoYXJlZCBwb3J0cyBtdXN0XFxuK1xcdCAqIHN1Y2NlZWQgZm9yIHRoZSB0cmVlIHRvIHJlZ2lzdGVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcXG4rXFxuIFxcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtMTU3Miw2ICsxNjc0LDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdGV0aGVyX2FkZHJfY29weShxcGFyYW0ubWFjLCBtZGItXFx1MDAzZWFkZHIpO1xcbiBcXG4gXFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgTVhMODYyWFhfTUFDX1RBQkxFRU5UUllRVUVSWSwgcXBhcmFtKTtcXG4rXFx0LyogLUVOT0RFVjogdGhlIGZpcm13YXJlIGFuZCBpdHMgTUFDIHRhYmxlIGFyZSBnb25lLCBub3RoaW5nIGxlZnRcXG4rXFx0ICogdG8gZGVsZXRlXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0ID09IC1FTk9ERVYpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMTYyOCw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4gXFx0Y2FzZSBCUl9TVEFURV9ESVNBQkxFRDpcXG4gXFx0XFx0cGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpO1xcbkBAIC0yMDE1LDYgKzIxMjUsMTIgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc3RhdHNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IHByaXYtXFx1MDAzZWRzO1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbiBcXG4rXFx0LyogQSBnZXRfc3RhdHM2NCgpIHJlLWFybSBjYW4gcmFjZSB0aGUgZmxhc2ggdGVhcmRvd24ncyBXT1JLX1NUT1BQRURcXG4rXFx0ICogc2V0IGFuZCBjYW5jZWw7IGJhaWwgaGVyZSBzbyBhIHN0cmF5IHBvbGwgbmV2ZXIgcnVucyBkdXJpbmcgYSBmbGFzaC5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9hdmFpbGFibGVfcG9ydChkcCwgZHMpXFxuIFxcdFxcdG14bDg2Mnh4X3N0YXRzX3BvbGwoZHMsIGRwLVxcdTAwM2VpbmRleCk7XFxuIFxcbkBAIC0yMDg2LDYgKzIyMDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHMgPSBteGw4NjJ4eF9nZXRfcGF1c2Vfc3RhdHMsXFxuIFxcdC5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLFxcbiBcXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcXG4rXFx0LmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LFxcbitcXHQuZGV2bGlua19mbGFzaF91cGRhdGUgPSBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXFxuaW5kZXggNDMyYTVmM2YyZTA4ZTYuLjEyOTk4NWYyYmJmM2RlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcXG5AQCAtMTQsNiArMTQsMTAgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXY7XFxuICNkZWZpbmUgTVhMODYyWFhfRklSU1RfU0VSREVTX1BPUlRcXHQ5XFxuICNkZWZpbmUgTVhMODYyWFhfU0VSREVTX1NMT1RTXFx0XFx0NFxcbiBcXG4rLyogbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCkgcmV0dXJuIGNvZGVzIChuZWdhdGl2ZSB2YWx1ZXMgYXJlIGVycm9ycykgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFXFx0XFx0MFxcbisjZGVmaW5lIE1YTDg2MlhYX0lOX1JFU0NVRVxcdFxcdDFcXG4rXFxuICNkZWZpbmUgTVhMODYyWFhfREVGQVVMVF9CUklER0VcXHRcXHQwXFxuICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRVNcXHRcXHQ0OFxcbiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VfUE9SVFNcXHQxMjhcXG5AQCAtMzAzLDYgKzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7XFxuICAqICAgICAgICAgICAgICAgICAgICAgIGZsb29kaW5nKVxcbiAgKiBAZndfdmVyc2lvbjogICAgICAgICBjYWNoZWQgZmlybXdhcmUgdmVyc2lvbiwgcG9wdWxhdGVkIGF0IHByb2JlIGFuZFxcbiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKVxcbisgKiBAYXNpY19pZDogICAgICAgICAgICBjaGlwIHBhcnQgbnVtYmVyIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rIFxcXCJhc2ljLmlkXFxcIiBmaXhlZCB2ZXJzaW9uXFxuKyAqIEBhc2ljX3JldjogICAgICAgICAgIGNoaXAgdmVyc2lvbiByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLFxcbisgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayBcXFwiYXNpYy5yZXZcXFwiIGZpeGVkIHZlcnNpb25cXG4gICogQHNlcmRlc19wb3J0czogICAgICAgU2VyRGVzIGludGVyZmFjZXMgaW5jbC4gc3ViLWludGVyZmFjZXMgaW4gY2FzZSBvZlxcbiAgKiAgICAgICAgICAgICAgICAgICAgICAxMEdfUVhHTUlJIG9yIFFTR01JSVxcbiAgKiBAc2VyZGVzX3JlZmNvdW50OiAgICBwZXItWFBDUyBjb3VudCBvZiBzdWItcG9ydHMgZW5hYmxlZCBieSBwaHlsaW5rO1xcbkBAIC0zMTksNiArMzI3LDE1IEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcXG4gICogQGV2bGFuX2luZ3Jlc3Nfc2l6ZTogcGVyLXBvcnQgaW5ncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcXG4gICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxcbiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplXFxuKyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoXFxuKyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd25cXG4rICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmVcXG4rICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kcyBmYWlsIGZhc3QsXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzXFxuKyAqIEByZXNjdWVfcmVhZHk6ICAgICAgIChyZXNjdWVfbW9kZSkgbG9hZGVyIGlzIGF0IGEgY2xlYW4gUkVBRFkgYW5kIHdpbGwgYWNjZXB0XFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGEgZmxhc2g7IGZhbHNlIHdoaWxlIHJlc2N1ZV9oZWFsX3dvcmsgaXMgZHJhaW5pbmdcXG4rICogQHJlc2N1ZV9oZWFsX3dvcms6ICAgYmFja2dyb3VuZCBzZWxmLWhlYWwgZHJhaW5pbmcgYSB3ZWRnZWQgZG93bmxvYWQgdG8gUkVBRFlcXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xcbiAgKi9cXG5AQCAtMzI2LDkgKzM0MywxMiBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XFxuIFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4gXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3JjX2Vycl93b3JrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzY3VlX2hlYWxfd29yaztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dTE2IGRyb3BfbWV0ZXI7XFxuIFxcdHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIGZ3X3ZlcnNpb247XFxuK1xcdHUxNiBhc2ljX2lkO1xcbitcXHR1OCBhc2ljX3JldjtcXG4gXFx0c3RydWN0IG14bDg2Mnh4X3BjcyBzZXJkZXNfcG9ydHNbOF07XFxuIFxcdGludCBzZXJkZXNfcmVmY291bnRbMl07XFxuIFxcdHN0cnVjdCBtdXRleCBzZXJkZXNfbG9jaztcXG5AQCAtMzM3LDcgKzM1NywxMyBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XFxuIFxcdHUxNiBldmxhbl9pbmdyZXNzX3NpemU7XFxuIFxcdHUxNiBldmxhbl9lZ3Jlc3Nfc2l6ZTtcXG4gXFx0dTE2IHZmX2Jsb2NrX3NpemU7XFxuK1xcdGJvb2wgYmxvY2tfaG9zdDtcXG4rXFx0Ym9vbCBza2lwX3RlYXJkb3duO1xcbitcXHRib29sIHJlc2N1ZV9tb2RlO1xcbitcXHRib29sIHJlc2N1ZV9yZWFkeTtcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xcbiB9O1xcbiBcXG4raW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4rXFxuICNlbmRpZiAvKiBfX01YTDg2MlhYX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxcbmluZGV4IDhjMTZlZjIzY2MxMDJhLi5jOWUxOTM0OGRlNjE5MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTExNzAsNiArMTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XFxuIFxcdGludFxcdCgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK1xcdGludFxcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBcXHRpbnRcXHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbyk7XFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmNcXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uZDYwMjIyNjdhODM5Y2QgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS9kZXZsaW5rLmNcXG4rKysgYi9uZXQvZHNhL2RldmxpbmsuY1xcbkBAIC0yMCw2ICsyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xcbitcXG4rXFx0cmV0dXJuIGRzLVxcdTAwM2VvcHMtXFx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQoc3RydWN0IGRldmxpbmsgKmRsLFxcbiBcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbylcXG5AQCAtMTY3LDE4ICsxNzYsMzEgQEAgZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGxwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRwX21heCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xcbi1cXHQuaW5mb19nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LFxcbi1cXHQuc2JfcG9vbF9nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxcbi1cXHQuc2JfcG9vbF9zZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxcbi1cXHQuc2JfcG9ydF9wb29sX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX2dldCxcXG4tXFx0LnNiX3BvcnRfcG9vbF9zZXRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXFxuLVxcdC5zYl90Y19wb29sX2JpbmRfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LFxcbi1cXHQuc2JfdGNfcG9vbF9iaW5kX3NldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCxcXG4tXFx0LnNiX29jY19zbmFwc2hvdFxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFxcbi1cXHQuc2Jfb2NjX21heF9jbGVhclxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcXG4tXFx0LnNiX29jY19wb3J0X3Bvb2xfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCxcXG4rLyogVGhlIGRldmxpbmsgY29yZSByZWplY3RzIGZsYXNoIHJlcXVlc3RzIHVwIGZyb250IHdoZW4gdGhlIGZsYXNoX3VwZGF0ZVxcbisgKiBvcCBpcyBhYnNlbnQsIGJlZm9yZSBmZXRjaGluZyB0aGUgZmlybXdhcmUgZmlsZSBmcm9tIHVzZXJzcGFjZS4gT25seVxcbisgKiBpbnN0YWxsIHRoZSBvcCBmb3Igc3dpdGNoZXMgd2hvc2UgZHJpdmVyIGltcGxlbWVudHMgaXQsIHNvIHRoYXRcXG4rICogdW5zdXBwb3J0ZWQgcmVxdWVzdHMga2VlcCBmYWlsaW5nIGVhcmx5LlxcbisgKi9cXG4rI2RlZmluZSBEU0FfREVWTElOS19PUFNcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC5pbmZvX2dldFxcdFxcdFxcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXFx0XFx0XFxcXFxcbitcXHQuc2JfcG9vbF9nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxcdFxcXFxcXG4rXFx0LnNiX3Bvb2xfc2V0XFx0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcXHRcXFxcXFxuK1xcdC5zYl9wb3J0X3Bvb2xfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxcdFxcXFxcXG4rXFx0LnNiX3BvcnRfcG9vbF9zZXRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXFx0XFxcXFxcbitcXHQuc2JfdGNfcG9vbF9iaW5kX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXFxcXFxcbitcXHQuc2JfdGNfcG9vbF9iaW5kX3NldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCwgXFxcXFxcbitcXHQuc2Jfb2NjX3NuYXBzaG90XFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsXFx0XFxcXFxcbitcXHQuc2Jfb2NjX21heF9jbGVhclxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcXHRcXFxcXFxuK1xcdC5zYl9vY2NfcG9ydF9wb29sX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsIFxcXFxcXG4gXFx0LnNiX29jY190Y19wb3J0X2JpbmRfZ2V0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldCxcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xcbitcXHREU0FfREVWTElOS19PUFNcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2RldmxpbmtfZmxhc2hfb3BzID0ge1xcbitcXHREU0FfREVWTElOS19PUFNcXG4rXFx0LmZsYXNoX3VwZGF0ZVxcdFxcdFxcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxcbiB9O1xcbiBcXG4gaW50IGRzYV9kZXZsaW5rX3BhcmFtX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcXG5AQCAtMzc4LDEyICs0MDAsMTYgQEAgdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIGludCBkc2Ffc3dpdGNoX2RldmxpbmtfYWxsb2Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBkc2FfZGV2bGlua19wcml2ICpkbF9wcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcztcXG4gXFx0c3RydWN0IGRldmxpbmsgKmRsO1xcbiBcXG4rXFx0b3BzID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUgPyBcXHUwMDI2ZHNhX2RldmxpbmtfZmxhc2hfb3BzXFxuK1xcdFxcdFxcdFxcdFxcdCAgICA6IFxcdTAwMjZkc2FfZGV2bGlua19vcHM7XFxuK1xcbiBcXHQvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhblxcbiBcXHQgKiBhZGQgZHBpcGUgdGFibGVzXFxuIFxcdCAqL1xcbi1cXHRkbCA9IGRldmxpbmtfYWxsb2MoXFx1MDAyNmRzYV9kZXZsaW5rX29wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtXFx1MDAzZWRldik7XFxuK1xcdGRsID0gZGV2bGlua19hbGxvYyhvcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAoIWRsKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjQ1OjEzLjg5MTQ2NjU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzMyODQ4ODg0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQ5MGUwZGY0NzJlZDVlZThiNjNhMGNiM2NhOGYzZjFhNDg1YzU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjQ1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5pbmRleCA0NzQ1MTQ4ZmVjZjRmZS4uMDU4OTk5ZDBkYzU2ZjIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuQEAgLTk0LDYgKzk0LDcgQEAgcGFyYW1ldGVycywgaW5mbyB2ZXJzaW9ucywgYW5kIG90aGVyIGZlYXR1cmVzIGl0IHN1cHBvcnRzLlxuICAgIG1seDVcbiAgICBtbHhzd1xuICAgIG12ODhlNnh4eFxuKyAgIG14bDg2Mnh4XG4gICAgbmV0ZGV2c2ltXG4gICAgbmZwXG4gICAgb2N0ZW9udHgyXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIzZTlmN2Q0ZDQ5NjllXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9teGw4NjJ4eC5yc3RcbkBAIC0wLDAgKzEsNjMgQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKz09PT09PT09PT09PT09PT09PT09PT09PVxuK214bDg2Mnh4IGRldmxpbmsgc3VwcG9ydFxuKz09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZVxuK2BgbXhsODYyeHhgYCBkZXZpY2UgZHJpdmVyLlxuK1xuK0luZm8gdmVyc2lvbnNcbis9PT09PT09PT09PT09XG4rXG4rVGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZFxuKyAgIDp3aWR0aHM6IDUgNSA1IDg1XG4rXG4rICAgKiAtIE5hbWVcbisgICAgIC0gVHlwZVxuKyAgICAgLSBFeGFtcGxlXG4rICAgICAtIERlc2NyaXB0aW9uXG4rICAgKiAtIGBgYXNpYy5pZGBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIDg2MjhcbisgICAgIC0gVGhlIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90XG4rICAgICAgIHJlcG9ydGVkIGZvciBhIHN3aXRjaCBzaXR0aW5nIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUgYXMgdGhlXG4rICAgICAgIHJlZ2lzdGVycyBhcmUgb25seSBhY2Nlc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLlxuKyAgICogLSBgYGFzaWMucmV2YGBcbisgICAgIC0gZml4ZWRcbisgICAgIC0gMFxuKyAgICAgLSBUaGUgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdCByZXBvcnRlZFxuKyAgICAgICBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGVpdGhlci5cbisgICAqIC0gYGBmd2BgXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuKyAgICAgLSAxLjAuNzBcbisgICAgIC0gVmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgcnVubmluZyBvbiB0aGUgc3dpdGNoLCByZXBvcnRlZCBhcyBib3RoXG4rICAgICAgIHJ1bm5pbmcgYW5kIHN0b3JlZCBzaW5jZSB0aGUgc3dpdGNoIGJvb3RzIGl0IGZyb20gaXRzIG93biBmbGFzaC5cbisgICAgICAgSW4gTUNVYm9vdCByZXNjdWUgbW9kZSBub3RoaW5nIGlzIHJlcG9ydGVkIHdoaWxlIGFuIGludGVycnVwdGVkXG4rICAgICAgIGRvd25sb2FkIGlzIHN0aWxsIGJlaW5nIHJlY292ZXJlZCBpbiB0aGUgYmFja2dyb3VuZDsgb25jZSB0aGVcbisgICAgICAgbG9hZGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBpbWFnZSB0aGUgdmVyc2lvbiBpcyByZXBvcnRlZCAoYXNcbisgICAgICAgYm90aCBydW5uaW5nIGFuZCBzdG9yZWQpLCB3aGljaCBpcyB0aGUgc2lnbmFsIHRoYXQgYSBmbGFzaCB3aWxsIGJlXG4rICAgICAgIGFjY2VwdGVkLiBJdCByZWFkcyBcIjAuMC4wXCIgd2hlbiB0aGUgc3dpdGNoIGNhbWUgdXAgc3RyYWlnaHQgaW50b1xuKyAgICAgICBNQ1Vib290IHdpdGhvdXQgZXZlciBydW5uaW5nIGZpcm13YXJlLlxuK1xuK0ZsYXNoIHVwZGF0ZVxuKz09PT09PT09PT09PVxuK1xuK1RoZSBgYG14bDg2Mnh4YGAgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgYGBkZXZsaW5rIGRldiBmbGFzaGBgLlxuK1RoZSBzaWduZWQgZmlybXdhcmUgaW1hZ2UgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHN3aXRjaCBvdmVyIHRoZSBzYW1lXG4rTURJTyBidXMgd2hpY2ggaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgc3dpdGNoLCB0aGVuIHZlcmlmaWVkIGFuZFxuK2luc3RhbGxlZCBieSB0aGUgTUNVYm9vdCBib290bG9hZGVyIHJ1bm5pbmcgb24gdGhlIHN3aXRjaC4gQWxsIHBvcnRzXG4rb2YgdGhlIHN3aXRjaCBhcmUgY2xvc2VkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHVwZGF0ZSBhbmQgdGhlIGRyaXZlclxuK3JlcHJvYmVzIHRoZSBzd2l0Y2ggYWZ0ZXIgaXQgaGFzIHJlYm9vdGVkIGludG8gdGhlIG5ldyBmaXJtd2FyZS4gQVxuK2NvbXBsZXRlIGZsYXNoIGFuZCByZXByb2JlIGN5Y2xlIHRha2VzIGFib3V0IG9uZSBtaW51dGUuXG4rXG4rQSBzd2l0Y2ggc3R1Y2sgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSwgZS5nLiBhZnRlciBhbiBpbnRlcnJ1cHRlZFxuK3VwZGF0ZSwgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IHVzZXIgcG9ydHMuIElmIHRoZSBwcmV2aW91cyBkb3dubG9hZCB3YXNcbitpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgdGhlIGxvYWRlciBpcyB3ZWRnZWQ7IHRoZSBkcml2ZXIgZHJhaW5zIGl0XG4rYmFjayB0byBhIGNsZWFuIHJlYWR5IHN0YXRlIGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBjYW4gZWFzaWx5IHRha2Vcbittb3JlIHRoYW4gMTAgbWludXRlcy4gRHVyaW5nIHRoYXQgcmVjb3ZlcnkgYGBkZXZsaW5rIGRldiBpbmZvYGAgcmVwb3J0c1xuK25vIGZpcm13YXJlIHZlcnNpb24gYW5kIGBgZGV2bGluayBkZXYgZmxhc2hgYCByZXR1cm5zIGBgLUVCVVNZYGAuXG4rT25jZSB0aGUgbG9hZGVyIGlzIHJlYWR5IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFwcGVhcnMgYW5kIGZsYXNoaW5nIGFcbitmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIHRoZSByZWd1bGFyIHVwZGF0ZSBmbG93IHJlY292ZXJzIHRoZSBzd2l0Y2guXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjBjZmYwMDk1M2RjYmUuLjNhNTVlZDJiYWQ5Y2JhIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTYxMDcsNiArMTYxMDcsNyBAQCBNOlx0RGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWF4bGluZWFyLG14bDg2Mnh4LnlhbWxcbitGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG4gRjpcdGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cbiBGOlx0bmV0L2RzYS90YWdfbXhsODYyeHguY1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbkBAIC0xLDMgKzEsMyBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBvYmotJChDT05GSUdfTkVUX0RTQV9NWEw4NjIpICs9IG14bDg2Mnh4X2RzYS5vXG4tbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vXG4rbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmhcbmluZGV4IGExODBhNWRlY2ZmYzAxLi42Zjc3MTg5NTk4NGNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXG5AQCAtMTIyNCw2ICsxMjI0LDE2IEBAIHN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB7XG4gXHRfX2xlMzIgaXZfYnVpbGRfbnVtO1xuIH0gX19wYWNrZWQ7XG4gXG4rLyoqXG4rICogc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgLSBTeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZVxuKyAqIEBhZGRyOiAzMi1iaXQgcmVnaXN0ZXIgYWRkcmVzc1xuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbHVlXG4rICovXG4rc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncge1xuK1x0X19sZTMyIGFkZHI7XG4rXHRfX2xlMzIgdmFsO1xuK30gX19wYWNrZWQ7XG4rXG4gLyoqXG4gICogZW51bSBteGw4NjJ4eF9wb3J0X3R5cGUgLSBQb3J0IFR5cGVcbiAgKiBATVhMODYyWFhfTE9HSUNBTF9QT1JUOiBMb2dpY2FsIFBvcnRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbmluZGV4IGM4N2E5NTVjMTNjNDhlLi5hODY1NDI1YWE2MWUxZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG5AQCAtNzAsNyArNzAsOSBAQFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFx0XHRcdChHUFlfR1BZMlhYX01BR0lDICsgMHgxKVxuICNkZWZpbmUgSU5UX0dQSFlfV1JJVEVcdFx0XHQoR1BZX0dQWTJYWF9NQUdJQyArIDB4MilcbiBcbisjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVx0XHQoU1lTX01JU0NfTUFHSUMgKyAweDEpXG4gI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OXHRcdChTWVNfTUlTQ19NQUdJQyArIDB4MilcbisjZGVmaW5lIFNZU19NSVNDX1JFR19SRFx0XHRcdChTWVNfTUlTQ19NQUdJQyArIDB4OClcbiBcbiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0NPTkZJR1x0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgKyAweDEpXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19HRVRfU1RBVEVcdChNWEw4NjJYWF9YUENTX01BR0lDICsgMHgyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTRiMzU1NDUzNGMyYWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5AQCAtMCwwICsxLDk0OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBGaXJtd2FyZSBmbGFzaCBhbmQgZGV2bGluayBzdXBwb3J0IGZvciBNYXhMaW5lYXIgTXhMODYyeHhcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4rICpcbisgKiBTQiBQREkgLSBmaXJtd2FyZSBkb3dubG9hZCBpbnRlcmZhY2Ugb3ZlciBjbGF1c2UtMjIgU01ESU9cbisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBNeEw4NjJ4eCBNQ1Vib290IGxvYWRlciBhY2NlcHRzIGEgZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCBmb3VyIFwiU0IgUERJXCJcbisgKiByZWdpc3RlcnMgaW4gdGhlIHN3aXRjaCBTTURJTyByZWdpc3RlciBzcGFjZS4gSXQgcnVucyB3aGVuZXZlciBubyBXU1BcbisgKiBmaXJtd2FyZSBpcyBhY3RpdmU6IHRoZSBub3JtYWwgZmlybXdhcmUgdXBkYXRlIGVudGVycyBpdCBkZWxpYmVyYXRlbHkgLSB0aGVcbisgKiBTWVNfTUlTQ19GV19VUERBVEUgQVBJIGNvbW1hbmQgc2V0cyBhIHN0aWNreSByZXNjdWUgYml0IGFuZCByZWJvb3RzIGludG9cbisgKiBNQ1Vib290IC0gYW5kIHRoZSBsb2FkZXIgYWxzbyBzdGF5cyBoZXJlIHdoZW4gdGhlIHN0b3JlZCBXU1AgZmlybXdhcmUgZmFpbHNcbisgKiBpdHMgYm9vdC10aW1lIGludGVncml0eSBjaGVjay4gVGhpcyBkcml2ZXIgZHJpdmVzIHRoZSBsb2FkZXIncyAweGM1NWNcbisgKiBcImNvbnNvbGVcIiBkb3dubG9hZCBwYXRoLlxuKyAqXG4rICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKTpcbisgKiAgIE1JSSByZWcgMHgxZiA6PSBcdTAwM2NzYl9wZGlfcmVnXHUwMDNlICAgICAgOyBhZGRyZXNzL3BhZ2UgbGF0Y2hcbisgKiAgIE1JSSByZWcgMHgwMCA6PSAvID1cdTAwM2UgXHUwMDNjdTE2IGRhdGFcdTAwM2UgICA7IGRhdGEgd2luZG93XG4rICpcbisgKiBTQiBQREkgcmVnaXN0ZXJzIChob3N0IG5hbWUvYWRkciAgLVx1MDAzZSAgTUNVIG1haWxib3gpOlxuKyAqICAgQ1RSTCAweGUxMDAgLVx1MDAzZSAweGMwOTM4NDAwICAgbW9kZTogUlNUPTB4MDAgIFJEPTB4MDEgIFdSPTB4MDJcbisgKiAgIEFERFIgMHhlMTAxIC1cdTAwM2UgMHhjMDkzODQwNCAgIFNCIHRhcmdldCB3b3JkIGFkZHJlc3MgKFNCMSBiYW5rID0gMHg3ODAwKVxuKyAqICAgREFUQSAweGUxMDIgLVx1MDAzZSAweGMwOTM4NDA4ICAgMTYtYml0IGRhdGEgLyByZXBseSB3b3JkXG4rICogICBTVEFUIDB4ZTEwMyAtXHUwMDNlIDB4YzA5Mzg0MGMgICBoYW5kc2hha2U6IGEgbWFnaWMgKGJlbG93KSBvciBhIGJ5dGUgY291bnRcbisgKlxuKyAqIFNUQVQgbWFnaWNzOlxuKyAqICAgUkVBRFkgIDB4YzU1YyAgIGxvYWRlciBpZGxlIGluIHRoZSBjb25zb2xlIGxvb3AgICAgICAgICh0aGlzIGRyaXZlcilcbisgKiAgIERMX1JEWSAweGMzM2MgICBsb2FkZXIgaWRsZSBpbiB0aGUgZmxhc2hsZXNzIGxvb3BcbisgKiAgIFNUQVJUICAweGY0OGYgICBob3N0ICAgLVx1MDAzZSBiZWdpbiBkb3dubG9hZCBzZXNzaW9uXG4rICogICBBQ0sgICAgMHhmNDkwICAgbG9hZGVyIC1cdTAwM2UgU1RBUlQgYWNrbm93bGVkZ2VkIChTVEFSVCArIDEpXG4rICogICBFTkQgICAgMHgzY2MzICAgaG9zdCAgIC1cdTAwM2UgZW5kIG9mIHRyYW5zZmVyIC8gZmluYWxpc2VcbisgKiAgIFJEUkVHICAweGUyYzAgICBob3N0ICAgLVx1MDAzZSByZWdpc3Rlci1yZWFkIGNvbW1hbmQgKHwgaW5kZXgpLCBzZWUgYmVsb3dcbisgKlxuKyAqIENvbnNvbGUgZmxhc2ggcGF0aCAoU1RBVD0weGM1NWMpIC0gbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoKTpcbisgKlxuKyAqICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyXG4rICogICAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS1cbisgKiAgIHJlc2V0IChDVFJMPUFERFI9REFUQT0wKVxuKyAqICAgcmVhZCBTVEFUIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHhjNTVjICAgKFJFQURZLCBpZGxlKVxuKyAqICAgU1RBVCA6PSBTVEFSVCgweGY0OGYpICAtLS0tLS0tLS0tLS0tLVx1MDAzZVxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MtLS0tLS0tLS0tLS0tLSBTVEFUID0gMHhmNDkwIChBQ0spXG4rICogICBDVFJMIDo9IFdSXG4rICogICBEQVRBIDo9IGhkclswLi45XSAgKDIwLWJ5dGUgaGVhZGVyOiB0eXBlLHNpemUxLGNyYzEsc2l6ZTIsY3JjMilcbisgKiAgIHJlc2V0OyBTVEFUIDo9IDIwIChoZWFkZXIgbGVuKSAgLS0tLS1cdTAwM2UgcGFyc2UgaGRyOyByX3JlbWFpbj1zaXplMStzaXplMjtcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSQVNFIHRhcmdldCByZWdpb24ocylcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjLS0tLS0tLS0tLS0tLS0gU1RBVD0yMSAobGVuKzEpLCB0aGVuIFNUQVQ9MFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVyYXNlZClcbisgKiAgIC0tIHBheWxvYWQsIHN0cmVhbWVkIGluIHNsaWNlczogLS1cbisgKiAgIENUUkwgOj0gV1JcbisgKiAgIERBVEEgOj0gd29yZCB4IE4gLi4uXG4rICogICAgIGF0IHdvcmQgMTYzODQ6IHJlc2V0OyBBRERSOj0weDc4MDA7IENUUkw6PVdSICAgKGhhbGYtYmFuayAtXHUwMDNlIFNCMSlcbisgKiAgICAgYXQgd29yZCAzMjc2MDogZmx1c2ggc2xpY2U6XG4rICogICAgICAgIHJlc2V0OyBTVEFUIDo9IFx1MDAzY2J5dGVzX3RoaXNfc2xpY2VcdTAwM2UgLS0tXHUwMDNlIHJfcmVtYWluIC09IGJ5dGVzOyBwcm9ncmFtXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0gU1RBVD0wICAocmVhZHkgZm9yIG5leHQgc2xpY2UpXG4rICogICAuLi4gcmVwZWF0IHVudGlsIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHNlbnQgLi4uXG4rICogICBTVEFUIDo9IEVORCgweDNjYzMpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cdTAwM2UgZmluYWxpc2VcbisgKlxuKyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKTpcbisgKiAgIEV2ZXJ5IGhvc3QgU1RBVCB3cml0ZSBpbiB0aGUgcGF5bG9hZCBwaGFzZSBpcyBhIGJ5dGUgY291bnQ7IHRoZSBsb2FkZXJcbisgKiAgIGRvZXMgcl9yZW1haW4gLT0gY291bnQgYW5kIHN0YXlzIGluIHRoZSByZWNlaXZlIGxvb3Agd2hpbGUgcl9yZW1haW4gIT0gMC5cbisgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0c1xuKyAqICAgcmVzY3VlLWVuYWJsZSBiaXQgc28gYm9vdF9nbyBib290cyB0aGUgbmV3IGltYWdlLCBPTkxZIHdoZW4gcl9yZW1haW4gaGl0c1xuKyAqICAgRVhBQ1RMWSAwLiBBIGNvdW50IGxhcmdlciB0aGFuIHJfcmVtYWluIHVuZGVyZmxvd3MgdGhlIDMyLWJpdCBjb3VudGVyIGFuZFxuKyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6XG4rICogICAgIC0gbmV2ZXIgc2VuZCBhIHNsaWNlL2NodW5rIGNvdW50IGxhcmdlciB0aGFuIHdoYXQgaXMgb3V0c3RhbmRpbmc7XG4rICogICAgIC0gaW50ZXJydXB0ZWQtZG93bmxvYWQgcmVjb3ZlcnkgZmVlZHMgMSBieXRlIGF0IGEgdGltZSAoc2VlIGJlbG93KS5cbisgKlxuKyAqIEludGVycnVwdGVkLWZsYXNoIHJlY292ZXJ5IChteGw4NjJ4eF9yZXNjdWVfZHJhaW4pOlxuKyAqICAgQSBob3N0IHRoYXQgZGllcyBtaWQtcGF5bG9hZCBsZWF2ZXMgdGhlIGxvYWRlciBzcGlubmluZyBpbiB0aGUgc2xpY2UgbG9vcFxuKyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCArXG4rICogICBTVEFUPTEpIHVudGlsIHJfcmVtYWluIHJlYWNoZXMgMCwgdGhlbiBTVEFUPUVORDsgdGhlIGxvYWRlciBmaW5hbGlzZXMgdGhlXG4rICogICAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zIFJFQURZIGZvciBhIGNsZWFuIHJlZmxhc2guXG4rICpcbisgKiBSZWdpc3Rlci1yZWFkIGNoYWxsZW5nZSAobm9uLWRlc3RydWN0aXZlIGxpdmVuZXNzIHByb29mKTpcbisgKiAgIERBVEEgOj0gMHg3YzIzIChtYXJrZXIpOyBTVEFUIDo9IDB4ZTJjMHxpZHhcbisgKiAgICAgLVx1MDAzZSBsb2FkZXIgcmV0dXJucyBhIHJ1bnRpbWUgd29yZCBpbiBEQVRBIGFuZCByZS1hcm1zIFNUQVQ9MHhjNTVjLlxuKyAqICAgVGhlIHJlcGx5IHNvdXJjZSBpcyBsb2FkZXIgQlNTLCBub3QgYSBjaGlwIGlkOyB1c2VkIG9ubHkgdG8gcHJvdmUgYSBsaXZlXG4rICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLlxuKyAqXG4rICogVGhlIG90aGVyIFNUQVQgcmVhZHkgbWFnaWMsIDB4YzMzYywgbWFya3MgdGhlIGxvYWRlcidzIGZsYXNobGVzc1xuKyAqIGNoaXAtdG8tY2hpcCBkb3dubG9hZCBtb2RlIChNeEw4NjI4MVMgMTYtcG9ydCB0aWVyKTsgdGhpcyBkcml2ZXIgZG9lcyBub3RcbisgKiB1c2UgaXQuXG4rICpcbisgKiBSZXNjdWUgbGlmZWN5Y2xlIChkZXZsaW5rKTogcHJvYmUgcnVucyBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKTsgYSB3ZWRnZWRcbisgKiBsb2FkZXIgaXMgZHJhaW5lZCBiYWNrIHRvIFJFQURZIGJ5IGEgYmFja2dyb3VuZCBzZWxmLWhlYWwgKHJlc2N1ZV9oZWFsX3dvcmspIHNvXG4rICogdGhlIG11bHRpLW1pbnV0ZSByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBkZXZsaW5rIGRldiBpbmZvXG4rICogZXhwb3NlcyB0aGUgZncgdmVyc2lvbiAodGhlIFwiZmxhc2hhYmxlXCIgc2lnbmFsKSBvbmx5IG9uY2UgYXQgUkVBRFk7XG4rICogZmxhc2hfdXBkYXRlIHJldHVybnMgLUVCVVNZIHVudGlsIHRoZW4sIGFuZCByZXByb2JlcyB0byBXU1AgZmlybXdhcmUgb24gc3VjY2Vzcy5cbisgKlxuKyAqIE5vdGVzOlxuKyAqICAgLSBDaGlwIGlkL3JldmlzaW9uICgweGMwZDI4ODg0Lzg4KSBhcmUgTk9UIHJlYWNoYWJsZSBvbiB0aGlzIGNoYW5uZWw7IHRoZXlcbisgKiAgICAgbmVlZCB0aGUgY2xhdXNlLTQ1IE1NRCBmaXJtd2FyZSBtYWlsYm94LCB3aGljaCBpcyBkZWFkIHVuZGVyIE1DVWJvb3QuXG4rICogICAgIFJlc2N1ZSBpZGVudGl0eSBpcyBieSBTQiBQREkgYmVoYXZpb3VyIG9ubHkgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkuXG4rICogICAtIFRoZSBTTURJTyBQSFkgYWRkcmVzcyBhbmQgdGhlIDB4ZTF4eCBvZmZzZXRzIGFyZSBPVFAtY29uZmlndXJhYmxlOyBkZXJpdmVcbisgKiAgICAgdGhlbSBmcm9tIHRoZSBEVCBiaW5kaW5nLCBkbyBub3QgYXNzdW1lIGZpeGVkIHZhbHVlcy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvc3dpdGNoZGV2LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcIm14bDg2Mnh4LmhcIlxuKyNpbmNsdWRlIFwibXhsODYyeHgtYXBpLmhcIlxuKyNpbmNsdWRlIFwibXhsODYyeHgtY21kLmhcIlxuKyNpbmNsdWRlIFwibXhsODYyeHgtZncuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1ob3N0LmhcIlxuK1xuKy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxcdFx0MHhlMTAwXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQUREUlx0XHQweGUxMDFcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBXHRcdDB4ZTEwMlxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVRcdFx0MHhlMTAzXG4rXG4rLyogU0IgUERJIENUUkwgbW9kZXMgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVFx0MHgwMFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfV1JcdFx0MHgwMlxuK1xuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKHB1Ymxpc2hlZC9jb25zdW1lZCB2aWEgU1RBVCkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcdC8qIGxvYWRlciBpZGxlLCBjb25zb2xlIGxvb3AgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9ETF9SRUFEWVx0MHhjMzNjXHQvKiBsb2FkZXIgaWRsZSwgZmxhc2hsZXNzIGxvb3AgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFSVFx0XHQweGY0OGZcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkRcdFx0MHgzY2MzXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkRSRUdcdFx0MHhlMmMwXHQvKiByZWdpc3Rlci1yZWFkIGNtZCAofCBpbmRleCkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLXHQweDdjMjNcdC8qIG1hcmtlciBwbGFjZWQgaW4gREFUQSBmb3IgUkRSRUcgKi9cbitcbisvKiBCZWhhdmlvdXJhbCBwcmVzZW5jZSBwcm9iZTogdHdvIGRpc3RpbmN0IDE2LWJpdCBsYXRjaGVzIG9uIEFERFIvREFUQS4gKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BXHRcdDB4NWE1YVxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0RcdFx0MHhhNWE1XG4rXG4rLyogRmlybXdhcmUgdHJhbnNmZXIgZ2VvbWV0cnkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXHRcdDIwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcdFx0MTYzODRcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0VcdFx0MzI3NjBcdC8qIHdvcmRzIHBlciBmdWxsIHNsaWNlICovXG4rI2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlx0XHQweDc4MDBcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cbitcbisvKiBUaW1lb3V0cyAoZ2VuZXJvdXMgdXBwZXIgYm91bmRzKSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1x0MzAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVNcdDUwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVNcdDMwMDAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1x0MTIwMDAwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVNcdDUwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVNcdDUwMFxuKyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMFxuK1xuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4rXHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbitcdFx0XHRcdCAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuK31cbitcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBleHBlY3RlZCxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuK3tcbitcdGludCByZXQsIHZhbDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KG14bDg2Mnh4X3NtZGlvX3JlYWQsIHZhbCxcbitcdFx0XHRcdHZhbCBcdTAwM2MgMCB8fCAodTE2KXZhbCA9PSBleHBlY3RlZCxcbitcdFx0XHRcdDEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4rXHRcdFx0XHRwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2Uoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIGRhdGFfd3JpdHRlbilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCBkYXRhX3dyaXR0ZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuK1x0XHRcdFx0ICB1MzIgZG9uZSwgdTMyIHRvdGFsKVxuK3tcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuK31cbitcbisvKiBQb3N0LWZsYXNoIHJlcHJvYmUuIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIHJ1bnNcbisgKiBkZXRhY2hlZCBmcm9tIHByaXYsIG9uIG9ubHkgdGhlIGhlbGQgZGV2aWNlIHJlZmVyZW5jZS4gSXQgcnVucyBhcyBhIGt0aHJlYWRcbisgKiBzbyB0aGUgbW9kdWxlIHJlZmVyZW5jZSBjYW4gYmUgZHJvcHBlZCB3aXRoIG1vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdCgpLFxuKyAqIGZyb20gY29yZS1rZXJuZWwgY29kZSAtLSBhIHdvcmsgaXRlbSdzIHRyYWlsaW5nIG1vZHVsZV9wdXQoKSBjb3VsZCByZXR1cm5cbisgKiBpbnRvIG1vZHVsZSB0ZXh0IGEgcmFjaW5nIHJtbW9kIGhhcyBhbHJlYWR5IGZyZWVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgbXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4odm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xuK1xuK1x0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVMpO1xuK1x0aWYgKGRldmljZV9yZXByb2JlKGRldikpXG4rXHRcdGRldl9lcnIoZGV2LCBcInJlcHJvYmUgZmFpbGVkXFxuXCIpO1xuK1x0cHV0X2RldmljZShkZXYpO1xuK1x0bW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KDApO1xuK31cbitcbitzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmIHtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK307XG4rXG4rLyogU3Bhd24gdGhlIHJlcHJvYmUga3RocmVhZCBmcm9tIHdvcmtxdWV1ZSBjb250ZXh0LCB3aGVyZSBrdGhyZWFkX2NyZWF0ZSgpXG4rICogY2Fubm90IHJldHVybiAtRUlOVFIgYXMgaXQgY2FuIGZyb20gdGhlIGRldmxpbmsgY2FsbGVyJ3MgY29udGV4dC5cbisgKi9cbitzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmZfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKmtvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYsIHdvcmspO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0ga28tXHUwMDNlZGV2O1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1xuK1x0a2ZyZWUoa28pO1xuK1x0dGFzayA9IGt0aHJlYWRfcnVuKG14bDg2Mnh4X3JlcHJvYmVfdGhyZWFkX2ZuLCBkZXYsIFwibXhsODYyeHgtcmVwcm9iZVwiKTtcbitcdGlmIChJU19FUlIodGFzaykpIHtcbitcdFx0ZGV2X2VycihkZXYsXG4rXHRcdFx0XCJyZXByb2JlIGt0aHJlYWQgZmFpbGVkICglcGUpOyByZWxvYWQgdGhlIGRyaXZlciB0byByZXN0b3JlIG9wZXJhdGlvblxcblwiLFxuK1x0XHRcdHRhc2spO1xuK1x0XHRwdXRfZGV2aWNlKGRldik7XG4rXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuK1x0fVxuK31cbitcbisvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuXG4rICogYWxsb2NhdGlvbiBmYWlsdXJlIGFib3J0cyBjbGVhbmx5LiBUaGUgY2FsbGVyIGhvbGRzIGEgbW9kdWxlIGFuZCBhIGRldmljZVxuKyAqIHJlZmVyZW5jZTsgb25jZSB0aGUga2lja29mZiBpcyBzY2hlZHVsZWQgdGhlIHJlcHJvYmUga3RocmVhZCByZWxlYXNlcyBib3RoLlxuKyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICpteGw4NjJ4eF9yZXByb2JlX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbitcbitcdGtvID0ga3phbGxvY19vYmooKmtvKTtcbitcdGlmICgha28pXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0a28tXHUwMDNlZGV2ID0gZGV2O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmtvLVx1MDAzZXdvcmssIG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZl9mbik7XG4rXHRyZXR1cm4ga287XG4rfVxuK1xuKy8qIEJ5dGUtY291bnQgb2YgZWFjaCBjaHVuayBmZWQgdG8gdGhlIGxvYWRlciBkdXJpbmcgZHJhaW4uIEl0IE1VU1QgYmUgMTogdGhlXG4rICogbG9hZGVyIG9ubHkgbGV0cyB1cyBvYnNlcnZlIFwiY291bnRlciA9PSAwXCIsIG5ldmVyIFwiY291bnRlciBcdTAwM2Mgc3RlcFwiLCBzbyBhbnlcbisgKiBzdGVwIFx1MDAzZSAxIGNhbiBzdWJ0cmFjdCBwYXN0IHplcm8sIHVuZGVyZmxvdyB0aGUgMzItYml0IGNvdW50ZXIgYW5kIHdlZGdlIHRoZVxuKyAqIGxvYWRlciBmb3IgfjJeMzIgbW9yZSBieXRlcyAoYSBzdGF0ZSBvbmx5IGEgcG93ZXIgY3ljbGUgY2xlYXJzKS4gU3RlcHBpbmcgYnlcbisgKiAxIHdhbGtzIHRoZSBjb3VudGVyIHRocm91Z2ggZXZlcnkgdmFsdWUgYW5kIGlzIGd1YXJhbnRlZWQgdG8gbGFuZCBvbiB6ZXJvXG4rICogd2hhdGV2ZXIgaXRzIChwb3NzaWJseSBvZGQpIHN0YXJ0LiBBIDEtYnl0ZSBjaHVuayBpcyBhIHBhdGggdGhlIGxvYWRlclxuKyAqIGFscmVhZHkgaGFuZGxlczogdGhlIG5vcm1hbCB0cmFuc2ZlciBlbmRzIHdpdGggYSBzaW5nbGUgdHJhaWxpbmcgYnl0ZSBmb3JcbisgKiBvZGQtc2l6ZWQgaW1hZ2VzIChzZWUgU3RlcCA2KS5cbisgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTXHQxXG4rXG4rLyogUG9sbCBTVEFUIHdoaWxlIGRyYWluaW5nIGEgc3R1Y2sgZG93bmxvYWQ6IDAgbWVhbnMgXCJmZWVkIHRoZSBuZXh0IGNodW5rXCIsXG4rICogUkVBRFkgbWVhbnMgdGhlIGxvYWRlciBsZWZ0IHRoZSByZWNlaXZlIGxvb3AgYW5kIHJlLWFybWVkIGl0cyBjb21tYW5kIGxvb3AsXG4rICogYW55dGhpbmcgZWxzZSBpcyBhIHRyYW5zaWVudCAodGhlIGNvdW50IGJlaW5nIGNvbnN1bWVkKSAtIEJVU1kgcGFzdCB0aGVcbisgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuXG4rICovXG4rZW51bSB7IE1YTDg2MlhYX0RSQUlOX0ZFRUQsIE1YTDg2MlhYX0RSQUlOX1JFQURZLCBNWEw4NjJYWF9EUkFJTl9CVVNZIH07XG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcbit7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cmVhZF9wb2xsX3RpbWVvdXQobXhsODYyeHhfc21kaW9fcmVhZCwgdmFsLFxuK1x0XHRcdCAgdmFsIFx1MDAzYyAwIHx8ICh1MTYpdmFsID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSB8fFxuK1x0XHRcdCAgKHUxNil2YWwgPT0gMCxcbitcdFx0XHQgIDUwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4rXHRcdFx0ICBwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1x0aWYgKCh1MTYpdmFsID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSlcbitcdFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX1JFQURZO1xuK1x0aWYgKCh1MTYpdmFsID09IDApXG4rXHRcdHJldHVybiBNWEw4NjJYWF9EUkFJTl9GRUVEO1xuK1x0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX0JVU1k7XG4rfVxuK1xuKy8qIFJlY292ZXIgYSBzd2l0Y2ggd2hvc2UgU0IgUERJIGRvd25sb2FkIHdhcyBpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgLSB0aGVcbisgKiBob3N0IGRpZWQgYWZ0ZXIgTUNVYm9vdCBiZWdhbiBlcmFzaW5nIGZsYXNoLCB3aGV0aGVyIGl0IGFib3J0ZWQgbWlkIGVyYXNlIG9yXG4rICogbWlkIGltYWdlLXdyaXRlLCBib3RoIGVuZCB1cCBpbiB0aGUgc2FtZSBwbGFjZTogdGhlIHBheWxvYWQgcmVjZWl2ZSBsb29wLlxuKyAqIFRoZXJlIHRoZSBsb2FkZXIgcHVibGlzaGVzIFNUQVQ9MCwgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHdyaXRlIGEgYnl0ZS1jb3VudFxuKyAqIHRvIFNUQVQsIERNQXMgdGhhdCBtYW55IGJ5dGVzIGFuZCBzdWJ0cmFjdHMgdGhlIGNvdW50IGZyb20gYSByZW1haW5pbmctYnl0ZXNcbisgKiBjb3VudGVyLCBsZWF2aW5nIHRoZSBsb29wIG9ubHkgd2hlbiB0aGUgY291bnRlciByZWFjaGVzIGV4YWN0bHkgemVyby4gVGhlXG4rICogaW1hZ2Ugc2l6ZSBkaWVkIHdpdGggdGhlIGhvc3QsIHNvIHdlIGZlZWQgc2luZ2xlLWJ5dGUgY2h1bmtzIChzZWVcbisgKiBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUykgdG8gd2FsayB0aGUgY291bnRlciB0byB6ZXJvIHdpdGhvdXQgdW5kZXJmbG93LFxuKyAqIHRoZW4gc2VuZCBFTkQuIFRoZSBsb2FkZXIgdmFsaWRhdGVzIHRoZSAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zXG4rICogUkVBRFksIG9yIGJvb3RzIGEgdmFsaWQgaW1hZ2UgdGhhdCBoYXBwZW5lZCB0byBzdXJ2aXZlIGluIGZsYXNoLiBUaGlzIG9ubHlcbisgKiBmaW5hbGlzZXMgdGhlIHRyYW5zZmVyOyB0aGUgY2FsbGVyJ3MgcmVwcm9iZSBjbGFzc2lmaWVzIHdoaWNoZXZlciBzdGF0ZVxuKyAqIHJlc3VsdHMuIFJldHVybnMgMCBvbmNlIGZpbmFsaXNlZCwgXHUwMDNjMCBvbiBlcnJvci4gRG9lcyBOT1QgcmVjb3ZlciBhIGNvdW50ZXJcbisgKiBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGFcbisgKiBwb3dlciBjeWNsZS5cbisgKi9cbitzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0LyogQm91bmQ6IHR3aWNlIHRoZSBsb2FkZXIncyAxNiBNaUIgaW1hZ2UgY2FwLCBvbmUgYnl0ZSBwZXIgY2h1bmsuICovXG4rXHR1MzIgbWF4X2NodW5rcyA9IDJ1ICogKDE2dSBcdTAwM2NcdTAwM2MgMjApIC8gTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVM7XG4rXHR1MzIgY2h1bmsgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdGRldl93YXJuKGRldiwgXCJmbGFzaDogZHJhaW5pbmcgaW50ZXJydXB0ZWQgZG93bmxvYWRcXG5cIik7XG4rXG4rXHR3aGlsZSAoY2h1bmsgXHUwMDNjIG1heF9jaHVua3MpIHtcbitcdFx0LyogVGVhcmRvd24gY2FuIGludGVycnVwdCB0aGlzIG1pbnV0ZXMtbG9uZyBkcmFpbi4gKi9cbitcdFx0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbitcdFx0XHRyZXR1cm4gLUVDQU5DRUxFRDtcbitcbitcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9SRUFEWSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9CVVNZKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBGZWVkIG9uZSB6ZXJvIGJ5dGU7IHJlc2V0IGNsZWFyZWQgdGhlIHdyaXRlIGxhdGNoLiAqL1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHRcdFx0ICAgTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGNodW5rKys7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1xuK1x0aWYgKGNodW5rIFx1MDAzZT0gbWF4X2NodW5rcykge1xuK1x0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcImZsYXNoOiBpbnRlcnJ1cHRlZCBkb3dubG9hZCBkaWQgbm90IGRyYWluIGFmdGVyICV1IGNodW5rc1xcblwiLFxuK1x0XHRcdGNodW5rKTtcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIExldCB0aGUgbG9hZGVyIHZhbGlkYXRlIGFuZCByZS1hcm0gUkVBRFksIG9yIGJvb3QgYSBzdXJ2aXZpbmcgaW1hZ2U7XG4rXHQgKiB0aGUgY2FsbGVyJ3MgcmVwcm9iZSB0aGVuIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlIHJlc3VsdHMuXG4rXHQgKi9cbitcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBvZmYgdGhlIGRldmxpbmsgZmxhc2ggcGF0aCwgc29cbisgKiB0aGUgbWludXRlcy1sb25nIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suIFNjaGVkdWxlZCBmcm9tIHByb2JlO1xuKyAqIHJlcHJvYmVzIG9uIHN1Y2Nlc3Mgc28gdGhlIHByb2JlLXRpbWUgZGV0ZWN0aW9uIHJlLWNsYXNzaWZpZXMgdGhlIHN3aXRjaC5cbisgKi9cbit2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9wcml2LCByZXNjdWVfaGVhbF93b3JrKTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbitcdGludCByZXQ7XG4rXG4rXHRkZXZfaW5mbyhkZXYsIFwicmVjb3ZlcmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZCBpbiBiYWNrZ3JvdW5kXFxuXCIpO1xuK1x0cmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpO1xuK1x0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogVGhlIGludGVycnVwdGVkIHRyYW5zZmVyIGlzIGZpbmFsaXNlZDsgcmVwcm9iZSBzbyB0aGUgcHJvYmUtdGltZVxuK1x0ICogZGV0ZWN0aW9uIGJyaW5ncyB0aGUgZHJpdmVyIHVwIC0tIGZsYXNoYWJsZSBpbiByZXNjdWUgbW9kZSBpZiB0aGVcbitcdCAqIGxvYWRlciBpcyBhdCBSRUFEWSwgb3Igbm9ybWFsbHkgaWYgYSB2YWxpZCBpbWFnZSBib290ZWQuIFRoZSByZWZzXG4rXHQgKiBhcmUgcmVsZWFzZWQgYnkgdGhlIHJlcHJvYmUgb25jZSBpdCBjb21wbGV0ZXMuXG4rXHQgKi9cbitcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuK1x0XHRyZXR1cm47XG4rXHRnZXRfZGV2aWNlKGRldik7XG4rXHRrbyA9IG14bDg2Mnh4X3JlcHJvYmVfYWxsb2MoZGV2KTtcbitcdGlmICgha28pIHtcbitcdFx0cHV0X2RldmljZShkZXYpO1xuK1x0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZrby1cdTAwM2V3b3JrKTtcbit9XG4rXG4rLyogRGV0ZWN0IE1DVWJvb3QgcmVzY3VlIG1vZGUgb3ZlciBjbGF1c2UtMjIgU01ESU8gYWxvbmUsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1bGVcbisgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUFxuKyAqIGZpcm13YXJlIGFuc3dlcnMpLiBBIHNjcmF0Y2ggd3JpdGUgdG8gQUREUi9EQVRBIG11c3QgbGF0Y2ggb3IgdGhlIGNoaXAgaXNcbisgKiBhYnNlbnQgKC1FTk9ERVYpOyBTVEFUIHRoZW4gY2xhc3NpZmllcyB0aGUgc3RhdGUsIHBva2VkIGRlc3RydWN0aXZlbHkgb25seVxuKyAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6XG4rICpcbisgKiAgLSAweGMzM2M6IGZsYXNobGVzcyBsb29wLCByZWFkeS5cbisgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLlxuKyAqICAtIG90aGVyIG5vbi16ZXJvOiBydW5uaW5nIGZpcm13YXJlLCBsZWZ0IHVucG9rZWQuXG4rICogIC0gMDogd2VkZ2VkIHJlY2VpdmUgbG9vcCwgaWYgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBkcmFpbnMgYmFjayB0byAwLlxuKyAqXG4rICogUmV0dXJuOiBNWEw4NjJYWF9JTl9SRVNDVUUsIE1YTDg2MlhYX05PVF9SRVNDVUUsIG9yIG5lZ2F0aXZlICgtRU5PREVWL1NNRElPKS5cbisgKi9cbitpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuK3tcbitcdGludCBzdGF0LCBkYXQsIHJldCwgcmIsIGEsIGQ7XG4rXG4rXHQvKiByZXNjdWVfcmVhZHkgZ2F0ZXMgZmxhc2hpbmc7IGEgd2VkZ2VkIGxvYWRlciBuZWVkcyB0aGUgZHJhaW4gZmlyc3QuICovXG4rXHRwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSA9IGZhbHNlO1xuK1xuK1x0LyogUHJlc2VuY2U6IGEgbGl2ZSBjaGlwIGxhdGNoZXMgdGhlIHNjcmF0Y2ggd3JpdGUsIGFuIGFic2VudCBvbmUgZmxvYXRzLiAqL1xuK1x0YSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuK1x0XHRcdFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTtcbitcdGlmIChhIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gYTtcbitcdGQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbitcdFx0XHRcdCBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCk7XG4rXHRpZiAoZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGQ7XG4rXHRhID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUik7XG4rXHRpZiAoYSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGE7XG4rXHRkID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XG4rXHRpZiAoZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGQ7XG4rXHRpZiAoKHUxNilhICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BIHx8XG4rXHQgICAgKHUxNilkICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4rXHRpZiAoc3RhdCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHN0YXQ7XG4rXG4rXHQvKiBGbGFzaGxlc3MtZG93bmxvYWQgbG9vcCAoTXhMODYyODFTIHRpZXIpOiB0aGlzIGRyaXZlciBkb2VzIG5vdFxuK1x0ICogc3VwcG9ydCBpdCAtLSB0aGUgY29uc29sZSBmbGFzaCBwYXRoIGV4cGVjdHMgUkVBRFkuIFRyZWF0IGl0IGFzIGFuXG4rXHQgKiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLCBsaWtlIGFueSBvdGhlciB1bnN1cHBvcnRlZCBzdGF0ZS5cbitcdCAqL1xuK1x0aWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFkpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0LyogQ29uc29sZSBsb29wIGF0IFJFQURZOiBjb25maXJtIHRoZSBsaXZlIG1haWxib3ggd2l0aCB0aGUgcmVnaXN0ZXItcmVhZFxuK1x0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXG4rXHQgKi9cbitcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKSB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuK1x0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9SRFJFRyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcbitcdFx0XHRcdFx0ICAgICAgIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbitcdFx0ZGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XG4rXHRcdGlmIChkYXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGRhdDtcbitcdFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuK1x0XHRpZiAoIXJiIFx1MDAyNlx1MDAyNiAodTE2KWRhdCAhPSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSykge1xuK1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuK1x0XHR9XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0LyogQW55IG90aGVyIG5vbi16ZXJvIHZhbHVlIGlzIGEgcnVubmluZyBmaXJtd2FyZSwgbm90IGEgbG9hZGVyLiAqL1xuK1x0aWYgKHN0YXQpXG4rXHRcdHJldHVybiBNWEw4NjJYWF9OT1RfUkVTQ1VFO1xuK1xuK1x0LyogU1RBVCA9PSAwOiBhIHdlZGdlZCByZWNlaXZlIGxvb3AgY29uc3VtZXMgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBiYWNrXG4rXHQgKiB0byAwIChmZWVkIG9uZSBEQVRBIHdvcmQgZmlyc3QsIGxpa2UgYSBkcmFpbiBjaHVuaykuXG4rXHQgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbitcdGlmICghcmIpXG4rXHRcdHJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7XG4rXG4rXHRyZXR1cm4gLUVOT0RFVjtcbit9XG4rXG4rLyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbitzdHJ1Y3QgbXhsODYyeHhfZndfaGRyIHtcbitcdF9fbGUzMiBpbWFnZV90eXBlO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMTtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8xO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMjtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4rXHRcdFx0XHQgICB1MzIgKnBheWxvYWRfc2l6ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7XG4rXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcbitcdGNvbnN0IHU4ICpwYXlsb2FkO1xuK1x0dTMyIGNyYztcbitcbitcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4rXHRwYXlsb2FkID0gZnctXHUwMDNlZGF0YSArIE1YTDg2MlhYX0ZXX0hEUl9TSVpFO1xuK1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbitcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX3NpemVfMik7XG4rXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4rXHQgICAgdG90YWwgXHUwMDNlIGZ3LVx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCF0b3RhbCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHNpemUxKSB7XG4rXHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChzaXplMikge1xuK1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICsgc2l6ZTEsIHNpemUyKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAyIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbitcdFx0XHRcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcbit7XG4rXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcbitcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gamlmZmllcyAtIDE7XG4rXHR1MTYgd29yZCwgZmRhdGE7XG4rXHRpbnQgcmV0LCBpO1xuK1xuK1x0LyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqL1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcbitcdFx0XHRcdFx0ZmFsc2UsIGZhbHNlKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFwiZmxhc2g6IEZXX1VQREFURSBjb21tYW5kIGZhaWxlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIldhaXRpbmcgZm9yIGJvb3Rsb2FkZXJcIiwgMCwgMCk7XG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdC8qIEZhaWx1cmVzIGZyb20gaGVyZSBvbiBtdXN0IGdvIHRocm91Z2ggZW5kX21hZ2ljIHNvIE1DVWJvb3RcbitcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4rXHQgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCArIDEsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRnb3RvIGVuZF9tYWdpYztcbitcdH1cbitcbitcdC8qIFN0ZXAgNDogdHJhbnNmZXIgaW1hZ2UgaGVhZGVyICovXG4rXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwiRXJhc2luZyBmbGFzaFwiLCAwLCAwKTtcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkrKykge1xuK1x0XHR3b3JkID0gZnctXHUwMDNlZGF0YVtpICogMl0gfFxuK1x0XHQgICAgICAgKCh1MTYpZnctXHUwMDNlZGF0YVtpICogMiArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHQvKiB0aGUgYnl0ZSBjb3VudCBpbiBTVEFUIHRyaWdnZXJzIHRoZSBlcmFzZSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHQgICBNWEw4NjJYWF9GV19IRFJfU0laRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdC8qIEFDSyBpcyBieXRlIGNvdW50ICsgMSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSArIDEsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0fVxuK1xuK1x0LyogU3RlcCA2OiB0cmFuc2ZlciBwYXlsb2FkICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0d2hpbGUgKGlkeCBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4rXHRcdGlmIChpZHggKyAxIFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcbitcdFx0XHRmZGF0YSA9IHBheWxvYWRbaWR4XSB8XG4rXHRcdFx0XHQoKHUxNilwYXlsb2FkW2lkeCArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0XHRpZHggKz0gMjtcbitcdFx0XHRkYXRhX3dyaXR0ZW4gKz0gMjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRmZGF0YSA9IHBheWxvYWRbaWR4XTtcbitcdFx0XHRpZHgrKztcbitcdFx0XHRkYXRhX3dyaXR0ZW4rKztcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgZmRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1x0XHR3b3JkX2lkeCsrO1xuK1xuK1x0XHRpZiAoaWR4IFx1MDAzZT0gcGF5bG9hZF9zaXplKSB7XG4rXHRcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0LyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi9cbitcdFx0aWYgKHdvcmRfaWR4ID09IE1YTDg2MlhYX0ZXX0JBTktfSEFMRikge1xuK1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuK1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX0ZXX1NCMV9BRERSKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIHdyaXRlX2VycjtcbitcdFx0fSBlbHNlIGlmICh3b3JkX2lkeCBcdTAwM2U9IE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0UpIHtcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbitcdFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFwiZmxhc2g6IHdyaXRlIHRpbWVvdXQgYXQgJXUvJXU6ICVwZVxcblwiLFxuK1x0XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbitcdFx0XHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0XHRcdH1cbitcdFx0XHR3b3JkX2lkeCA9IDA7XG4rXHRcdFx0ZGF0YV93cml0dGVuID0gMDtcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0XHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkge1xuK1x0XHRcdFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIkZsYXNoaW5nXCIsIGlkeCxcbitcdFx0XHRcdFx0XHQgICAgICBwYXlsb2FkX3NpemUpO1xuK1x0XHRcdFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0fVxuK1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIkZsYXNoaW5nXCIsIHBheWxvYWRfc2l6ZSwgcGF5bG9hZF9zaXplKTtcbitcdGdvdG8gZW5kX21hZ2ljO1xuK1xuK3dyaXRlX2VycjpcbitcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldiwgXCJmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcXG5cIixcbitcdFx0RVJSX1BUUihyZXQpKTtcbitlbmRfbWFnaWM6XG4rXHQvKiByZWJvb3QgTUNVYm9vdCBldmVuIGFmdGVyIGEgZmFpbGVkIHRyYW5zZmVyICovXG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuK1x0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0Y2hhciBidWZbMTZdO1xuK1x0aW50IHJldDtcbitcbitcdC8qIE5vIGNoaXAtaWQvcmV2aXNpb24gaW4gTUNVYm9vdCAobmVlZHMgdGhlIGZpcm13YXJlIE1NRCBtYWlsYm94KS4gVGhlXG4rXHQgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlIFwicmVhZHkgdG8gZmxhc2hcIiBzaWduYWw6IHJlcG9ydCBpdCBvbmx5XG4rXHQgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbitcdFx0aWYgKCFSRUFEX09OQ0UocHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkpKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiV1LiV1LiV1XCIsXG4rXHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuK1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwiZndcIiwgYnVmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dChyZXEsIFwiZndcIiwgYnVmKTtcbitcdH1cbitcbitcdC8qIEEgMCBwYXJ0IG51bWJlciBtZWFucyB0aGUgQ0hJUCBJRCByZWFkIGZhaWxlZCBvciB0aGUgcGFydCBpc1xuK1x0ICogdW5mdXNlZDsgb21pdCBpdCByYXRoZXIgdGhhbiBwdWJsaXNoIGEgYm9ndXMgXCIwMDAwXCIgdGhhdCBmd3VwZFxuK1x0ICogd291bGQgbWF0Y2ggZmlybXdhcmUgYWdhaW5zdCAtLSBpdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIGRyaXZlclxuK1x0ICogbmFtZS5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlYXNpY19pZCkge1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiUwNFhcIiwgcHJpdi1cdTAwM2Vhc2ljX2lkKTtcbitcdFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcbitcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbitcdFx0XHRcdFx0XHQgICAgIGJ1Zik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldVwiLCBwcml2LVx1MDAzZWFzaWNfcmV2KTtcbitcdFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcbitcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19SRVYsXG4rXHRcdFx0XHRcdFx0ICAgICBidWYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiV1LiV1LiV1XCIsXG4rXHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbitcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4rXG4rXHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwiZndcIiwgYnVmKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi9cbitcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0KHJlcSwgXCJmd1wiLCBidWYpO1xuK31cbitcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MzIgcGF5bG9hZF9zaXplO1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiY29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy1cdTAwM2VmdywgXHUwMDI2cGF5bG9hZF9zaXplKTtcbitcdGlmIChyZXQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdC8qIFJlZnVzZSB0byBmbGFzaCB3aGlsZSB0aGUgYmFja2dyb3VuZCBzZWxmLWhlYWwgaXMgc3RpbGwgZHJhaW5pbmcuICovXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSBcdTAwMjZcdTAwMjYgIVJFQURfT05DRShwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwic3dpdGNoIGlzIHJlY292ZXJpbmcgYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJldHJ5IHNob3J0bHlcIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4rXHQvKiBUaGUgcmVmZXJlbmNlcyB0aGUgcmVwcm9iZSB3b3JrIG5lZWRzIHRvIHJlc3RvcmUgbm9ybWFsIG9wZXJhdGlvblxuK1x0ICogbXVzdCBiZSBoZWxkIGJlZm9yZSB0aGUgc3dpdGNoIGlzIGRpc3R1cmJlZDsgdGhlIHdvcmsgaXRzZWxmIGlzXG4rXHQgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLlxuK1x0ICovXG4rXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRnZXRfZGV2aWNlKGRzLVx1MDAzZWRldik7XG4rXG4rXHQvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIGJlZm9yZSBkaXN0dXJiaW5nIHRoZSBzd2l0Y2gsIHNvIGFuXG4rXHQgKiAtRU5PTUVNIGhlcmUgY2Fubm90IHN0cmFuZCBpdCBmbGFzaGVkIGJ1dCBuZXZlciByZXByb2JlZC5cbitcdCAqL1xuK1x0a28gPSBteGw4NjJ4eF9yZXByb2JlX2FsbG9jKGRzLVx1MDAzZWRldik7XG4rXHRpZiAoIWtvKSB7XG4rXHRcdHB1dF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbitcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldixcbitcdFx0XHQgXCJmbGFzaDogZmxhc2hpbmcgc3dpdGNoIHZpYSBNQ1Vib290IHJlc2N1ZSBtb2RlXFxuXCIpO1xuK1x0ZWxzZVxuK1x0XHRkZXZfaW5mbyhkcy1cdTAwM2VkZXYsIFwiZmxhc2g6IHJ1bm5pbmcgZmlybXdhcmUgJXUuJXUuJXVcXG5cIixcbitcdFx0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWlub3IsXG4rXHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4rXG4rXHQvKiBDbG9zZSBwb3J0cyB3aGlsZSB0aGUgZmlybXdhcmUgaXMgc3RpbGwgYWxpdmUgc28gdGhlIERTQVxuK1x0ICogY29yZSdzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzXG4rXHQgKiBzbyB1c2Vyc3BhY2UgY2Fubm90IHJlb3BlbiB0aGVtIGR1cmluZyB0aGUgZmxhc2guIFRoZVxuK1x0ICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC5cbitcdCAqL1xuK1x0cnRubF9sb2NrKCk7XG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbitcdFx0aWYgKGRwLVx1MDAzZXVzZXIpIHtcbitcdFx0XHRkZXZfY2xvc2UoZHAtXHUwMDNldXNlcik7XG4rXHRcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChkcC1cdTAwM2V1c2VyKTtcbitcdFx0fVxuK1x0fVxuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpXG4rXHRcdGRldl9jbG9zZShkcC1cdTAwM2Vjb25kdWl0KTtcbitcdC8qIFRoZSBicmlkZ2UgZGVmZXJzIHRoZSBTVFAgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgY2xvc2luZ1xuK1x0ICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuXG4rXHQgKi9cbitcdHN3aXRjaGRldl9kZWZlcnJlZF9wcm9jZXNzKCk7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcbitcdHByaXYtXHUwMDNlYmxvY2tfaG9zdCA9IHRydWU7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1xuK1x0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncyk7XG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VzdGF0c193b3JrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmspO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpKyspXG4rXHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspO1xuK1xuK1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfZmlybXdhcmUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBwYXlsb2FkX3NpemUsXG4rXHRcdFx0XHQgICAgICBkcy1cdTAwM2VkZXZsaW5rKTtcbitcdGlmIChyZXQpXG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXCIpO1xuK1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2ssXG4rXHRcdFx0XHQgIE1ESU9fTVVURVhfTkVTVEVEKTtcbitcdFx0cHJpdi1cdTAwM2VibG9ja19ob3N0ID0gZmFsc2U7XG4rXHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBmYWxzZTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdFx0LyogUmVmcmVzaCB0aGUgY2FjaGVkIHZlcnNpb25zIHNvIHRoZSBmbGFzaCB1cGRhdGUgb25seVxuK1x0XHQgKiBjb21wbGV0ZXMgb25jZSB0aGUgbmV3IGZpcm13YXJlIGlzIGNvbmZpcm1lZCBydW5uaW5nIGFuZFxuK1x0XHQgKiBkZXZsaW5rIGRldiBpbmZvIHJlcG9ydHMgaXQuIE11c3QgaGFwcGVuIGJlZm9yZSBzZXR0aW5nXG4rXHRcdCAqIHNraXBfdGVhcmRvd24sIHdoaWNoIGRpc2NhcmRzIGFsbCBmaXJtd2FyZSBBUEkgcmVhZHMuXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIm5ldyBmaXJtd2FyZSBkaWQgbm90IGJlY29tZSByZWFkeVwiKTtcbitcdH1cbitcbitcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4rXHRwcml2LVx1MDAzZXNraXBfdGVhcmRvd24gPSB0cnVlO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdC8qIEtpY2sgb2ZmIHRoZSByZXByb2JlIGxhc3Q7IHRoZSBraWNrb2ZmIHdhcyBhbGxvY2F0ZWQgdXAgZnJvbnQgYW5kXG4rXHQgKiBpdHMgbW9kdWxlIGFuZCBkZXZpY2UgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLlxuK1x0ICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmtvLVx1MDAzZXdvcmspO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgKzEsMjAgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuK1xuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXG4rI2RlZmluZSBfX01YTDg2MlhYX0ZXX0hcbitcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbitcbitzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbitzdHJ1Y3Qgd29ya19zdHJ1Y3Q7XG4rXG4raW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4rdm9pZCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXG4rI2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uMmRiZDA3NGMwZmUyNmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiArMTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWNtZC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWZ3LmhcIlxuICNpbmNsdWRlIFwibXhsODYyeHgtaG9zdC5oXCJcbiBcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXHRcdFx0QklUKDE1KVxuQEAgLTM0MCw2ICszNDIsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSxcbiBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4gXG4rXHRpZiAocHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duKSB7XG4rXHRcdHJldCA9IHJlYWQgPyAtRU5PREVWIDogMDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZWJsb2NrX2hvc3QgXHUwMDI2XHUwMDI2IGNtZCAhPSBTWVNfTUlTQ19GV19VUERBVEUpIHtcbitcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdG1heCA9IChzaXplICsgMSkgLyAyO1xuIFxuIFx0cmV0ID0gbXhsODYyeHhfYnVzeV93YWl0KHByaXYpO1xuQEAgLTQ5NSwxMiArNTEyLDQ5IEBAIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUdcdFx0MHgxZlxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLXHQweGZmZjBcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXHRcdDB4MDAwZlxuK1xuK2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcilcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcbitcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0aW50IHBoeSA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuK1x0XHRcdCAgICAgIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyxcbitcdFx0XHRcdCAgICAgIHZhbCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiB7XG4gXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmssIG14bDg2Mnh4X2NyY19lcnJfd29ya19mbik7XG4rXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VyZXNjdWVfaGVhbF93b3JrLCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKTtcbiB9XG4gXG4gdm9pZCBteGw4NjJ4eF9ob3N0X3NodXRkb3duKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIHtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmspO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgKzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSxcbiBcdG14bDg2Mnh4X2FwaV93cmFwKGRldiwgY21kLCBcdTAwMjYoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKVxuIFxuIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4raW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKTtcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICs0MDYsOCBAQCBteGw4NjJ4eF9waHlsaW5rX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFxuIFx0c3dpdGNoIChwb3J0KSB7XG4gXHRjYXNlIDkgLi4uIDE2OlxuK1x0XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCJTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuaW5kZXggNDVkMjM3YjNhNDBmMTAuLjhkMjE3NDdjZGYxNWUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFwibXhsODYyeHguaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1hcGkuaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1jbWQuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1mdy5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1waHlsaW5rLmhcIlxuIFxuQEAgLTcxLDYgKzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXhsODYyeHhfcm1vbl9yYW5nZXNbXSA9IHtcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1RJTUVPVVRfTVNcdDEwMDAwXG4gI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9QT0xMX01TXHRcdDEwMFxuIFxuKy8qIENoaXAgSUQgcmVnaXN0ZXJzLCByZWFkIHZpYSBTWVNfTUlTQ19SRUdfUkQgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MXHRcdDB4YzBkMjg4ODRcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NXHRcdDB4YzBkMjg4ODhcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MXHRcdEdFTk1BU0soMTUsIDEyKVxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fUE5VTU1cdFx0R0VOTUFTSygxMSwgMClcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT05cdEdFTk1BU0soMTQsIDEyKVxuK1xuICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMXHRcdDB4ZTAwXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTXHRcdDB4ZTEyXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTXHRcdDB4ZTEzXG5AQCAtMjIyLDcgKzIzMCw0NiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BoeV93cml0ZV9jNDVfbWlpX2J1cyhzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcixcbiBcdHJldHVybiBteGw4NjJ4eF9waHlfd3JpdGVfbW1kKGJ1cy1cdTAwM2Vwcml2LCBhZGRyLCBkZXZhZGQsIHJlZ251bSwgdmFsKTtcbiB9XG4gXG4tc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbisvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElEXG4rICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZVxuKyAqIGNhY2hlZCBhdCBzZXR1cCBhbmQgbGVmdCB6ZXJvIHdoZW4gdGhlIHN3aXRjaCBpcyBpbiByZXNjdWUgbW9kZS5cbisgKi9cbitzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyByZWcgPSB7fTtcbitcdHUxNiBjaGlwaWRfbCwgY2hpcGlkX207XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTCk7XG4rXHRyZXQgPSBNWEw4NjJYWF9BUElfUkVBRChwcml2LCBTWVNfTUlTQ19SRUdfUkQsIHJlZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0Y2hpcGlkX2wgPSBsZTMyX3RvX2NwdShyZWcudmFsKTtcbitcbitcdHJlZy5hZGRyID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfQ0hJUElEX00pO1xuK1x0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdGNoaXBpZF9tID0gbGUzMl90b19jcHUocmVnLnZhbCk7XG4rXG4rXHRwcml2LVx1MDAzZWFzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8XG4rXHRcdFx0RklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NLCBjaGlwaWRfbSkgXHUwMDNjXHUwMDNjIDQ7XG4rXHRwcml2LVx1MDAzZWFzaWNfcmV2ID0gRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT04sIGNoaXBpZF9tKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBteGw4NjJ4eF93YWl0X3JlYWR5IC0gd2FpdCBmb3IgdGhlIHN3aXRjaCBmaXJtd2FyZSB0byBiZWNvbWUgb3BlcmF0aW9uYWxcbisgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2VcbisgKlxuKyAqIFBvbGwgdGhlIGZpcm13YXJlIHVudGlsIGl0IHJlcG9ydHMgaXRzIHZlcnNpb24gYW5kIGFjY2VwdHNcbisgKiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLCB0aGVuIGNhY2hlIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjaGlwIElELlxuKyAqIFRha2VzIGF0IGxlYXN0IHR3byBzZWNvbmRzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuKyAqL1xuK2ludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gdmVyID0ge307XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcywgdGltZW91dDtcbkBAIC0yNTQsNiArMzAxLDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciA9IHZlci5pdl9tYWpvcjtcbiBcdFx0cHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yID0gdmVyLml2X21pbm9yO1xuIFx0XHRwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24gPSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pO1xuK1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9yZWFkX2NoaXBfaWQocHJpdik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0ZGV2X3dhcm4oZHMtXHUwMDNlZGV2LCBcImZhaWxlZCB0byByZWFkIGNoaXAgSUQ6ICVwZVxcblwiLFxuK1x0XHRcdFx0IEVSUl9QVFIocmV0KSk7XG4gXHRcdHJldHVybiAwO1xuIFxuIG5vdF9yZWFkeV95ZXQ6XG5AQCAtNjIyLDE1ICs2NzQsNDkgQEAgc3RhdGljIGludCBteGw4NjJ4eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpbnQgbl91c2VyX3BvcnRzID0gMCwgbWF4X3ZsYW5zO1xuIFx0aW50IGluZ3Jlc3NfZmluYWxzLCB2aWRfcnVsZXM7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuLVx0aW50IHJldCwgaTtcbitcdGludCByZXQsIGksIHJlc2N1ZTtcbiBcbi1cdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdC8qIERldGVjdCB0aGUgbG9hZGVyIG92ZXIgU0IgUERJIGZpcnN0OiBpdCBuZWVkcyBubyBmaXJtd2FyZSwgdW5saWtlIHRoZVxuK1x0ICogQzQ1IEFQSSAobXhsODYyeHhfcmVzZXQvd2FpdF9yZWFkeSkgd2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vbmVcbitcdCAqIGFuc3dlcnMuIFRvdWNoIEM0NSBvbmx5IG9uY2UgcmVzY3VlIGlzIHJ1bGVkIG91dC5cbitcdCAqL1xuK1x0cmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xuK1x0aWYgKHJlc2N1ZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJlc2N1ZTtcbiBcbi1cdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXNjdWUgPT0gTVhMODYyWFhfTk9UX1JFU0NVRSkge1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qIHRoZSByZXNldCBtYXkgb25seSBub3cgaGF2ZSB0cmlnZ2VyZWQgcmVzY3VlIG1vZGUgKi9cbitcdFx0XHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4rXHRcdFx0aWYgKHJlc2N1ZSBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXNjdWU7XG4rXHRcdFx0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IHJlc2N1ZTtcbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSkge1xuK1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbitcdFx0XHRcdCBcInN3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cIik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogRHJhaW4gdGhlIHdlZGdlZCBkb3dubG9hZCBpbiB0aGUgYmFja2dyb3VuZCBzbyBpdFxuK1x0XHRcdCAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZVxuK1x0XHRcdCAqIGF2YWlsYWJsZSBvbmNlIHJlYWR5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbitcdFx0XHRcdCBcInN3aXRjaCBpbiBNQ1Vib290IHdpdGggYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJlY292ZXJpbmcgaW4gYmFja2dyb3VuZFxcblwiKTtcbitcdFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuK1x0XHR9XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNlcmRlc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpKyspXG5AQCAtNzE1LDExICs4MDEsMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0cmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSlcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAlZFxcblwiLCBwb3J0KTtcbiB9XG5AQCAtMTMzNyw2ICsxNDMzLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XG4gXHRpbnQgcmV0O1xuIFxuK1x0LyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdFxuK1x0ICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuXG4rXHQgKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcbitcbiBcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMTU3Miw2ICsxNjc0LDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRldGhlcl9hZGRyX2NvcHkocXBhcmFtLm1hYywgbWRiLVx1MDAzZWFkZHIpO1xuIFxuIFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgTVhMODYyWFhfTUFDX1RBQkxFRU5UUllRVUVSWSwgcXBhcmFtKTtcbitcdC8qIC1FTk9ERVY6IHRoZSBmaXJtd2FyZSBhbmQgaXRzIE1BQyB0YWJsZSBhcmUgZ29uZSwgbm90aGluZyBsZWZ0XG4rXHQgKiB0byBkZWxldGVcbitcdCAqL1xuK1x0aWYgKHJldCA9PSAtRU5PREVWKVxuK1x0XHRyZXR1cm4gMDtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTYyOCw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybjtcbitcbiBcdHN3aXRjaCAoc3RhdGUpIHtcbiBcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XG4gXHRcdHBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTtcbkBAIC0yMDE1LDYgKzIxMjUsMTIgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc3RhdHNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBwcml2LVx1MDAzZWRzO1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiBcbitcdC8qIEEgZ2V0X3N0YXRzNjQoKSByZS1hcm0gY2FuIHJhY2UgdGhlIGZsYXNoIHRlYXJkb3duJ3MgV09SS19TVE9QUEVEXG4rXHQgKiBzZXQgYW5kIGNhbmNlbDsgYmFpbCBoZXJlIHNvIGEgc3RyYXkgcG9sbCBuZXZlciBydW5zIGR1cmluZyBhIGZsYXNoLlxuK1x0ICovXG4rXHRpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcylcbiBcdFx0bXhsODYyeHhfc3RhdHNfcG9sbChkcywgZHAtXHUwMDNlaW5kZXgpO1xuIFxuQEAgLTIwODYsNiArMjIwMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfcGF1c2Vfc3RhdHMgPSBteGw4NjJ4eF9nZXRfcGF1c2Vfc3RhdHMsXG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBteGw4NjJ4eF9nZXRfcm1vbl9zdGF0cyxcbiBcdC5nZXRfc3RhdHM2NCA9IG14bDg2Mnh4X2dldF9zdGF0czY0LFxuK1x0LmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LFxuK1x0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG5pbmRleCA0MzJhNWYzZjJlMDhlNi4uMTI5OTg1ZjJiYmYzZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbkBAIC0xNCw2ICsxNCwxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbiAjZGVmaW5lIE1YTDg2MlhYX0ZJUlNUX1NFUkRFU19QT1JUXHQ5XG4gI2RlZmluZSBNWEw4NjJYWF9TRVJERVNfU0xPVFNcdFx0NFxuIFxuKy8qIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpIHJldHVybiBjb2RlcyAobmVnYXRpdmUgdmFsdWVzIGFyZSBlcnJvcnMpICovXG4rI2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFXHRcdDBcbisjZGVmaW5lIE1YTDg2MlhYX0lOX1JFU0NVRVx0XHQxXG4rXG4gI2RlZmluZSBNWEw4NjJYWF9ERUZBVUxUX0JSSURHRVx0XHQwXG4gI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFU1x0XHQ0OFxuICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRV9QT1JUU1x0MTI4XG5AQCAtMzAzLDYgKzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7XG4gICogICAgICAgICAgICAgICAgICAgICAgZmxvb2RpbmcpXG4gICogQGZ3X3ZlcnNpb246ICAgICAgICAgY2FjaGVkIGZpcm13YXJlIHZlcnNpb24sIHBvcHVsYXRlZCBhdCBwcm9iZSBhbmRcbiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKVxuKyAqIEBhc2ljX2lkOiAgICAgICAgICAgIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycyxcbisgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayBcImFzaWMuaWRcIiBmaXhlZCB2ZXJzaW9uXG4rICogQGFzaWNfcmV2OiAgICAgICAgICAgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXG4rICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgXCJhc2ljLnJldlwiIGZpeGVkIHZlcnNpb25cbiAgKiBAc2VyZGVzX3BvcnRzOiAgICAgICBTZXJEZXMgaW50ZXJmYWNlcyBpbmNsLiBzdWItaW50ZXJmYWNlcyBpbiBjYXNlIG9mXG4gICogICAgICAgICAgICAgICAgICAgICAgMTBHX1FYR01JSSBvciBRU0dNSUlcbiAgKiBAc2VyZGVzX3JlZmNvdW50OiAgICBwZXItWFBDUyBjb3VudCBvZiBzdWItcG9ydHMgZW5hYmxlZCBieSBwaHlsaW5rO1xuQEAgLTMxOSw2ICszMjcsMTUgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xuICAqIEBldmxhbl9pbmdyZXNzX3NpemU6IHBlci1wb3J0IGluZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXG4gICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemVcbisgKiBAYmxvY2tfaG9zdDogICAgICAgICByZWplY3QgZmlybXdhcmUgQVBJIGNvbW1hbmRzIChleGNlcHQgRldfVVBEQVRFKVxuKyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoXG4rICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93blxuKyAqICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZCBieSB0aGUgcG9zdC1mbGFzaCByZXByb2JlXG4rICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kcyBmYWlsIGZhc3QsXG4rICogICAgICAgICAgICAgICAgICAgICAgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3NcbisgKiBAcmVzY3VlX3JlYWR5OiAgICAgICAocmVzY3VlX21vZGUpIGxvYWRlciBpcyBhdCBhIGNsZWFuIFJFQURZIGFuZCB3aWxsIGFjY2VwdFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGEgZmxhc2g7IGZhbHNlIHdoaWxlIHJlc2N1ZV9oZWFsX3dvcmsgaXMgZHJhaW5pbmdcbisgKiBAcmVzY3VlX2hlYWxfd29yazogICBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBkcmFpbmluZyBhIHdlZGdlZCBkb3dubG9hZCB0byBSRUFEWVxuICAqIEBzdGF0c193b3JrOiAgICAgICAgIHBlcmlvZGljIHdvcmsgaXRlbSB0aGF0IHBvbGxzIFJNT04gaGFyZHdhcmUgY291bnRlcnNcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xuICAqL1xuQEAgLTMyNiw5ICszNDMsMTIgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXYge1xuIFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuIFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGNyY19lcnJfd29yaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNjdWVfaGVhbF93b3JrO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHUxNiBkcm9wX21ldGVyO1xuIFx0c3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gZndfdmVyc2lvbjtcbitcdHUxNiBhc2ljX2lkO1xuK1x0dTggYXNpY19yZXY7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfcGNzIHNlcmRlc19wb3J0c1s4XTtcbiBcdGludCBzZXJkZXNfcmVmY291bnRbMl07XG4gXHRzdHJ1Y3QgbXV0ZXggc2VyZGVzX2xvY2s7XG5AQCAtMzM3LDcgKzM1NywxMyBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XG4gXHR1MTYgZXZsYW5faW5ncmVzc19zaXplO1xuIFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xuIFx0dTE2IHZmX2Jsb2NrX3NpemU7XG4rXHRib29sIGJsb2NrX2hvc3Q7XG4rXHRib29sIHNraXBfdGVhcmRvd247XG4rXHRib29sIHJlc2N1ZV9tb2RlO1xuK1x0Ym9vbCByZXNjdWVfcmVhZHk7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7XG4gfTtcbiBcbitpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuK1xuICNlbmRpZiAvKiBfX01YTDg2MlhYX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uYzllMTkzNDhkZTYxOTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuKysrIGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC0xMTcwLDYgKzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuIFx0aW50XHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXHRpbnRcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHRcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFx0aW50XHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uZDYwMjIyNjdhODM5Y2QgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL2RldmxpbmsuY1xuKysrIGIvbmV0L2RzYS9kZXZsaW5rLmNcbkBAIC0yMCw2ICsyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4rc3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuK1xuK1x0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZShkcywgcGFyYW1zLCBleHRhY2spO1xuK31cbitcbiBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbylcbkBAIC0xNjcsMTggKzE3NiwzMSBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsXG4gXHRcdFx0XHRcdFx0XHRwX21heCk7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xuLVx0LmluZm9fZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcbi1cdC5zYl9wb29sX2dldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXG4tXHQuc2JfcG9vbF9zZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxuLVx0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxuLVx0LnNiX3BvcnRfcG9vbF9zZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfc2V0LFxuLVx0LnNiX3RjX3Bvb2xfYmluZF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LFxuLVx0LnNiX3RjX3Bvb2xfYmluZF9zZXRcdFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LFxuLVx0LnNiX29jY19zbmFwc2hvdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19zbmFwc2hvdCxcbi1cdC5zYl9vY2NfbWF4X2NsZWFyXHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcbi1cdC5zYl9vY2NfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LFxuKy8qIFRoZSBkZXZsaW5rIGNvcmUgcmVqZWN0cyBmbGFzaCByZXF1ZXN0cyB1cCBmcm9udCB3aGVuIHRoZSBmbGFzaF91cGRhdGVcbisgKiBvcCBpcyBhYnNlbnQsIGJlZm9yZSBmZXRjaGluZyB0aGUgZmlybXdhcmUgZmlsZSBmcm9tIHVzZXJzcGFjZS4gT25seVxuKyAqIGluc3RhbGwgdGhlIG9wIGZvciBzd2l0Y2hlcyB3aG9zZSBkcml2ZXIgaW1wbGVtZW50cyBpdCwgc28gdGhhdFxuKyAqIHVuc3VwcG9ydGVkIHJlcXVlc3RzIGtlZXAgZmFpbGluZyBlYXJseS5cbisgKi9cbisjZGVmaW5lIERTQV9ERVZMSU5LX09QU1x0XHRcdFx0XHRcdFx0XFxcbitcdC5pbmZvX2dldFx0XHRcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXHRcdFxcXG4rXHQuc2JfcG9vbF9nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFx0XFxcbitcdC5zYl9wb29sX3NldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9zZXQsXHRcXFxuK1x0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFx0XFxcbitcdC5zYl9wb3J0X3Bvb2xfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCxcdFxcXG4rXHQuc2JfdGNfcG9vbF9iaW5kX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9nZXQsIFxcXG4rXHQuc2JfdGNfcG9vbF9iaW5kX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsIFxcXG4rXHQuc2Jfb2NjX3NuYXBzaG90XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFx0XFxcbitcdC5zYl9vY2NfbWF4X2NsZWFyXHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcdFxcXG4rXHQuc2Jfb2NjX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCwgXFxcbiBcdC5zYl9vY2NfdGNfcG9ydF9iaW5kX2dldFx0PSBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldCxcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHtcbitcdERTQV9ERVZMSU5LX09QU1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7XG4rXHREU0FfREVWTElOS19PUFNcbitcdC5mbGFzaF91cGRhdGVcdFx0XHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbiB9O1xuIFxuIGludCBkc2FfZGV2bGlua19wYXJhbV9nZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXG5AQCAtMzc4LDEyICs0MDAsMTYgQEAgdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gaW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcztcbiBcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiBcbitcdG9wcyA9IGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/IFx1MDAyNmRzYV9kZXZsaW5rX2ZsYXNoX29wc1xuK1x0XHRcdFx0XHQgICAgOiBcdTAwMjZkc2FfZGV2bGlua19vcHM7XG4rXG4gXHQvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhblxuIFx0ICogYWRkIGRwaXBlIHRhYmxlc1xuIFx0ICovXG4tXHRkbCA9IGRldmxpbmtfYWxsb2MoXHUwMDI2ZHNhX2Rldmxpbmtfb3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cdTAwM2VkZXYpO1xuK1x0ZGwgPSBkZXZsaW5rX2FsbG9jKG9wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtXHUwMDNlZGV2KTtcbiBcdGlmICghZGwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MTMuODkxNDY4NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE2MjY5MjAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJIGhhdmUgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoIGRyaXZlciwgYWRkaW5nIGZpcm13YXJlIGZsYXNoaW5nIGFuZCBkZXZsaW5rIHN1cHBvcnQuIEl0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBteGw4NjJ4eC1mdy5jYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYG14bDg2Mnh4LmNgLCBgbXhsODYyeHgtaG9zdC5jYCwgYG14bDg2Mnh4LXBoeWxpbmsuY2AsIGFuZCBgbmV0L2RzYS9kZXZsaW5rLmNgLiBCZWZvcmUgSSBkaXZlIGludG8gd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiAqcG9zc2libGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBza2lwcGluZyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggY29kZSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLlxuXG5GaXJzdCB0aG91Z2h0OiBpcyB0aGUgYG14bDg2Mnh4YCBhIFBDSWUgc3dpdGNoPyBOb3BlLCBpdCdzIGEgRFNBIHN3aXRjaCwgd2hpY2ggaXMgaW1wb3J0YW50LiBEU0Egc3dpdGNoZXMgYXJlIGNvbm5lY3RlZCB2aWEgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIGZyb20gdGhlIFBDSWUgc3dpdGNoZXMgbWVudGlvbmVkIGluIHRoZSBwcm9tcHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIERTQSBzd2l0Y2ggaXMgY29ubmVjdGVkLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCB1c2VzIE1ESU8gKGBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXZgKS4gTURJTyBpcyBhIHNlcmlhbCBidXMsIHVubGlrZSBQQ0llLlxuXG5Ob3csIHRoZSBNRElPIGRldmljZXMuLi4gYXJlIHRoZXkgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVtdWxhdGVkIG9yIGZ1enplZCB2aWEgc29tZSB2aXJ0dWFsIE1ESU8gYnVzPyBTeXprYWxsZXIgZG9lc24ndCB1c3VhbGx5IGVtdWxhdGUgc3BlY2lmaWMgTURJTyBEU0Egc3dpdGNoZXMgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBkcml2ZXIgb3IgaWYgaXQncyByZWFjaGFibGUgdmlhIHNvbWUgZ2VuZXJpYyBpbnRlcmZhY2UuIFRoZSBwcm9tcHQgY29udGludWVzIHRvIGNhdXRpb24gYWJvdXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cblxuU28sIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBgbXhsODYyeHhgIHJlYWNoYWJsZSBpbiBRRU1VPyBDYW4gSSBpbnN0YW50aWF0ZSBpdCBpbiBhIHdheSB0aGF0IHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aD8gSG93IHdvdWxkIEkgZ2V0IHRoaXMgdG8gd29yaz8gSSBrbm93IEkyQy9NRElPL1NQSSBkZXZpY2VzIGNhbiBzb21ldGltZXMgYmUgaW5zdGFudGlhdGVkIHZpYSBzeXNmcyBvciBuZXRsaW5rIGlmIHRoZXJlJ3MgYSB2aXJ0dWFsIGJ1cywgb3IgdmlhIGRldmljZSB0cmVlIG92ZXJsYXlzLiBTeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIEkyQy9TUEkgZGV2aWNlcywgYnV0IE1ESU8/IE5vdCBzdXJlIGFib3V0IHRoYXQuXG5cblRoZW4sIHRoZXJlJ3MgZGV2bGluay4gRGV2bGluayBjb21tYW5kcyBjYW4gYmUgc2VudCB0byAqYW55KiByZWdpc3RlcmVkIGRldmxpbmsgZGV2aWNlLiBIb3dldmVyLCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgaGFzIHRvICpwcm9iZSogYmVmb3JlIHRoZSBkZXZsaW5rIGRldmljZSBjYW4gYmUgcmVnaXN0ZXJlZCwgcmlnaHQ/IEFuZCB0aGUgZHJpdmVyIHByb2JlcyBvbiBhbiBNRElPIGJ1cy4gT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNgIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJvYmluZyBzZXF1ZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNDQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NToyNC4wNTQxNjI1NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NzIxMTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm14bDg2Mnh4X3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjE3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMjA4LVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIyMDk6c3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjIxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMzE4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXhsODYyeHhfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIzMTk6XFx0LnByb2JlICA9IG14bDg2Mnh4X3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIzMjAtXFx0LnJlbW92ZSA9IG14bDg2Mnh4X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MjQuMTYxODg5ODcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxMDg2NTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBgbXhsODYyeHhgIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1kaW9fZHJpdmVyYCwgc3BlY2lmaWNhbGx5IHRoZSBgbXhsODYyeHhgIG9uZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIGVmZmVjdGl2ZWx5IHByb2JlIGFuZCBmdXp6IHRoaXMgdGhpbmc/IEkga25vdyBTeXprYWxsZXIgY2FuIGhhbmRsZSBjZXJ0YWluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIGB2aGNpYCBmb3IgVVNCIG9yIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JrIGRldmljZXMsIGFuZCBldmVuIGBtYWM4MDIxMV9od3NpbWAuIEJ1dCBNRElPIGlzIHRyaWNreS4gSXQgbG9va3MgbGlrZSBzb21lIGRyaXZlcnMsIGxpa2UgYG1kaW8tYmNtLXVuaW1hY2AsIG1pZ2h0IGJlIHByb2JlYWJsZSB3aXRoIHNvbWUgZWZmb3J0LCBhbmQgaGFyZHdhcmUgRFNBIHN3aXRjaGVzIHR5cGljYWxseSByZXF1aXJlIGEgZGV2aWNlIHRyZWUsIHdoaWNoIFN5emthbGxlciBkb2Vzbid0IGR5bmFtaWNhbGx5IGhhbmRsZSBmb3IgTURJTyBkZXZpY2VzIHVubGVzcyBhIHZlcnkgc3BlY2lmaWMgXCJwc2V1ZG8tZGV2aWNlXCIgZXhpc3RzLlxuXG5Ob3csIEkgKmRvKiBzZWUgdGhhdCBTeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rXy4uLmAgd2hpY2ggY291bGQgYmUgdXNlZnVsLCBidXQgdGhhdCByZWxpZXMgb24gdGhlIGRldmljZSBiZWluZyAqcHJlc2VudCogaW4gdGhlIGZpcnN0IHBsYWNlLiBJZiB0aGUgYG14bDg2Mnh4YCBkZXZpY2UgaXNuJ3QgcHJlc2VudCwgdGhlIGBteGw4NjJ4eF9wcm9iZWAgZnVuY3Rpb24gd2lsbCBuZXZlciBiZSBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBjb2RlIHdpbGwgYWxzbyBiZSB1bnJlYWNoYWJsZS4gVGhhdCdzIGEgcHJvYmxlbS5cblxuSG1tLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhhdCBjb2RlIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmU/IEkgc2F3IHRoYXQgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgdXNlcyBNRElPIHJlYWRzIGFuZCB3cml0ZXMuIElmIHRoZSBoYXJkd2FyZSBpc24ndCB0aGVyZSwgaXQgc2hvdWxkIGZhaWwgd2l0aCBgLUVOT0RFVmAuIFRoYXQgY291bGQgYmUgYSBwb3NzaWJsZSBlbnRyeSBwb2ludCwgYnV0IGl0IHN0aWxsIG1lYW5zIHRoZXJlIGFyZSBkZXZpY2UgZGVwZW5kZW5jaWVzLiBFdmVuIGlmIEkgY291bGQgc29tZWhvdyBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlLCBpdCBzdGlsbCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgaGFyZHdhcmUgdmlhIE1ESU8uXG5cblRoaXMgZHJpdmVyIGlzIGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4LCBhICpzcGVjaWZpYyogaGFyZHdhcmUgc3dpdGNoLiBEb2VzIFFFTVUgZXZlbiBlbXVsYXRlIHRoaXM/IE5vLCBpdCBkb2Vzbid0LiBBbmQgdGhhdCdzIHRoZSBraWNrZXIuIFNpbmNlIEkgY2FuJ3QgZW11bGF0ZSB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGNvcmUgY29kZSBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBieSBTeXprYWxsZXIuXG5cblRoZXJlZm9yZSwgZm9yIG15IHB1cnBvc2VzLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJ3QgdGhlcmUuXG5cbkhvd2V2ZXIsIGxldCdzIGRvdWJsZS1jaGVjazsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC9kc2EvZGV2bGluay5jYCB0aGF0IHJlbGF0ZSB0byBgZGV2bGlua19mbGFzaF91cGRhdGVgLCBhbmQgdGhhdCdzIGdlbmVyaWMgRFNBIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIHRoZXJlLiBMZXQgbWUgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MzMuMzcyNzU3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTYzNzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc2FfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS9kZXZsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9kZXZsaW5rLmM9MTE9c3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuLS1cXG5uZXQvZHNhL2RldmxpbmsuYy0yMi1cXG5uZXQvZHNhL2RldmxpbmsuYzoyMzpzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXFxubmV0L2RzYS9kZXZsaW5rLmMtMjQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9kc2EvZGV2bGluay5jPTIwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX2ZsYXNoX29wcyA9IHtcXG5uZXQvZHNhL2RldmxpbmsuYy0yMDItXFx0RFNBX0RFVkxJTktfT1BTXFxubmV0L2RzYS9kZXZsaW5rLmM6MjAzOlxcdC5mbGFzaF91cGRhdGVcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcXG5uZXQvZHNhL2RldmxpbmsuYy0yMDQtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MzMuNDY4NDAwMzA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMTQ4ODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQYXRjaCBmb3IgRFNBIERldmxpbmsgRmxhc2ggVXBkYXRlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRzIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIHRvIGBuZXQvZHNhL2RldmxpbmsuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJcyB0aGlzIGEgY29tbW9uIG9wZXJhdGlvbiB3aXRoaW4gdGhlIERTQSB3b3JsZCwgb3IgaXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3dpdGNoIG9yIGZhbWlseSBvZiBzd2l0Y2hlcz8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgYW55IG90aGVyIERTQSBzd2l0Y2hlcyBjdXJyZW50bHkgdXRpbGl6ZSBgZGV2bGlua19mbGFzaF91cGRhdGVgIGZ1bmN0aW9uYWxpdHkuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBuZXcgYWRkaXRpb24uIEknbGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIGltcGxlbWVudGF0aW9ucyBvZiBgZGV2bGlua19mbGFzaF91cGRhdGVgIHdpdGhpbiBgc3RydWN0IGRzYV9zd2l0Y2hfb3BzYCBhY3Jvc3Mgb3RoZXIgZHJpdmVycy4gVGhhdCdsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgZm9sbG93cyBhbiBlc3RhYmxpc2hlZCBwYXR0ZXJuIG9yIGludHJvZHVjZXMgYSBub3ZlbCBhcHByb2FjaC4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlJ3MgaW1wbGljYXRpb25zIGZvciB0aGUgYnJvYWRlciBEU0EgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjQ1OjM3LjM4OTg5MTMzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4MDEwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYz0yMDU9c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtMjA3LXtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzoyMDg6XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtMjA5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jPTc3Mz1pbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYy04MzAtXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM6ODMxOmludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM6ODMyOlxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTgzMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oPTEzPWludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oLTE1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3Lmg6MTY6aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaDoxNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaC0xOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMTczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIyMDUtXFx0LmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIyMDY6XFx0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjIwNy19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NTozNy40OTk2OTc1ODJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc2NjMxNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIFBsdW1iaW5nOiBObyBGdXp6aW5nIE5lZWRlZCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgd2UncmUgYXQuIFRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpbiBgbmV0L2RzYS9kZXZsaW5rLmNgIGlzIG1pbm9yLCBqdXN0IGEgc2luZ2xlIGZ1bmN0aW9uIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLiBJdCBlc3NlbnRpYWxseSBzZXJ2ZXMgYXMgYSBicmlkZ2UsIGNhbGxpbmcgYSBkcml2ZXItc3BlY2lmaWMgZnVuY3Rpb24gYGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAuIFRoZSBwcm9ibGVtPyBPbmx5IHRoZSBgbXhsODYyeHhgIGRyaXZlciBhY3R1YWxseSAqaW1wbGVtZW50cyogdGhhdCBgZGV2bGlua19mbGFzaF91cGRhdGVgIGNhbGxiYWNrLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIGEgbW9yZSBhY2Nlc3NpYmxlIGRyaXZlciwgbGlrZSBgZHNhX2xvb3BgLCBgZHNhX21vY2tgLCBvciBldmVuIGBtdjg4ZTZ4eHhgLCBzb21laG93IGxldmVyYWdlIHRoaXM/XCIgQnV0IGEgcXVpY2sgY2hlY2sgY29uZmlybXM6IE5vLCBvbmx5IGBteGw4NjJ4eGAgaXMgdXNpbmcgaXQuIEFuZCBgbXhsODYyeHhgIGlzIGEgKmhhcmR3YXJlKiBzd2l0Y2gsIHdoaWNoIG1lYW5zIGl0IGNhbid0IGJlIHByb2JlZCBvciB1c2VkIHdpdGhpbiBhIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAuXG5cblNvLCB0aGlzIHBhdGNoIGlzIGJhc2ljYWxseSBhIG5pY2hlIGZlYXR1cmUgYWRkaXRpb24gZm9yIG9uZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIFRoZSBjb3JlIERTQSBwbHVtYmluZyBpdCB0b3VjaGVzIGlzIGVmZmVjdGl2ZWx5IGRlYWQgY29kZSBpbiBhbnkgZW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZXJlJ3Mgbm8gcG9zc2libGUgd2F5IHRvIHRyaWdnZXIgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgaW4gYSBmdXp6YWJsZSBlbnZpcm9ubWVudC4gSSBkb3VibGUtY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIGEgZHJpdmVyICpkaWRuJ3QqIHByb3ZpZGUgdGhhdCBjYWxsYmFjaywgdGhlIGRlZmF1bHQgcGF0aCB3b3VsZG4ndCBzb21laG93IGxlYWQgdXMgdGhlcmUuIEl0J3MgYWxsIGxvY2tlZCBiZWhpbmQgdGhhdCBgZGV2bGlua19mbGFzaF91cGRhdGVgIHBvaW50ZXIsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXIuXG5cblRoZXJlZm9yZSwgbm8sIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSBsaWtlbGlob29kIG9mIGZpbmRpbmcgYW55dGhpbmcgaW50ZXJlc3Rpbmcgd2l0aCB0aGUgZ2l2ZW4gc2V0dXAgaXMgZWZmZWN0aXZlbHkgemVyby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwMDksIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjQ1OjQ3LjE3NjMzMTc2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIG1pbm9yIHBsdW1iaW5nIGFkZGVkIHRvIHRoZSBnZW5lcmljIERTQSBkZXZsaW5rIGNvcmUgaXMgb25seSByZWFjaGFibGUgaWYgYSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBjYWxsYmFjaywgd2hpY2ggY3VycmVudGx5IG9ubHkgdGhlIHVucmVhY2hhYmxlIGBteGw4NjJ4eGAgZHJpdmVyIGRvZXMuIFRodXMsIHRoZSBuZXcgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqgpk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 12:23:24 +0000 UTC FinishedAt: 2026-07-27 12:45:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkOTBlMGRmNDcyZWQ1ZWU4YjYzYTBjYjNjYThmM2YxYTQ4NWM1NjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjo0NToxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbmluZGV4IDQ3NDUxNDhmZWNmNGZlLi4wNTg5OTlkMGRjNTZmMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5AQCAtOTQsNiAmIzQzOzk0LDcgQEAgcGFyYW1ldGVycywgaW5mbyB2ZXJzaW9ucywgYW5kIG90aGVyIGZlYXR1cmVzIGl0IHN1cHBvcnRzLlxuICAgIG1seDVcbiAgICBtbHhzd1xuICAgIG12ODhlNnh4eFxuJiM0MzsgICBteGw4NjJ4eFxuICAgIG5ldGRldnNpbVxuICAgIG5mcFxuICAgIG9jdGVvbnR4MlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iM2U5ZjdkNGQ0OTY5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG5AQCAtMCwwICYjNDM7MSw2MyBAQFxuJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO214bDg2Mnh4IGRldmxpbmsgc3VwcG9ydFxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZVxuJiM0MztgYG14bDg2Mnh4YGAgZGV2aWNlIGRyaXZlci5cbiYjNDM7XG4mIzQzO0luZm8gdmVyc2lvbnNcbiYjNDM7PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7VGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkXG4mIzQzOyAgIDp3aWR0aHM6IDUgNSA1IDg1XG4mIzQzO1xuJiM0MzsgICAqIC0gTmFtZVxuJiM0MzsgICAgIC0gVHlwZVxuJiM0MzsgICAgIC0gRXhhbXBsZVxuJiM0MzsgICAgIC0gRGVzY3JpcHRpb25cbiYjNDM7ICAgKiAtIGBgYXNpYy5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gODYyOFxuJiM0MzsgICAgIC0gVGhlIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90XG4mIzQzOyAgICAgICByZXBvcnRlZCBmb3IgYSBzd2l0Y2ggc2l0dGluZyBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGFzIHRoZVxuJiM0MzsgICAgICAgcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2l0aCBhIHJ1bm5pbmcgZmlybXdhcmUuXG4mIzQzOyAgICogLSBgYGFzaWMucmV2YGBcbiYjNDM7ICAgICAtIGZpeGVkXG4mIzQzOyAgICAgLSAwXG4mIzQzOyAgICAgLSBUaGUgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdCByZXBvcnRlZFxuJiM0MzsgICAgICAgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBlaXRoZXIuXG4mIzQzOyAgICogLSBgYGZ3YGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gMS4wLjcwXG4mIzQzOyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBzd2l0Y2gsIHJlcG9ydGVkIGFzIGJvdGhcbiYjNDM7ICAgICAgIHJ1bm5pbmcgYW5kIHN0b3JlZCBzaW5jZSB0aGUgc3dpdGNoIGJvb3RzIGl0IGZyb20gaXRzIG93biBmbGFzaC5cbiYjNDM7ICAgICAgIEluIE1DVWJvb3QgcmVzY3VlIG1vZGUgbm90aGluZyBpcyByZXBvcnRlZCB3aGlsZSBhbiBpbnRlcnJ1cHRlZFxuJiM0MzsgICAgICAgZG93bmxvYWQgaXMgc3RpbGwgYmVpbmcgcmVjb3ZlcmVkIGluIHRoZSBiYWNrZ3JvdW5kOyBvbmNlIHRoZVxuJiM0MzsgICAgICAgbG9hZGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBpbWFnZSB0aGUgdmVyc2lvbiBpcyByZXBvcnRlZCAoYXNcbiYjNDM7ICAgICAgIGJvdGggcnVubmluZyBhbmQgc3RvcmVkKSwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IGEgZmxhc2ggd2lsbCBiZVxuJiM0MzsgICAgICAgYWNjZXB0ZWQuIEl0IHJlYWRzIFwmIzM0OzAuMC4wXCYjMzQ7IHdoZW4gdGhlIHN3aXRjaCBjYW1lIHVwIHN0cmFpZ2h0IGludG9cbiYjNDM7ICAgICAgIE1DVWJvb3Qgd2l0aG91dCBldmVyIHJ1bm5pbmcgZmlybXdhcmUuXG4mIzQzO1xuJiM0MztGbGFzaCB1cGRhdGVcbiYjNDM7PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGBgZGV2bGluayBkZXYgZmxhc2hgYC5cbiYjNDM7VGhlIHNpZ25lZCBmaXJtd2FyZSBpbWFnZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgc3dpdGNoIG92ZXIgdGhlIHNhbWVcbiYjNDM7TURJTyBidXMgd2hpY2ggaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgc3dpdGNoLCB0aGVuIHZlcmlmaWVkIGFuZFxuJiM0MztpbnN0YWxsZWQgYnkgdGhlIE1DVWJvb3QgYm9vdGxvYWRlciBydW5uaW5nIG9uIHRoZSBzd2l0Y2guIEFsbCBwb3J0c1xuJiM0MztvZiB0aGUgc3dpdGNoIGFyZSBjbG9zZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdXBkYXRlIGFuZCB0aGUgZHJpdmVyXG4mIzQzO3JlcHJvYmVzIHRoZSBzd2l0Y2ggYWZ0ZXIgaXQgaGFzIHJlYm9vdGVkIGludG8gdGhlIG5ldyBmaXJtd2FyZS4gQVxuJiM0Mztjb21wbGV0ZSBmbGFzaCBhbmQgcmVwcm9iZSBjeWNsZSB0YWtlcyBhYm91dCBvbmUgbWludXRlLlxuJiM0MztcbiYjNDM7QSBzd2l0Y2ggc3R1Y2sgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSwgZS5nLiBhZnRlciBhbiBpbnRlcnJ1cHRlZFxuJiM0Mzt1cGRhdGUsIGlzIHJlZ2lzdGVyZWQgd2l0aG91dCB1c2VyIHBvcnRzLiBJZiB0aGUgcHJldmlvdXMgZG93bmxvYWQgd2FzXG4mIzQzO2ludGVycnVwdGVkIG1pZC10cmFuc2ZlciB0aGUgbG9hZGVyIGlzIHdlZGdlZDsgdGhlIGRyaXZlciBkcmFpbnMgaXRcbiYjNDM7YmFjayB0byBhIGNsZWFuIHJlYWR5IHN0YXRlIGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBjYW4gZWFzaWx5IHRha2VcbiYjNDM7bW9yZSB0aGFuIDEwIG1pbnV0ZXMuIER1cmluZyB0aGF0IHJlY292ZXJ5IGBgZGV2bGluayBkZXYgaW5mb2BgIHJlcG9ydHNcbiYjNDM7bm8gZmlybXdhcmUgdmVyc2lvbiBhbmQgYGBkZXZsaW5rIGRldiBmbGFzaGBgIHJldHVybnMgYGAtRUJVU1lgYC5cbiYjNDM7T25jZSB0aGUgbG9hZGVyIGlzIHJlYWR5IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFwcGVhcnMgYW5kIGZsYXNoaW5nIGFcbiYjNDM7ZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCB0aGUgcmVndWxhciB1cGRhdGUgZmxvdyByZWNvdmVycyB0aGUgc3dpdGNoLlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDYwY2ZmMDA5NTNkY2JlLi4zYTU1ZWQyYmFkOWNiYSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE2MTA3LDYgJiM0MzsxNjEwNyw3IEBAIE06XHREYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tYXhsaW5lYXIsbXhsODYyeHgueWFtbFxuJiM0MztGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG4gRjpcdGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cbiBGOlx0bmV0L2RzYS90YWdfbXhsODYyeHguY1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbkBAIC0xLDMgJiM0MzsxLDMgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSAmIzQzOz0gbXhsODYyeHhfZHNhLm9cbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cbiYjNDM7bXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmhcbmluZGV4IGExODBhNWRlY2ZmYzAxLi42Zjc3MTg5NTk4NGNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXG5AQCAtMTIyNCw2ICYjNDM7MTIyNCwxNiBAQCBzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24ge1xuIFx0X19sZTMyIGl2X2J1aWxkX251bTtcbiB9IF9fcGFja2VkO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgLSBTeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZVxuJiM0MzsgKiBAYWRkcjogMzItYml0IHJlZ2lzdGVyIGFkZHJlc3NcbiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsdWVcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHtcbiYjNDM7XHRfX2xlMzIgYWRkcjtcbiYjNDM7XHRfX2xlMzIgdmFsO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiAvKipcbiAgKiBlbnVtIG14bDg2Mnh4X3BvcnRfdHlwZSAtIFBvcnQgVHlwZVxuICAqIEBNWEw4NjJYWF9MT0dJQ0FMX1BPUlQ6IExvZ2ljYWwgUG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmE4NjU0MjVhYTYxZTFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbkBAIC03MCw3ICYjNDM7NzAsOSBAQFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFx0XHRcdChHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXHRcdFx0KEdQWV9HUFkyWFhfTUFHSUMgJiM0MzsgMHgyKVxuIFxuJiM0MzsjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVx0XHQoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgxKVxuICNkZWZpbmUgU1lTX01JU0NfRldfVkVSU0lPTlx0XHQoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgyKVxuJiM0MzsjZGVmaW5lIFNZU19NSVNDX1JFR19SRFx0XHRcdChTWVNfTUlTQ19NQUdJQyAmIzQzOyAweDgpXG4gXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUdcdChNWEw4NjJYWF9YUENTX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0dFVF9TVEFURVx0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTRiMzU1NDUzNGMyYWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5AQCAtMCwwICYjNDM7MSw5NDkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4mIzQzOyAqXG4mIzQzOyAqIFNCIFBESSAtIGZpcm13YXJlIGRvd25sb2FkIGludGVyZmFjZSBvdmVyIGNsYXVzZS0yMiBTTURJT1xuJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICpcbiYjNDM7ICogVGhlIE14TDg2Mnh4IE1DVWJvb3QgbG9hZGVyIGFjY2VwdHMgYSBmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIGZvdXIgXCYjMzQ7U0IgUERJXCYjMzQ7XG4mIzQzOyAqIHJlZ2lzdGVycyBpbiB0aGUgc3dpdGNoIFNNRElPIHJlZ2lzdGVyIHNwYWNlLiBJdCBydW5zIHdoZW5ldmVyIG5vIFdTUFxuJiM0MzsgKiBmaXJtd2FyZSBpcyBhY3RpdmU6IHRoZSBub3JtYWwgZmlybXdhcmUgdXBkYXRlIGVudGVycyBpdCBkZWxpYmVyYXRlbHkgLSB0aGVcbiYjNDM7ICogU1lTX01JU0NfRldfVVBEQVRFIEFQSSBjb21tYW5kIHNldHMgYSBzdGlja3kgcmVzY3VlIGJpdCBhbmQgcmVib290cyBpbnRvXG4mIzQzOyAqIE1DVWJvb3QgLSBhbmQgdGhlIGxvYWRlciBhbHNvIHN0YXlzIGhlcmUgd2hlbiB0aGUgc3RvcmVkIFdTUCBmaXJtd2FyZSBmYWlsc1xuJiM0MzsgKiBpdHMgYm9vdC10aW1lIGludGVncml0eSBjaGVjay4gVGhpcyBkcml2ZXIgZHJpdmVzIHRoZSBsb2FkZXImIzM5O3MgMHhjNTVjXG4mIzQzOyAqIFwmIzM0O2NvbnNvbGVcJiMzNDsgZG93bmxvYWQgcGF0aC5cbiYjNDM7ICpcbiYjNDM7ICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKTpcbiYjNDM7ICogICBNSUkgcmVnIDB4MWYgOj0gXHUwMDNjc2JfcGRpX3JlZ1x1MDAzZSAgICAgIDsgYWRkcmVzcy9wYWdlIGxhdGNoXG4mIzQzOyAqICAgTUlJIHJlZyAweDAwIDo9IC8gPVx1MDAzZSBcdTAwM2N1MTYgZGF0YVx1MDAzZSAgIDsgZGF0YSB3aW5kb3dcbiYjNDM7ICpcbiYjNDM7ICogU0IgUERJIHJlZ2lzdGVycyAoaG9zdCBuYW1lL2FkZHIgIC1cdTAwM2UgIE1DVSBtYWlsYm94KTpcbiYjNDM7ICogICBDVFJMIDB4ZTEwMCAtXHUwMDNlIDB4YzA5Mzg0MDAgICBtb2RlOiBSU1Q9MHgwMCAgUkQ9MHgwMSAgV1I9MHgwMlxuJiM0MzsgKiAgIEFERFIgMHhlMTAxIC1cdTAwM2UgMHhjMDkzODQwNCAgIFNCIHRhcmdldCB3b3JkIGFkZHJlc3MgKFNCMSBiYW5rID0gMHg3ODAwKVxuJiM0MzsgKiAgIERBVEEgMHhlMTAyIC1cdTAwM2UgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZFxuJiM0MzsgKiAgIFNUQVQgMHhlMTAzIC1cdTAwM2UgMHhjMDkzODQwYyAgIGhhbmRzaGFrZTogYSBtYWdpYyAoYmVsb3cpIG9yIGEgYnl0ZSBjb3VudFxuJiM0MzsgKlxuJiM0MzsgKiBTVEFUIG1hZ2ljczpcbiYjNDM7ICogICBSRUFEWSAgMHhjNTVjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGNvbnNvbGUgbG9vcCAgICAgICAgKHRoaXMgZHJpdmVyKVxuJiM0MzsgKiAgIERMX1JEWSAweGMzM2MgICBsb2FkZXIgaWRsZSBpbiB0aGUgZmxhc2hsZXNzIGxvb3BcbiYjNDM7ICogICBTVEFSVCAgMHhmNDhmICAgaG9zdCAgIC1cdTAwM2UgYmVnaW4gZG93bmxvYWQgc2Vzc2lvblxuJiM0MzsgKiAgIEFDSyAgICAweGY0OTAgICBsb2FkZXIgLVx1MDAzZSBTVEFSVCBhY2tub3dsZWRnZWQgKFNUQVJUICYjNDM7IDEpXG4mIzQzOyAqICAgRU5EICAgIDB4M2NjMyAgIGhvc3QgICAtXHUwMDNlIGVuZCBvZiB0cmFuc2ZlciAvIGZpbmFsaXNlXG4mIzQzOyAqICAgUkRSRUcgIDB4ZTJjMCAgIGhvc3QgICAtXHUwMDNlIHJlZ2lzdGVyLXJlYWQgY29tbWFuZCAofCBpbmRleCksIHNlZSBiZWxvd1xuJiM0MzsgKlxuJiM0MzsgKiBDb25zb2xlIGZsYXNoIHBhdGggKFNUQVQ9MHhjNTVjKSAtIG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKCk6XG4mIzQzOyAqXG4mIzQzOyAqICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyXG4mIzQzOyAqICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tXG4mIzQzOyAqICAgcmVzZXQgKENUUkw9QUREUj1EQVRBPTApXG4mIzQzOyAqICAgcmVhZCBTVEFUIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHhjNTVjICAgKFJFQURZLCBpZGxlKVxuJiM0MzsgKiAgIFNUQVQgOj0gU1RBUlQoMHhmNDhmKSAgLS0tLS0tLS0tLS0tLS1cdTAwM2VcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzYy0tLS0tLS0tLS0tLS0tIFNUQVQgPSAweGY0OTAgKEFDSylcbiYjNDM7ICogICBDVFJMIDo9IFdSXG4mIzQzOyAqICAgREFUQSA6PSBoZHJbMC4uOV0gICgyMC1ieXRlIGhlYWRlcjogdHlwZSxzaXplMSxjcmMxLHNpemUyLGNyYzIpXG4mIzQzOyAqICAgcmVzZXQ7IFNUQVQgOj0gMjAgKGhlYWRlciBsZW4pICAtLS0tLVx1MDAzZSBwYXJzZSBoZHI7IHJfcmVtYWluPXNpemUxJiM0MztzaXplMjtcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkFTRSB0YXJnZXQgcmVnaW9uKHMpXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MtLS0tLS0tLS0tLS0tLSBTVEFUPTIxIChsZW4mIzQzOzEpLCB0aGVuIFNUQVQ9MFxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpXG4mIzQzOyAqICAgLS0gcGF5bG9hZCwgc3RyZWFtZWQgaW4gc2xpY2VzOiAtLVxuJiM0MzsgKiAgIENUUkwgOj0gV1JcbiYjNDM7ICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLlxuJiM0MzsgKiAgICAgYXQgd29yZCAxNjM4NDogcmVzZXQ7IEFERFI6PTB4NzgwMDsgQ1RSTDo9V1IgICAoaGFsZi1iYW5rIC1cdTAwM2UgU0IxKVxuJiM0MzsgKiAgICAgYXQgd29yZCAzMjc2MDogZmx1c2ggc2xpY2U6XG4mIzQzOyAqICAgICAgICByZXNldDsgU1RBVCA6PSBcdTAwM2NieXRlc190aGlzX3NsaWNlXHUwMDNlIC0tLVx1MDAzZSByX3JlbWFpbiAtPSBieXRlczsgcHJvZ3JhbVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLSBTVEFUPTAgIChyZWFkeSBmb3IgbmV4dCBzbGljZSlcbiYjNDM7ICogICAuLi4gcmVwZWF0IHVudGlsIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHNlbnQgLi4uXG4mIzQzOyAqICAgU1RBVCA6PSBFTkQoMHgzY2MzKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlIGZpbmFsaXNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKTpcbiYjNDM7ICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyXG4mIzQzOyAqICAgZG9lcyByX3JlbWFpbiAtPSBjb3VudCBhbmQgc3RheXMgaW4gdGhlIHJlY2VpdmUgbG9vcCB3aGlsZSByX3JlbWFpbiAhPSAwLlxuJiM0MzsgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0c1xuJiM0MzsgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHNcbiYjNDM7ICogICBFWEFDVExZIDAuIEEgY291bnQgbGFyZ2VyIHRoYW4gcl9yZW1haW4gdW5kZXJmbG93cyB0aGUgMzItYml0IGNvdW50ZXIgYW5kXG4mIzQzOyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6XG4mIzQzOyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nO1xuJiM0MzsgKiAgICAgLSBpbnRlcnJ1cHRlZC1kb3dubG9hZCByZWNvdmVyeSBmZWVkcyAxIGJ5dGUgYXQgYSB0aW1lIChzZWUgYmVsb3cpLlxuJiM0MzsgKlxuJiM0MzsgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKTpcbiYjNDM7ICogICBBIGhvc3QgdGhhdCBkaWVzIG1pZC1wYXlsb2FkIGxlYXZlcyB0aGUgbG9hZGVyIHNwaW5uaW5nIGluIHRoZSBzbGljZSBsb29wXG4mIzQzOyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCAmIzQzO1xuJiM0MzsgKiAgIFNUQVQ9MSkgdW50aWwgcl9yZW1haW4gcmVhY2hlcyAwLCB0aGVuIFNUQVQ9RU5EOyB0aGUgbG9hZGVyIGZpbmFsaXNlcyB0aGVcbiYjNDM7ICogICAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zIFJFQURZIGZvciBhIGNsZWFuIHJlZmxhc2guXG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIChub24tZGVzdHJ1Y3RpdmUgbGl2ZW5lc3MgcHJvb2YpOlxuJiM0MzsgKiAgIERBVEEgOj0gMHg3YzIzIChtYXJrZXIpOyBTVEFUIDo9IDB4ZTJjMHxpZHhcbiYjNDM7ICogICAgIC1cdTAwM2UgbG9hZGVyIHJldHVybnMgYSBydW50aW1lIHdvcmQgaW4gREFUQSBhbmQgcmUtYXJtcyBTVEFUPTB4YzU1Yy5cbiYjNDM7ICogICBUaGUgcmVwbHkgc291cmNlIGlzIGxvYWRlciBCU1MsIG5vdCBhIGNoaXAgaWQ7IHVzZWQgb25seSB0byBwcm92ZSBhIGxpdmVcbiYjNDM7ICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgb3RoZXIgU1RBVCByZWFkeSBtYWdpYywgMHhjMzNjLCBtYXJrcyB0aGUgbG9hZGVyJiMzOTtzIGZsYXNobGVzc1xuJiM0MzsgKiBjaGlwLXRvLWNoaXAgZG93bmxvYWQgbW9kZSAoTXhMODYyODFTIDE2LXBvcnQgdGllcik7IHRoaXMgZHJpdmVyIGRvZXMgbm90XG4mIzQzOyAqIHVzZSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzY3VlIGxpZmVjeWNsZSAoZGV2bGluayk6IHByb2JlIHJ1bnMgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCk7IGEgd2VkZ2VkXG4mIzQzOyAqIGxvYWRlciBpcyBkcmFpbmVkIGJhY2sgdG8gUkVBRFkgYnkgYSBiYWNrZ3JvdW5kIHNlbGYtaGVhbCAocmVzY3VlX2hlYWxfd29yaykgc29cbiYjNDM7ICogdGhlIG11bHRpLW1pbnV0ZSByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBkZXZsaW5rIGRldiBpbmZvXG4mIzQzOyAqIGV4cG9zZXMgdGhlIGZ3IHZlcnNpb24gKHRoZSBcJiMzNDtmbGFzaGFibGVcJiMzNDsgc2lnbmFsKSBvbmx5IG9uY2UgYXQgUkVBRFk7XG4mIzQzOyAqIGZsYXNoX3VwZGF0ZSByZXR1cm5zIC1FQlVTWSB1bnRpbCB0aGVuLCBhbmQgcmVwcm9iZXMgdG8gV1NQIGZpcm13YXJlIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGVzOlxuJiM0MzsgKiAgIC0gQ2hpcCBpZC9yZXZpc2lvbiAoMHhjMGQyODg4NC84OCkgYXJlIE5PVCByZWFjaGFibGUgb24gdGhpcyBjaGFubmVsOyB0aGV5XG4mIzQzOyAqICAgICBuZWVkIHRoZSBjbGF1c2UtNDUgTU1EIGZpcm13YXJlIG1haWxib3gsIHdoaWNoIGlzIGRlYWQgdW5kZXIgTUNVYm9vdC5cbiYjNDM7ICogICAgIFJlc2N1ZSBpZGVudGl0eSBpcyBieSBTQiBQREkgYmVoYXZpb3VyIG9ubHkgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkuXG4mIzQzOyAqICAgLSBUaGUgU01ESU8gUEhZIGFkZHJlc3MgYW5kIHRoZSAweGUxeHggb2Zmc2V0cyBhcmUgT1RQLWNvbmZpZ3VyYWJsZTsgZGVyaXZlXG4mIzQzOyAqICAgICB0aGVtIGZyb20gdGhlIERUIGJpbmRpbmcsIGRvIG5vdCBhc3N1bWUgZml4ZWQgdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3N3aXRjaGRldi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWFwaS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWNtZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWZ3LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtaG9zdC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKiBTQiBQREkgcmVnaXN0ZXJzIChjbGF1c2UtMjIgU01ESU8gYWRkcmVzcyBzcGFjZSkgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTFx0XHQweGUxMDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQUREUlx0XHQweGUxMDFcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfREFUQVx0XHQweGUxMDJcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBVFx0XHQweGUxMDNcbiYjNDM7XG4mIzQzOy8qIFNCIFBESSBDVFJMIG1vZGVzICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUXHQweDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfV1JcdFx0MHgwMlxuJiM0MztcbiYjNDM7LyogU0IgUERJIGhhbmRzaGFrZSBtYWdpYyAocHVibGlzaGVkL2NvbnN1bWVkIHZpYSBTVEFUKSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcdC8qIGxvYWRlciBpZGxlLCBjb25zb2xlIGxvb3AgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFlcdDB4YzMzY1x0LyogbG9hZGVyIGlkbGUsIGZsYXNobGVzcyBsb29wICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUXHRcdDB4ZjQ4ZlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkRcdFx0MHgzY2MzXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHXHRcdDB4ZTJjMFx0LyogcmVnaXN0ZXItcmVhZCBjbWQgKHwgaW5kZXgpICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUktcdDB4N2MyM1x0LyogbWFya2VyIHBsYWNlZCBpbiBEQVRBIGZvciBSRFJFRyAqL1xuJiM0MztcbiYjNDM7LyogQmVoYXZpb3VyYWwgcHJlc2VuY2UgcHJvYmU6IHR3byBkaXN0aW5jdCAxNi1iaXQgbGF0Y2hlcyBvbiBBRERSL0RBVEEuICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0FcdFx0MHg1YTVhXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0RcdFx0MHhhNWE1XG4mIzQzO1xuJiM0MzsvKiBGaXJtd2FyZSB0cmFuc2ZlciBnZW9tZXRyeSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXHRcdDIwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19IQUxGXHRcdDE2Mzg0XHQvKiB3b3JkcyBwZXIgaGFsZi1iYW5rICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRVx0XHQzMjc2MFx0Lyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlx0XHQweDc4MDBcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cbiYjNDM7XG4mIzQzOy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1x0MzAwMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TXHQ1MDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NU1x0MzAwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1x0MTIwMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TXHQ1MDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVQUk9CRV9ERUxBWV9NU1x0NTAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMFxuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXG4mIzQzO1x0XHRcdFx0ICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCwgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsXG4mIzQzO1x0XHRcdFx0dmFsIFx1MDAzYyAwIHx8ICh1MTYpdmFsID09IGV4cGVjdGVkLFxuJiM0MztcdFx0XHRcdDEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0cHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuJiM0MztcdFx0XHRcdCAgICAgICB1MzIgZGF0YV93cml0dGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCxcbiYjNDM7XHRcdFx0XHRcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuJiM0MztcdFx0XHRcdCAgdTMyIGRvbmUsIHUzMiB0b3RhbClcbiYjNDM7e1xuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBQb3N0LWZsYXNoIHJlcHJvYmUuIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIHJ1bnNcbiYjNDM7ICogZGV0YWNoZWQgZnJvbSBwcml2LCBvbiBvbmx5IHRoZSBoZWxkIGRldmljZSByZWZlcmVuY2UuIEl0IHJ1bnMgYXMgYSBrdGhyZWFkXG4mIzQzOyAqIHNvIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkIHdpdGggbW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KCksXG4mIzQzOyAqIGZyb20gY29yZS1rZXJuZWwgY29kZSAtLSBhIHdvcmsgaXRlbSYjMzk7cyB0cmFpbGluZyBtb2R1bGVfcHV0KCkgY291bGQgcmV0dXJuXG4mIzQzOyAqIGludG8gbW9kdWxlIHRleHQgYSByYWNpbmcgcm1tb2QgaGFzIGFscmVhZHkgZnJlZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3JlcHJvYmVfdGhyZWFkX2ZuKHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRtc2xlZXAoTVhMODYyWFhfRldfUkVQUk9CRV9ERUxBWV9NUyk7XG4mIzQzO1x0aWYgKGRldmljZV9yZXByb2JlKGRldikpXG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7cmVwcm9iZSBmYWlsZWRcXG5cJiMzNDspO1xuJiM0MztcdHB1dF9kZXZpY2UoZGV2KTtcbiYjNDM7XHRtb2R1bGVfcHV0X2FuZF9rdGhyZWFkX2V4aXQoMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYge1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFNwYXduIHRoZSByZXByb2JlIGt0aHJlYWQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgd2hlcmUga3RocmVhZF9jcmVhdGUoKVxuJiM0MzsgKiBjYW5ub3QgcmV0dXJuIC1FSU5UUiBhcyBpdCBjYW4gZnJvbSB0aGUgZGV2bGluayBjYWxsZXImIzM5O3MgY29udGV4dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZl9mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiwgd29yayk7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0ga28tXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbiYjNDM7XG4mIzQzO1x0a2ZyZWUoa28pO1xuJiM0MztcdHRhc2sgPSBrdGhyZWFkX3J1bihteGw4NjJ4eF9yZXByb2JlX3RocmVhZF9mbiwgZGV2LCBcJiMzNDtteGw4NjJ4eC1yZXByb2JlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHRhc2spKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XCYjMzQ7cmVwcm9iZSBrdGhyZWFkIGZhaWxlZCAoJXBlKTsgcmVsb2FkIHRoZSBkcml2ZXIgdG8gcmVzdG9yZSBvcGVyYXRpb25cXG5cJiMzNDssXG4mIzQzO1x0XHRcdHRhc2spO1xuJiM0MztcdFx0cHV0X2RldmljZShkZXYpO1xuJiM0MztcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuXG4mIzQzOyAqIGFsbG9jYXRpb24gZmFpbHVyZSBhYm9ydHMgY2xlYW5seS4gVGhlIGNhbGxlciBob2xkcyBhIG1vZHVsZSBhbmQgYSBkZXZpY2VcbiYjNDM7ICogcmVmZXJlbmNlOyBvbmNlIHRoZSBraWNrb2ZmIGlzIHNjaGVkdWxlZCB0aGUgcmVwcm9iZSBrdGhyZWFkIHJlbGVhc2VzIGJvdGguXG4mIzQzOyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKm14bDg2Mnh4X3JlcHJvYmVfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XG4mIzQzO1xuJiM0MztcdGtvID0ga3phbGxvY19vYmooKmtvKTtcbiYjNDM7XHRpZiAoIWtvKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0a28tXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZrby1cdTAwM2V3b3JrLCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmZfZm4pO1xuJiM0MztcdHJldHVybiBrbztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQnl0ZS1jb3VudCBvZiBlYWNoIGNodW5rIGZlZCB0byB0aGUgbG9hZGVyIGR1cmluZyBkcmFpbi4gSXQgTVVTVCBiZSAxOiB0aGVcbiYjNDM7ICogbG9hZGVyIG9ubHkgbGV0cyB1cyBvYnNlcnZlIFwmIzM0O2NvdW50ZXIgPT0gMFwmIzM0OywgbmV2ZXIgXCYjMzQ7Y291bnRlciBcdTAwM2Mgc3RlcFwmIzM0Oywgc28gYW55XG4mIzQzOyAqIHN0ZXAgXHUwMDNlIDEgY2FuIHN1YnRyYWN0IHBhc3QgemVybywgdW5kZXJmbG93IHRoZSAzMi1iaXQgY291bnRlciBhbmQgd2VkZ2UgdGhlXG4mIzQzOyAqIGxvYWRlciBmb3IgfjJeMzIgbW9yZSBieXRlcyAoYSBzdGF0ZSBvbmx5IGEgcG93ZXIgY3ljbGUgY2xlYXJzKS4gU3RlcHBpbmcgYnlcbiYjNDM7ICogMSB3YWxrcyB0aGUgY291bnRlciB0aHJvdWdoIGV2ZXJ5IHZhbHVlIGFuZCBpcyBndWFyYW50ZWVkIHRvIGxhbmQgb24gemVyb1xuJiM0MzsgKiB3aGF0ZXZlciBpdHMgKHBvc3NpYmx5IG9kZCkgc3RhcnQuIEEgMS1ieXRlIGNodW5rIGlzIGEgcGF0aCB0aGUgbG9hZGVyXG4mIzQzOyAqIGFscmVhZHkgaGFuZGxlczogdGhlIG5vcm1hbCB0cmFuc2ZlciBlbmRzIHdpdGggYSBzaW5nbGUgdHJhaWxpbmcgYnl0ZSBmb3JcbiYjNDM7ICogb2RkLXNpemVkIGltYWdlcyAoc2VlIFN0ZXAgNikuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTXHQxXG4mIzQzO1xuJiM0MzsvKiBQb2xsIFNUQVQgd2hpbGUgZHJhaW5pbmcgYSBzdHVjayBkb3dubG9hZDogMCBtZWFucyBcJiMzNDtmZWVkIHRoZSBuZXh0IGNodW5rXCYjMzQ7LFxuJiM0MzsgKiBSRUFEWSBtZWFucyB0aGUgbG9hZGVyIGxlZnQgdGhlIHJlY2VpdmUgbG9vcCBhbmQgcmUtYXJtZWQgaXRzIGNvbW1hbmQgbG9vcCxcbiYjNDM7ICogYW55dGhpbmcgZWxzZSBpcyBhIHRyYW5zaWVudCAodGhlIGNvdW50IGJlaW5nIGNvbnN1bWVkKSAtIEJVU1kgcGFzdCB0aGVcbiYjNDM7ICogd2luZG93IG1lYW5zIHRoZSBjb3VudGVyIGhhcyBoaXQgemVybyBhbmQgdGhlIGxvYWRlciBpcyBmaW5hbGlzaW5nLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSB7IE1YTDg2MlhYX0RSQUlOX0ZFRUQsIE1YTDg2MlhYX0RSQUlOX1JFQURZLCBNWEw4NjJYWF9EUkFJTl9CVVNZIH07XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmVhZF9wb2xsX3RpbWVvdXQobXhsODYyeHhfc21kaW9fcmVhZCwgdmFsLFxuJiM0MztcdFx0XHQgIHZhbCBcdTAwM2MgMCB8fCAodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkgfHxcbiYjNDM7XHRcdFx0ICAodTE2KXZhbCA9PSAwLFxuJiM0MztcdFx0XHQgIDUwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4mIzQzO1x0XHRcdCAgcHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gdmFsO1xuJiM0MztcdGlmICgodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkpXG4mIzQzO1x0XHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fUkVBRFk7XG4mIzQzO1x0aWYgKCh1MTYpdmFsID09IDApXG4mIzQzO1x0XHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fRkVFRDtcbiYjNDM7XHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fQlVTWTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVjb3ZlciBhIHN3aXRjaCB3aG9zZSBTQiBQREkgZG93bmxvYWQgd2FzIGludGVycnVwdGVkIG1pZC10cmFuc2ZlciAtIHRoZVxuJiM0MzsgKiBob3N0IGRpZWQgYWZ0ZXIgTUNVYm9vdCBiZWdhbiBlcmFzaW5nIGZsYXNoLCB3aGV0aGVyIGl0IGFib3J0ZWQgbWlkIGVyYXNlIG9yXG4mIzQzOyAqIG1pZCBpbWFnZS13cml0ZSwgYm90aCBlbmQgdXAgaW4gdGhlIHNhbWUgcGxhY2U6IHRoZSBwYXlsb2FkIHJlY2VpdmUgbG9vcC5cbiYjNDM7ICogVGhlcmUgdGhlIGxvYWRlciBwdWJsaXNoZXMgU1RBVD0wLCB3YWl0cyBmb3IgdGhlIGhvc3QgdG8gd3JpdGUgYSBieXRlLWNvdW50XG4mIzQzOyAqIHRvIFNUQVQsIERNQXMgdGhhdCBtYW55IGJ5dGVzIGFuZCBzdWJ0cmFjdHMgdGhlIGNvdW50IGZyb20gYSByZW1haW5pbmctYnl0ZXNcbiYjNDM7ICogY291bnRlciwgbGVhdmluZyB0aGUgbG9vcCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyBleGFjdGx5IHplcm8uIFRoZVxuJiM0MzsgKiBpbWFnZSBzaXplIGRpZWQgd2l0aCB0aGUgaG9zdCwgc28gd2UgZmVlZCBzaW5nbGUtYnl0ZSBjaHVua3MgKHNlZVxuJiM0MzsgKiBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUykgdG8gd2FsayB0aGUgY291bnRlciB0byB6ZXJvIHdpdGhvdXQgdW5kZXJmbG93LFxuJiM0MzsgKiB0aGVuIHNlbmQgRU5ELiBUaGUgbG9hZGVyIHZhbGlkYXRlcyB0aGUgKG5vdyBjb3JydXB0KSBpbWFnZSBhbmQgcmUtYXJtc1xuJiM0MzsgKiBSRUFEWSwgb3IgYm9vdHMgYSB2YWxpZCBpbWFnZSB0aGF0IGhhcHBlbmVkIHRvIHN1cnZpdmUgaW4gZmxhc2guIFRoaXMgb25seVxuJiM0MzsgKiBmaW5hbGlzZXMgdGhlIHRyYW5zZmVyOyB0aGUgY2FsbGVyJiMzOTtzIHJlcHJvYmUgY2xhc3NpZmllcyB3aGljaGV2ZXIgc3RhdGVcbiYjNDM7ICogcmVzdWx0cy4gUmV0dXJucyAwIG9uY2UgZmluYWxpc2VkLCBcdTAwM2MwIG9uIGVycm9yLiBEb2VzIE5PVCByZWNvdmVyIGEgY291bnRlclxuJiM0MzsgKiBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGFcbiYjNDM7ICogcG93ZXIgY3ljbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXY7XG4mIzQzO1x0LyogQm91bmQ6IHR3aWNlIHRoZSBsb2FkZXImIzM5O3MgMTYgTWlCIGltYWdlIGNhcCwgb25lIGJ5dGUgcGVyIGNodW5rLiAqL1xuJiM0MztcdHUzMiBtYXhfY2h1bmtzID0gMnUgKiAoMTZ1IFx1MDAzY1x1MDAzYyAyMCkgLyBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUztcbiYjNDM7XHR1MzIgY2h1bmsgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRldl93YXJuKGRldiwgXCYjMzQ7Zmxhc2g6IGRyYWluaW5nIGludGVycnVwdGVkIGRvd25sb2FkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGNodW5rIFx1MDAzYyBtYXhfY2h1bmtzKSB7XG4mIzQzO1x0XHQvKiBUZWFyZG93biBjYW4gaW50ZXJydXB0IHRoaXMgbWludXRlcy1sb25nIGRyYWluLiAqL1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9SRUFEWSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX0JVU1kpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdC8qIEZlZWQgb25lIHplcm8gYnl0ZTsgcmVzZXQgY2xlYXJlZCB0aGUgd3JpdGUgbGF0Y2guICovXG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdFx0XHQgICBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0Y2h1bmsmIzQzOyYjNDM7O1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY2h1bmsgXHUwMDNlPSBtYXhfY2h1bmtzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGludGVycnVwdGVkIGRvd25sb2FkIGRpZCBub3QgZHJhaW4gYWZ0ZXIgJXUgY2h1bmtzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRjaHVuayk7XG4mIzQzO1x0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBMZXQgdGhlIGxvYWRlciB2YWxpZGF0ZSBhbmQgcmUtYXJtIFJFQURZLCBvciBib290IGEgc3Vydml2aW5nIGltYWdlO1xuJiM0MztcdCAqIHRoZSBjYWxsZXImIzM5O3MgcmVwcm9iZSB0aGVuIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlIHJlc3VsdHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBvZmYgdGhlIGRldmxpbmsgZmxhc2ggcGF0aCwgc29cbiYjNDM7ICogdGhlIG1pbnV0ZXMtbG9uZyByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBTY2hlZHVsZWQgZnJvbSBwcm9iZTtcbiYjNDM7ICogcmVwcm9iZXMgb24gc3VjY2VzcyBzbyB0aGUgcHJvYmUtdGltZSBkZXRlY3Rpb24gcmUtY2xhc3NpZmllcyB0aGUgc3dpdGNoLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiwgcmVzY3VlX2hlYWxfd29yayk7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXZfaW5mbyhkZXYsIFwmIzM0O3JlY292ZXJpbmcgaW50ZXJydXB0ZWQgZG93bmxvYWQgaW4gYmFja2dyb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpO1xuJiM0MztcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGludGVycnVwdGVkIHRyYW5zZmVyIGlzIGZpbmFsaXNlZDsgcmVwcm9iZSBzbyB0aGUgcHJvYmUtdGltZVxuJiM0MztcdCAqIGRldGVjdGlvbiBicmluZ3MgdGhlIGRyaXZlciB1cCAtLSBmbGFzaGFibGUgaW4gcmVzY3VlIG1vZGUgaWYgdGhlXG4mIzQzO1x0ICogbG9hZGVyIGlzIGF0IFJFQURZLCBvciBub3JtYWxseSBpZiBhIHZhbGlkIGltYWdlIGJvb3RlZC4gVGhlIHJlZnNcbiYjNDM7XHQgKiBhcmUgcmVsZWFzZWQgYnkgdGhlIHJlcHJvYmUgb25jZSBpdCBjb21wbGV0ZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Z2V0X2RldmljZShkZXYpO1xuJiM0MztcdGtvID0gbXhsODYyeHhfcmVwcm9iZV9hbGxvYyhkZXYpO1xuJiM0MztcdGlmICgha28pIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoZGV2KTtcbiYjNDM7XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmtvLVx1MDAzZXdvcmspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEZXRlY3QgTUNVYm9vdCByZXNjdWUgbW9kZSBvdmVyIGNsYXVzZS0yMiBTTURJTyBhbG9uZSwgc28gdGhlIGNhbGxlciBjYW4gcnVsZVxuJiM0MzsgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUFxuJiM0MzsgKiBmaXJtd2FyZSBhbnN3ZXJzKS4gQSBzY3JhdGNoIHdyaXRlIHRvIEFERFIvREFUQSBtdXN0IGxhdGNoIG9yIHRoZSBjaGlwIGlzXG4mIzQzOyAqIGFic2VudCAoLUVOT0RFVik7IFNUQVQgdGhlbiBjbGFzc2lmaWVzIHRoZSBzdGF0ZSwgcG9rZWQgZGVzdHJ1Y3RpdmVseSBvbmx5XG4mIzQzOyAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6XG4mIzQzOyAqXG4mIzQzOyAqICAtIDB4YzMzYzogZmxhc2hsZXNzIGxvb3AsIHJlYWR5LlxuJiM0MzsgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLlxuJiM0MzsgKiAgLSBvdGhlciBub24temVybzogcnVubmluZyBmaXJtd2FyZSwgbGVmdCB1bnBva2VkLlxuJiM0MzsgKiAgLSAwOiB3ZWRnZWQgcmVjZWl2ZSBsb29wLCBpZiBhIDEtYnl0ZSBzbGljZS1hZHZhbmNlIGRyYWlucyBiYWNrIHRvIDAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogTVhMODYyWFhfSU5fUkVTQ1VFLCBNWEw4NjJYWF9OT1RfUkVTQ1VFLCBvciBuZWdhdGl2ZSAoLUVOT0RFVi9TTURJTykuXG4mIzQzOyAqL1xuJiM0MztpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0YXQsIGRhdCwgcmV0LCByYiwgYSwgZDtcbiYjNDM7XG4mIzQzO1x0LyogcmVzY3VlX3JlYWR5IGdhdGVzIGZsYXNoaW5nOyBhIHdlZGdlZCBsb2FkZXIgbmVlZHMgdGhlIGRyYWluIGZpcnN0LiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFByZXNlbmNlOiBhIGxpdmUgY2hpcCBsYXRjaGVzIHRoZSBzY3JhdGNoIHdyaXRlLCBhbiBhYnNlbnQgb25lIGZsb2F0cy4gKi9cbiYjNDM7XHRhID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4mIzQzO1x0XHRcdFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTtcbiYjNDM7XHRpZiAoYSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBhO1xuJiM0MztcdGQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbiYjNDM7XHRcdFx0XHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0QpO1xuJiM0MztcdGlmIChkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGQ7XG4mIzQzO1x0YSA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIpO1xuJiM0MztcdGlmIChhIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGE7XG4mIzQzO1x0ZCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuJiM0MztcdGlmIChkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGQ7XG4mIzQzO1x0aWYgKCh1MTYpYSAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSB8fFxuJiM0MztcdCAgICAodTE2KWQgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzdGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4mIzQzO1x0aWYgKHN0YXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gc3RhdDtcbiYjNDM7XG4mIzQzO1x0LyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3AgKE14TDg2MjgxUyB0aWVyKTogdGhpcyBkcml2ZXIgZG9lcyBub3RcbiYjNDM7XHQgKiBzdXBwb3J0IGl0IC0tIHRoZSBjb25zb2xlIGZsYXNoIHBhdGggZXhwZWN0cyBSRUFEWS4gVHJlYXQgaXQgYXMgYW5cbiYjNDM7XHQgKiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLCBsaWtlIGFueSBvdGhlciB1bnN1cHBvcnRlZCBzdGF0ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHUxNilzdGF0ID09IE1YTDg2MlhYX1NCX1BESV9ETF9SRUFEWSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHQvKiBDb25zb2xlIGxvb3AgYXQgUkVBRFk6IGNvbmZpcm0gdGhlIGxpdmUgbWFpbGJveCB3aXRoIHRoZSByZWdpc3Rlci1yZWFkXG4mIzQzO1x0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuJiM0MztcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbiYjNDM7XHRcdGRhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuJiM0MztcdFx0aWYgKGRhdCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIGRhdDtcbiYjNDM7XHRcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbiYjNDM7XHRcdGlmICghcmIgXHUwMDI2XHUwMDI2ICh1MTYpZGF0ICE9IE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLKSB7XG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQW55IG90aGVyIG5vbi16ZXJvIHZhbHVlIGlzIGEgcnVubmluZyBmaXJtd2FyZSwgbm90IGEgbG9hZGVyLiAqL1xuJiM0MztcdGlmIChzdGF0KVxuJiM0MztcdFx0cmV0dXJuIE1YTDg2MlhYX05PVF9SRVNDVUU7XG4mIzQzO1xuJiM0MztcdC8qIFNUQVQgPT0gMDogYSB3ZWRnZWQgcmVjZWl2ZSBsb29wIGNvbnN1bWVzIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgYmFja1xuJiM0MztcdCAqIHRvIDAgKGZlZWQgb25lIERBVEEgd29yZCBmaXJzdCwgbGlrZSBhIGRyYWluIGNodW5rKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIDB4MDAwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCAxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmICghcmIpXG4mIzQzO1x0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbiYjNDM7c3RydWN0IG14bDg2Mnh4X2Z3X2hkciB7XG4mIzQzO1x0X19sZTMyIGltYWdlX3R5cGU7XG4mIzQzO1x0X19sZTMyIGltYWdlX3NpemVfMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2VfY2hlY2tzdW1fMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2Vfc2l6ZV8yO1xuJiM0MztcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuJiM0MztcdFx0XHRcdCAgIHUzMiAqcGF5bG9hZF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xuJiM0MztcdHUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsO1xuJiM0MztcdGNvbnN0IHU4ICpwYXlsb2FkO1xuJiM0MztcdHUzMiBjcmM7XG4mIzQzO1xuJiM0MztcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1x0cGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbiYjNDM7XHRzaXplMiA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9zaXplXzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4mIzQzO1x0ICAgIHRvdGFsIFx1MDAzZSBmdy1cdTAwM2VzaXplIC0gTVhMODYyWFhfRldfSERSX1NJWkUpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0b3RhbCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZTEpIHtcbiYjNDM7XHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbiYjNDM7XHRcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogaW1hZ2UgMSBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUyKSB7XG4mIzQzO1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICYjNDM7IHNpemUxLCBzaXplMik7XG4mIzQzO1x0XHRpZiAoY3JjICE9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Zmxhc2g6IGltYWdlIDIgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgcGF5bG9hZF9zaXplLCBzdHJ1Y3QgZGV2bGluayAqZGwpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0dTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gamlmZmllcyAtIDE7XG4mIzQzO1x0dTE2IHdvcmQsIGZkYXRhO1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMTogcmVib290IHRoZSBmaXJtd2FyZSBpbnRvIE1DVWJvb3QgcmVzY3VlIG1vZGUgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdGZhbHNlLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogRldfVVBEQVRFIGNvbW1hbmQgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0RVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuJiM0MztcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCYjMzQ7V2FpdGluZyBmb3IgYm9vdGxvYWRlclwmIzM0OywgMCwgMCk7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XG4mIzQzO1x0LyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdFxuJiM0MztcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O2ZsYXNoOiBib290bG9hZGVyIG5vdCByZWFkeTogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9TVEFSVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCAmIzQzOyAxLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RlcCA0OiB0cmFuc2ZlciBpbWFnZSBoZWFkZXIgKi9cbiYjNDM7XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0VyYXNpbmcgZmxhc2hcJiMzNDssIDAsIDApO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHdvcmQgPSBmdy1cdTAwM2VkYXRhW2kgKiAyXSB8XG4mIzQzO1x0XHQgICAgICAgKCh1MTYpZnctXHUwMDNlZGF0YVtpICogMiAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgd29yZCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBieXRlIGNvdW50IGluIFNUQVQgdHJpZ2dlcnMgdGhlIGVyYXNlICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdFx0ICAgTVhMODYyWFhfRldfSERSX1NJWkUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XG4mIzQzO1x0LyogQUNLIGlzIGJ5dGUgY291bnQgJiM0MzsgMSAqL1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgJiM0MzsgMSxcbiYjNDM7XHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O2ZsYXNoOiBoZWFkZXIgQUNLIGZhaWxlZDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDY6IHRyYW5zZmVyIHBheWxvYWQgKi9cbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoaWR4IFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcbiYjNDM7XHRcdGlmIChpZHggJiM0MzsgMSBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4mIzQzO1x0XHRcdGZkYXRhID0gcGF5bG9hZFtpZHhdIHxcbiYjNDM7XHRcdFx0XHQoKHUxNilwYXlsb2FkW2lkeCAmIzQzOyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0XHRcdGlkeCAmIzQzOz0gMjtcbiYjNDM7XHRcdFx0ZGF0YV93cml0dGVuICYjNDM7PSAyO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF07XG4mIzQzO1x0XHRcdGlkeCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIGZkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcdFx0d29yZF9pZHgmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChpZHggXHUwMDNlPSBwYXlsb2FkX3NpemUpIHtcbiYjNDM7XHRcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIEhhbGYtYmFuayBib3VuZGFyeTogc3dpdGNoIHRvIFNCMSBhZGRyZXNzICovXG4mIzQzO1x0XHRpZiAod29yZF9pZHggPT0gTVhMODYyWFhfRldfQkFOS19IQUxGKSB7XG4mIzQzO1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX0ZXX1NCMV9BRERSKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHdvcmRfaWR4IFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRcdFx0aWYgKHJldCkge1xuJiM0MztcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2ZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0XHRnb3RvIGVuZF9tYWdpYztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHR3b3JkX2lkeCA9IDA7XG4mIzQzO1x0XHRcdGRhdGFfd3JpdHRlbiA9IDA7XG4mIzQzO1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBuZXh0X25vdGlmeSkpIHtcbiYjNDM7XHRcdFx0XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBpZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0Z290byBlbmRfbWFnaWM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XG4mIzQzO1x0Z290byBlbmRfbWFnaWM7XG4mIzQzO1xuJiM0Mzt3cml0ZV9lcnI6XG4mIzQzO1x0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LCBcJiMzNDtmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztlbmRfbWFnaWM6XG4mIzQzO1x0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xuJiM0MztcdG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuJiM0MztcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRjaGFyIGJ1ZlsxNl07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogTm8gY2hpcC1pZC9yZXZpc2lvbiBpbiBNQ1Vib290IChuZWVkcyB0aGUgZmlybXdhcmUgTU1EIG1haWxib3gpLiBUaGVcbiYjNDM7XHQgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlIFwmIzM0O3JlYWR5IHRvIGZsYXNoXCYjMzQ7IHNpZ25hbDogcmVwb3J0IGl0IG9ubHlcbiYjNDM7XHQgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0aWYgKCFSRUFEX09OQ0UocHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkpKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldS4ldS4ldVwmIzM0OyxcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuJiM0MztcdFx0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbiYjNDM7XHRcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXCYjMzQ7ZndcJiMzNDssIGJ1Zik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcJiMzNDtmd1wmIzM0OywgYnVmKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEEgMCBwYXJ0IG51bWJlciBtZWFucyB0aGUgQ0hJUCBJRCByZWFkIGZhaWxlZCBvciB0aGUgcGFydCBpc1xuJiM0MztcdCAqIHVuZnVzZWQ7IG9taXQgaXQgcmF0aGVyIHRoYW4gcHVibGlzaCBhIGJvZ3VzIFwmIzM0OzAwMDBcJiMzNDsgdGhhdCBmd3VwZFxuJiM0MztcdCAqIHdvdWxkIG1hdGNoIGZpcm13YXJlIGFnYWluc3QgLS0gaXQgdGhlbiBmYWxscyBiYWNrIHRvIHRoZSBkcml2ZXJcbiYjNDM7XHQgKiBuYW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWFzaWNfaWQpIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyUwNFhcJiMzNDssIHByaXYtXHUwMDNlYXNpY19pZCk7XG4mIzQzO1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBidWYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldVwmIzM0OywgcHJpdi1cdTAwM2Vhc2ljX3Jldik7XG4mIzQzO1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19SRVYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgYnVmKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsldS4ldS4ldVwmIzM0OyxcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwmIzM0O2Z3XCYjMzQ7LCBidWYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi9cbiYjNDM7XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dChyZXEsIFwmIzM0O2Z3XCYjMzQ7LCBidWYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIHBheWxvYWRfc2l6ZTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuJiM0MztcbiYjNDM7XHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7Y29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBcdTAwMjZwYXlsb2FkX3NpemUpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O2Zpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWZ1c2UgdG8gZmxhc2ggd2hpbGUgdGhlIGJhY2tncm91bmQgc2VsZi1oZWFsIGlzIHN0aWxsIGRyYWluaW5nLiAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlIFx1MDAyNlx1MDAyNiAhUkVBRF9PTkNFKHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5KSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtzd2l0Y2ggaXMgcmVjb3ZlcmluZyBhbiBpbnRlcnJ1cHRlZCBkb3dubG9hZCwgcmV0cnkgc2hvcnRseVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIHJlZmVyZW5jZXMgdGhlIHJlcHJvYmUgd29yayBuZWVkcyB0byByZXN0b3JlIG5vcm1hbCBvcGVyYXRpb25cbiYjNDM7XHQgKiBtdXN0IGJlIGhlbGQgYmVmb3JlIHRoZSBzd2l0Y2ggaXMgZGlzdHVyYmVkOyB0aGUgd29yayBpdHNlbGYgaXNcbiYjNDM7XHQgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdGdldF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsb2NhdGUgdGhlIHJlcHJvYmUga2lja29mZiBiZWZvcmUgZGlzdHVyYmluZyB0aGUgc3dpdGNoLCBzbyBhblxuJiM0MztcdCAqIC1FTk9NRU0gaGVyZSBjYW5ub3Qgc3RyYW5kIGl0IGZsYXNoZWQgYnV0IG5ldmVyIHJlcHJvYmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGtvID0gbXhsODYyeHhfcmVwcm9iZV9hbGxvYyhkcy1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICgha28pIHtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O2ZsYXNoOiBmbGFzaGluZyBzd2l0Y2ggdmlhIE1DVWJvb3QgcmVzY3VlIG1vZGVcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldiwgXCYjMzQ7Zmxhc2g6IHJ1bm5pbmcgZmlybXdhcmUgJXUuJXUuJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4mIzQzO1xuJiM0MztcdC8qIENsb3NlIHBvcnRzIHdoaWxlIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCBhbGl2ZSBzbyB0aGUgRFNBXG4mIzQzO1x0ICogY29yZSYjMzk7cyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xuJiM0MztcdCAqIHNvIHVzZXJzcGFjZSBjYW5ub3QgcmVvcGVuIHRoZW0gZHVyaW5nIHRoZSBmbGFzaC4gVGhlXG4mIzQzO1x0ICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdGlmIChkcC1cdTAwM2V1c2VyKSB7XG4mIzQzO1x0XHRcdGRldl9jbG9zZShkcC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChkcC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpXG4mIzQzO1x0XHRkZXZfY2xvc2UoZHAtXHUwMDNlY29uZHVpdCk7XG4mIzQzO1x0LyogVGhlIGJyaWRnZSBkZWZlcnMgdGhlIFNUUCBzdGF0ZSBjaGFuZ2VzIHRyaWdnZXJlZCBieSBjbG9zaW5nXG4mIzQzO1x0ICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoZGV2X2RlZmVycmVkX3Byb2Nlc3MoKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xuJiM0MztcdHByaXYtXHUwMDNlYmxvY2tfaG9zdCA9IHRydWU7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfd29yayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yayk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtXHUwMDNlZncsIHBheWxvYWRfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICBkcy1cdTAwM2VkZXZsaW5rKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7ZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLFxuJiM0MztcdFx0XHRcdCAgTURJT19NVVRFWF9ORVNURUQpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VibG9ja19ob3N0ID0gZmFsc2U7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXJlc2N1ZV9tb2RlID0gZmFsc2U7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJlZnJlc2ggdGhlIGNhY2hlZCB2ZXJzaW9ucyBzbyB0aGUgZmxhc2ggdXBkYXRlIG9ubHlcbiYjNDM7XHRcdCAqIGNvbXBsZXRlcyBvbmNlIHRoZSBuZXcgZmlybXdhcmUgaXMgY29uZmlybWVkIHJ1bm5pbmcgYW5kXG4mIzQzO1x0XHQgKiBkZXZsaW5rIGRldiBpbmZvIHJlcG9ydHMgaXQuIE11c3QgaGFwcGVuIGJlZm9yZSBzZXR0aW5nXG4mIzQzO1x0XHQgKiBza2lwX3RlYXJkb3duLCB3aGljaCBkaXNjYXJkcyBhbGwgZmlybXdhcmUgQVBJIHJlYWRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDtuZXcgZmlybXdhcmUgZGlkIG5vdCBiZWNvbWUgcmVhZHlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcbiYjNDM7XHRwcml2LVx1MDAzZXNraXBfdGVhcmRvd24gPSB0cnVlO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIEtpY2sgb2ZmIHRoZSByZXByb2JlIGxhc3Q7IHRoZSBraWNrb2ZmIHdhcyBhbGxvY2F0ZWQgdXAgZnJvbnQgYW5kXG4mIzQzO1x0ICogaXRzIG1vZHVsZSBhbmQgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGFscmVhZHkgaGVsZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNmtvLVx1MDAzZXdvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgJiM0MzsxLDIwIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTVhMODYyWFhfRldfSFxuJiM0MzsjZGVmaW5lIF9fTVhMODYyWFhfRldfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbiYjNDM7c3RydWN0IHdvcmtfc3RydWN0O1xuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4mIzQzO3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uMmRiZDA3NGMwZmUyNmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiAmIzQzOzE1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtZncuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWhvc3QuaFwmIzM0O1xuIFxuICNkZWZpbmUgQ1RSTF9CVVNZX01BU0tcdFx0XHRCSVQoMTUpXG5AQCAtMzQwLDYgJiM0MzszNDIsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSxcbiBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4gXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlc2tpcF90ZWFyZG93bikge1xuJiM0MztcdFx0cmV0ID0gcmVhZCA/IC1FTk9ERVYgOiAwO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlYmxvY2tfaG9zdCBcdTAwMjZcdTAwMjYgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkge1xuJiM0MztcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1heCA9IChzaXplICYjNDM7IDEpIC8gMjtcbiBcbiBcdHJldCA9IG14bDg2Mnh4X2J1c3lfd2FpdChwcml2KTtcbkBAIC00OTUsMTIgJiM0Mzs1MTIsNDkgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUdcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1x0MHhmZmYwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fT0ZGX01BU0tcdFx0MHgwMDBmXG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHRpbnQgcGh5ID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuJiM0MztcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0ID0gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHksIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXG4mIzQzO1x0XHRcdCAgICAgIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDApXG4mIzQzO1x0XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLLFxuJiM0MztcdFx0XHRcdCAgICAgIHZhbCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBteGw4NjJ4eF9ob3N0X2luaXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmssIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4pO1xuIH1cbiBcbiB2b2lkIG14bDg2Mnh4X2hvc3Rfc2h1dGRvd24oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgJiM0MzsxOCw3IEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqZGF0YSwgdTE2IHNpemUsXG4gXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXHUwMDI2KGRhdGEpLCBzaXplb2YoKGRhdGEpKSwgdHJ1ZSwgdHJ1ZSlcbiBcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcbiBcdHN3aXRjaCAocG9ydCkge1xuIFx0Y2FzZSA5IC4uLiAxNjpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCYjMzQ7U2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5pbmRleCA0NWQyMzdiM2E0MGYxMC4uOGQyMTc0N2NkZjE1ZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1hcGkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWNtZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWZ3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1waHlsaW5rLmhcJiMzNDtcbiBcbkBAIC03MSw2ICYjNDM7NzIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBteGw4NjJ4eF9ybW9uX3Jhbmdlc1tdID0ge1xuICNkZWZpbmUgTVhMODYyWFhfUkVBRFlfVElNRU9VVF9NU1x0MTAwMDBcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1BPTExfTVNcdFx0MTAwXG4gXG4mIzQzOy8qIENoaXAgSUQgcmVnaXN0ZXJzLCByZWFkIHZpYSBTWVNfTUlTQ19SRUdfUkQgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9DSElQSURfTFx0XHQweGMwZDI4ODg0XG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01cdFx0MHhjMGQyODg4OFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NXHRcdEdFTk1BU0soMTEsIDApXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTlx0R0VOTUFTSygxNCwgMTIpXG4mIzQzO1xuICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMXHRcdDB4ZTAwXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTXHRcdDB4ZTEyXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTXHRcdDB4ZTEzXG5AQCAtMjIyLDcgJiM0MzsyMzAsNDYgQEAgc3RhdGljIGludCBteGw4NjJ4eF9waHlfd3JpdGVfYzQ1X21paV9idXMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4gXHRyZXR1cm4gbXhsODYyeHhfcGh5X3dyaXRlX21tZChidXMtXHUwMDNlcHJpdiwgYWRkciwgZGV2YWRkLCByZWdudW0sIHZhbCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4mIzQzOy8qIFJlYWQgdGhlIHN0YXRpYyBjaGlwIHBhcnQgbnVtYmVyIGFuZCB2ZXJzaW9uIGZyb20gdGhlIENISVAgSURcbiYjNDM7ICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZVxuJiM0MzsgKiBjYWNoZWQgYXQgc2V0dXAgYW5kIGxlZnQgemVybyB3aGVuIHRoZSBzd2l0Y2ggaXMgaW4gcmVzY3VlIG1vZGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHJlZyA9IHt9O1xuJiM0MztcdHUxNiBjaGlwaWRfbCwgY2hpcGlkX207XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTCk7XG4mIzQzO1x0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGNoaXBpZF9sID0gbGUzMl90b19jcHUocmVnLnZhbCk7XG4mIzQzO1xuJiM0MztcdHJlZy5hZGRyID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfQ0hJUElEX00pO1xuJiM0MztcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRjaGlwaWRfbSA9IGxlMzJfdG9fY3B1KHJlZy52YWwpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWFzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8XG4mIzQzO1x0XHRcdEZJRUxEX0dFVChNWEw4NjJYWF9DSElQSURfTV9QTlVNTSwgY2hpcGlkX20pIFx1MDAzY1x1MDAzYyA0O1xuJiM0MztcdHByaXYtXHUwMDNlYXNpY19yZXYgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTiwgY2hpcGlkX20pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG14bDg2Mnh4X3dhaXRfcmVhZHkgLSB3YWl0IGZvciB0aGUgc3dpdGNoIGZpcm13YXJlIHRvIGJlY29tZSBvcGVyYXRpb25hbFxuJiM0MzsgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2VcbiYjNDM7ICpcbiYjNDM7ICogUG9sbCB0aGUgZmlybXdhcmUgdW50aWwgaXQgcmVwb3J0cyBpdHMgdmVyc2lvbiBhbmQgYWNjZXB0c1xuJiM0MzsgKiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLCB0aGVuIGNhY2hlIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjaGlwIElELlxuJiM0MzsgKiBUYWtlcyBhdCBsZWFzdCB0d28gc2Vjb25kcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB2ZXIgPSB7fTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzLCB0aW1lb3V0O1xuQEAgLTI1NCw2ICYjNDM7MzAxLDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciA9IHZlci5pdl9tYWpvcjtcbiBcdFx0cHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yID0gdmVyLml2X21pbm9yO1xuIFx0XHRwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24gPSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChwcml2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgY2hpcCBJRDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBFUlJfUFRSKHJldCkpO1xuIFx0XHRyZXR1cm4gMDtcbiBcbiBub3RfcmVhZHlfeWV0OlxuQEAgLTYyMiwxNSAmIzQzOzY3NCw0OSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGludCBuX3VzZXJfcG9ydHMgPSAwLCBtYXhfdmxhbnM7XG4gXHRpbnQgaW5ncmVzc19maW5hbHMsIHZpZF9ydWxlcztcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4tXHRpbnQgcmV0LCBpO1xuJiM0MztcdGludCByZXQsIGksIHJlc2N1ZTtcbiBcbi1cdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiBEZXRlY3QgdGhlIGxvYWRlciBvdmVyIFNCIFBESSBmaXJzdDogaXQgbmVlZHMgbm8gZmlybXdhcmUsIHVubGlrZSB0aGVcbiYjNDM7XHQgKiBDNDUgQVBJIChteGw4NjJ4eF9yZXNldC93YWl0X3JlYWR5KSB3aGljaCBzcGV3cyBDUkMgZXJyb3JzIHdoZW4gbm9uZVxuJiM0MztcdCAqIGFuc3dlcnMuIFRvdWNoIEM0NSBvbmx5IG9uY2UgcmVzY3VlIGlzIHJ1bGVkIG91dC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4mIzQzO1x0aWYgKHJlc2N1ZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXNjdWU7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKSB7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdC8qIHRoZSByZXNldCBtYXkgb25seSBub3cgaGF2ZSB0cmlnZ2VyZWQgcmVzY3VlIG1vZGUgKi9cbiYjNDM7XHRcdFx0cmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xuJiM0MztcdFx0XHRpZiAocmVzY3VlIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXNjdWU7XG4mIzQzO1x0XHRcdGlmIChyZXNjdWUgPT0gTVhMODYyWFhfTk9UX1JFU0NVRSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IHJlc2N1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSkge1xuJiM0MztcdFx0XHRkZXZfd2Fybihkcy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cJiMzNDspO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogRHJhaW4gdGhlIHdlZGdlZCBkb3dubG9hZCBpbiB0aGUgYmFja2dyb3VuZCBzbyBpdFxuJiM0MztcdFx0XHQgKiBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrOyBpbmZvIGFuZCBmbGFzaCBiZWNvbWVcbiYjNDM7XHRcdFx0ICogYXZhaWxhYmxlIG9uY2UgcmVhZHkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRkZXZfd2Fybihkcy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHdpdGggYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJlY292ZXJpbmcgaW4gYmFja2dyb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsIFx1MDAyNnByaXYtXHUwMDNlcmVzY3VlX2hlYWxfd29yayk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc2VyZGVzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXNlcmRlc19wb3J0cyk7IGkmIzQzOyYjNDM7KVxuQEAgLTcxNSwxMSAmIzQzOzgwMSwyMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc3RhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpXG4gc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdHJldHVybiBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4ge1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSlcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuIH1cbkBAIC0xMzM3LDYgJiM0MzsxNDMzLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdC8qIERTQSByZWluaXRzIGZhaWxlZCB1c2VyIHBvcnRzIGFzIHVudXNlZDsgc2hhcmVkIHBvcnRzIG11c3RcbiYjNDM7XHQgKiBzdWNjZWVkIGZvciB0aGUgdHJlZSB0byByZWdpc3Rlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdHJldHVybiBkc2FfcG9ydF9pc191c2VyKGRwKSA/IC1FTk9ERVYgOiAwO1xuJiM0MztcbiBcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMTU3Miw2ICYjNDM7MTY3NCwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ZXRoZXJfYWRkcl9jb3B5KHFwYXJhbS5tYWMsIG1kYi1cdTAwM2VhZGRyKTtcbiBcbiBcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIE1YTDg2MlhYX01BQ19UQUJMRUVOVFJZUVVFUlksIHFwYXJhbSk7XG4mIzQzO1x0LyogLUVOT0RFVjogdGhlIGZpcm13YXJlIGFuZCBpdHMgTUFDIHRhYmxlIGFyZSBnb25lLCBub3RoaW5nIGxlZnRcbiYjNDM7XHQgKiB0byBkZWxldGVcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmV0ID09IC1FTk9ERVYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTYyOCw2ICYjNDM7MTczNSw5IEBAIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRzd2l0Y2ggKHN0YXRlKSB7XG4gXHRjYXNlIEJSX1NUQVRFX0RJU0FCTEVEOlxuIFx0XHRwYXJhbS5wb3J0X3N0YXRlID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfU1RQX1BPUlRfU1RBVEVfRElTQUJMRSk7XG5AQCAtMjAxNSw2ICYjNDM7MjEyNSwxMiBAQCBzdGF0aWMgdm9pZCBteGw4NjJ4eF9zdGF0c193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IHByaXYtXHUwMDNlZHM7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuIFxuJiM0MztcdC8qIEEgZ2V0X3N0YXRzNjQoKSByZS1hcm0gY2FuIHJhY2UgdGhlIGZsYXNoIHRlYXJkb3duJiMzOTtzIFdPUktfU1RPUFBFRFxuJiM0MztcdCAqIHNldCBhbmQgY2FuY2VsOyBiYWlsIGhlcmUgc28gYSBzdHJheSBwb2xsIG5ldmVyIHJ1bnMgZHVyaW5nIGEgZmxhc2guXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcylcbiBcdFx0bXhsODYyeHhfc3RhdHNfcG9sbChkcywgZHAtXHUwMDNlaW5kZXgpO1xuIFxuQEAgLTIwODYsNiAmIzQzOzIyMDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLFxuIFx0LmdldF9ybW9uX3N0YXRzID0gbXhsODYyeHhfZ2V0X3Jtb25fc3RhdHMsXG4gXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcbiYjNDM7XHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXG4mIzQzO1x0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG5pbmRleCA0MzJhNWYzZjJlMDhlNi4uMTI5OTg1ZjJiYmYzZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbkBAIC0xNCw2ICYjNDM7MTQsMTAgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXY7XG4gI2RlZmluZSBNWEw4NjJYWF9GSVJTVF9TRVJERVNfUE9SVFx0OVxuICNkZWZpbmUgTVhMODYyWFhfU0VSREVTX1NMT1RTXHRcdDRcbiBcbiYjNDM7LyogbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCkgcmV0dXJuIGNvZGVzIChuZWdhdGl2ZSB2YWx1ZXMgYXJlIGVycm9ycykgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFXHRcdDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9JTl9SRVNDVUVcdFx0MVxuJiM0MztcbiAjZGVmaW5lIE1YTDg2MlhYX0RFRkFVTFRfQlJJREdFXHRcdDBcbiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VTXHRcdDQ4XG4gI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFX1BPUlRTXHQxMjhcbkBAIC0zMDMsNiAmIzQzOzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7XG4gICogICAgICAgICAgICAgICAgICAgICAgZmxvb2RpbmcpXG4gICogQGZ3X3ZlcnNpb246ICAgICAgICAgY2FjaGVkIGZpcm13YXJlIHZlcnNpb24sIHBvcHVsYXRlZCBhdCBwcm9iZSBhbmRcbiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKVxuJiM0MzsgKiBAYXNpY19pZDogICAgICAgICAgICBjaGlwIHBhcnQgbnVtYmVyIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rIFwmIzM0O2FzaWMuaWRcJiMzNDsgZml4ZWQgdmVyc2lvblxuJiM0MzsgKiBAYXNpY19yZXY6ICAgICAgICAgICBjaGlwIHZlcnNpb24gcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycyxcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgXCYjMzQ7YXNpYy5yZXZcJiMzNDsgZml4ZWQgdmVyc2lvblxuICAqIEBzZXJkZXNfcG9ydHM6ICAgICAgIFNlckRlcyBpbnRlcmZhY2VzIGluY2wuIHN1Yi1pbnRlcmZhY2VzIGluIGNhc2Ugb2ZcbiAgKiAgICAgICAgICAgICAgICAgICAgICAxMEdfUVhHTUlJIG9yIFFTR01JSVxuICAqIEBzZXJkZXNfcmVmY291bnQ6ICAgIHBlci1YUENTIGNvdW50IG9mIHN1Yi1wb3J0cyBlbmFibGVkIGJ5IHBoeWxpbms7XG5AQCAtMzE5LDYgJiM0MzszMjcsMTUgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xuICAqIEBldmxhbl9pbmdyZXNzX3NpemU6IHBlci1wb3J0IGluZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXG4gICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemVcbiYjNDM7ICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSlcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2hcbiYjNDM7ICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93blxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZVxuJiM0MzsgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGZhaWwgZmFzdCxcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3NcbiYjNDM7ICogQHJlc2N1ZV9yZWFkeTogICAgICAgKHJlc2N1ZV9tb2RlKSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSBhbmQgd2lsbCBhY2NlcHRcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgYSBmbGFzaDsgZmFsc2Ugd2hpbGUgcmVzY3VlX2hlYWxfd29yayBpcyBkcmFpbmluZ1xuJiM0MzsgKiBAcmVzY3VlX2hlYWxfd29yazogICBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBkcmFpbmluZyBhIHdlZGdlZCBkb3dubG9hZCB0byBSRUFEWVxuICAqIEBzdGF0c193b3JrOiAgICAgICAgIHBlcmlvZGljIHdvcmsgaXRlbSB0aGF0IHBvbGxzIFJNT04gaGFyZHdhcmUgY291bnRlcnNcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xuICAqL1xuQEAgLTMyNiw5ICYjNDM7MzQzLDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbiBcdHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmNfZXJyX3dvcms7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2N1ZV9oZWFsX3dvcms7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTE2IGRyb3BfbWV0ZXI7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiBmd192ZXJzaW9uO1xuJiM0MztcdHUxNiBhc2ljX2lkO1xuJiM0MztcdHU4IGFzaWNfcmV2O1xuIFx0c3RydWN0IG14bDg2Mnh4X3BjcyBzZXJkZXNfcG9ydHNbOF07XG4gXHRpbnQgc2VyZGVzX3JlZmNvdW50WzJdO1xuIFx0c3RydWN0IG11dGV4IHNlcmRlc19sb2NrO1xuQEAgLTMzNyw3ICYjNDM7MzU3LDEzIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcbiBcdHUxNiBldmxhbl9pbmdyZXNzX3NpemU7XG4gXHR1MTYgZXZsYW5fZWdyZXNzX3NpemU7XG4gXHR1MTYgdmZfYmxvY2tfc2l6ZTtcbiYjNDM7XHRib29sIGJsb2NrX2hvc3Q7XG4mIzQzO1x0Ym9vbCBza2lwX3RlYXJkb3duO1xuJiM0MztcdGJvb2wgcmVzY3VlX21vZGU7XG4mIzQzO1x0Ym9vbCByZXNjdWVfcmVhZHk7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7XG4gfTtcbiBcbiYjNDM7aW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9fTVhMODYyWFhfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcbmluZGV4IDhjMTZlZjIzY2MxMDJhLi5jOWUxOTM0OGRlNjE5MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaFxuQEAgLTExNzAsNiAmIzQzOzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuIFx0aW50XHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1x0aW50XHQoKmRldmxpbmtfZmxhc2hfdXBkYXRlKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFx0aW50XHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uZDYwMjIyNjdhODM5Y2QgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS9kZXZsaW5rLmNcbkBAIC0yMCw2ICYjNDM7MjAsMTUgQEAgc3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4gXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pXG5AQCAtMTY3LDE4ICYjNDM7MTc2LDMxIEBAIGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRscCxcbiBcdFx0XHRcdFx0XHRcdHBfbWF4KTtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XG4tXHQuaW5mb19nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LFxuLVx0LnNiX3Bvb2xfZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX2dldCxcbi1cdC5zYl9wb29sX3NldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9zZXQsXG4tXHQuc2JfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsXG4tXHQuc2JfcG9ydF9wb29sX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXG4tXHQuc2JfdGNfcG9vbF9iaW5kX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9nZXQsXG4tXHQuc2JfdGNfcG9vbF9iaW5kX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsXG4tXHQuc2Jfb2NjX3NuYXBzaG90XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFxuLVx0LnNiX29jY19tYXhfY2xlYXJcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFxuLVx0LnNiX29jY19wb3J0X3Bvb2xfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsXG4mIzQzOy8qIFRoZSBkZXZsaW5rIGNvcmUgcmVqZWN0cyBmbGFzaCByZXF1ZXN0cyB1cCBmcm9udCB3aGVuIHRoZSBmbGFzaF91cGRhdGVcbiYjNDM7ICogb3AgaXMgYWJzZW50LCBiZWZvcmUgZmV0Y2hpbmcgdGhlIGZpcm13YXJlIGZpbGUgZnJvbSB1c2Vyc3BhY2UuIE9ubHlcbiYjNDM7ICogaW5zdGFsbCB0aGUgb3AgZm9yIHN3aXRjaGVzIHdob3NlIGRyaXZlciBpbXBsZW1lbnRzIGl0LCBzbyB0aGF0XG4mIzQzOyAqIHVuc3VwcG9ydGVkIHJlcXVlc3RzIGtlZXAgZmFpbGluZyBlYXJseS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRFNBX0RFVkxJTktfT1BTXHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdC5pbmZvX2dldFx0XHRcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXHRcdFxcXG4mIzQzO1x0LnNiX3Bvb2xfZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX2dldCxcdFxcXG4mIzQzO1x0LnNiX3Bvb2xfc2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcdFxcXG4mIzQzO1x0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFx0XFxcbiYjNDM7XHQuc2JfcG9ydF9wb29sX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXHRcXFxuJiM0MztcdC5zYl90Y19wb29sX2JpbmRfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXFxcbiYjNDM7XHQuc2JfdGNfcG9vbF9iaW5kX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsIFxcXG4mIzQzO1x0LnNiX29jY19zbmFwc2hvdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19zbmFwc2hvdCxcdFxcXG4mIzQzO1x0LnNiX29jY19tYXhfY2xlYXJcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFx0XFxcbiYjNDM7XHQuc2Jfb2NjX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCwgXFxcbiBcdC5zYl9vY2NfdGNfcG9ydF9iaW5kX2dldFx0PSBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldCxcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xuJiM0MztcdERTQV9ERVZMSU5LX09QU1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7XG4mIzQzO1x0RFNBX0RFVkxJTktfT1BTXG4mIzQzO1x0LmZsYXNoX3VwZGF0ZVx0XHRcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxuIH07XG4gXG4gaW50IGRzYV9kZXZsaW5rX3BhcmFtX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcbkBAIC0zNzgsMTIgJiM0Mzs0MDAsMTYgQEAgdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gaW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHM7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXG4mIzQzO1x0b3BzID0gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlID8gXHUwMDI2ZHNhX2RldmxpbmtfZmxhc2hfb3BzXG4mIzQzO1x0XHRcdFx0XHQgICAgOiBcdTAwMjZkc2FfZGV2bGlua19vcHM7XG4mIzQzO1xuIFx0LyogQWRkIHRoZSBzd2l0Y2ggdG8gZGV2bGluayBiZWZvcmUgY2FsbGluZyBzZXR1cCwgc28gdGhhdCBzZXR1cCBjYW5cbiBcdCAqIGFkZCBkcGlwZSB0YWJsZXNcbiBcdCAqL1xuLVx0ZGwgPSBkZXZsaW5rX2FsbG9jKFx1MDAyNmRzYV9kZXZsaW5rX29wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtXHUwMDNlZGV2KTtcbiYjNDM7XHRkbCA9IGRldmxpbmtfYWxsb2Mob3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cdTAwM2VkZXYpO1xuIFx0aWYgKCFkbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkOTBlMGRmNDcyZWQ1ZWU4YjYzYTBjYjNjYThmM2YxYTQ4NWM1NjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxMjo0NToxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdAppbmRleCA0NzQ1MTQ4ZmVjZjRmZS4uMDU4OTk5ZDBkYzU2ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QKQEAgLTk0LDYgJiM0Mzs5NCw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy4KICAgIG1seDUKICAgIG1seHN3CiAgICBtdjg4ZTZ4eHgKJiM0MzsgICBteGw4NjJ4eAogICAgbmV0ZGV2c2ltCiAgICBuZnAKICAgIG9jdGVvbnR4MgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iM2U5ZjdkNGQ0OTY5ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdApAQCAtMCwwICYjNDM7MSw2MyBAQAomIzQzOy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7bXhsODYyeHggZGV2bGluayBzdXBwb3J0CiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRldmxpbmsgZmVhdHVyZXMgaW1wbGVtZW50ZWQgYnkgdGhlCiYjNDM7YGBteGw4NjJ4eGBgIGRldmljZSBkcml2ZXIuCiYjNDM7CiYjNDM7SW5mbyB2ZXJzaW9ucwomIzQzOz09PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnMKJiM0MzsKJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkCiYjNDM7ICAgOndpZHRoczogNSA1IDUgODUKJiM0MzsKJiM0MzsgICAqIC0gTmFtZQomIzQzOyAgICAgLSBUeXBlCiYjNDM7ICAgICAtIEV4YW1wbGUKJiM0MzsgICAgIC0gRGVzY3JpcHRpb24KJiM0MzsgICAqIC0gYGBhc2ljLmlkYGAKJiM0MzsgICAgIC0gZml4ZWQKJiM0MzsgICAgIC0gODYyOAomIzQzOyAgICAgLSBUaGUgY2hpcCBwYXJ0IG51bWJlciByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLiBOb3QKJiM0MzsgICAgICAgcmVwb3J0ZWQgZm9yIGEgc3dpdGNoIHNpdHRpbmcgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBhcyB0aGUKJiM0MzsgICAgICAgcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2l0aCBhIHJ1bm5pbmcgZmlybXdhcmUuCiYjNDM7ICAgKiAtIGBgYXNpYy5yZXZgYAomIzQzOyAgICAgLSBmaXhlZAomIzQzOyAgICAgLSAwCiYjNDM7ICAgICAtIFRoZSBjaGlwIHZlcnNpb24gcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90IHJlcG9ydGVkCiYjNDM7ICAgICAgIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUgZWl0aGVyLgomIzQzOyAgICogLSBgYGZ3YGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIDEuMC43MAomIzQzOyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBzd2l0Y2gsIHJlcG9ydGVkIGFzIGJvdGgKJiM0MzsgICAgICAgcnVubmluZyBhbmQgc3RvcmVkIHNpbmNlIHRoZSBzd2l0Y2ggYm9vdHMgaXQgZnJvbSBpdHMgb3duIGZsYXNoLgomIzQzOyAgICAgICBJbiBNQ1Vib290IHJlc2N1ZSBtb2RlIG5vdGhpbmcgaXMgcmVwb3J0ZWQgd2hpbGUgYW4gaW50ZXJydXB0ZWQKJiM0MzsgICAgICAgZG93bmxvYWQgaXMgc3RpbGwgYmVpbmcgcmVjb3ZlcmVkIGluIHRoZSBiYWNrZ3JvdW5kOyBvbmNlIHRoZQomIzQzOyAgICAgICBsb2FkZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IGltYWdlIHRoZSB2ZXJzaW9uIGlzIHJlcG9ydGVkIChhcwomIzQzOyAgICAgICBib3RoIHJ1bm5pbmcgYW5kIHN0b3JlZCksIHdoaWNoIGlzIHRoZSBzaWduYWwgdGhhdCBhIGZsYXNoIHdpbGwgYmUKJiM0MzsgICAgICAgYWNjZXB0ZWQuIEl0IHJlYWRzICYjMzQ7MC4wLjAmIzM0OyB3aGVuIHRoZSBzd2l0Y2ggY2FtZSB1cCBzdHJhaWdodCBpbnRvCiYjNDM7ICAgICAgIE1DVWJvb3Qgd2l0aG91dCBldmVyIHJ1bm5pbmcgZmlybXdhcmUuCiYjNDM7CiYjNDM7Rmxhc2ggdXBkYXRlCiYjNDM7PT09PT09PT09PT09CiYjNDM7CiYjNDM7VGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBgYGRldmxpbmsgZGV2IGZsYXNoYGAuCiYjNDM7VGhlIHNpZ25lZCBmaXJtd2FyZSBpbWFnZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgc3dpdGNoIG92ZXIgdGhlIHNhbWUKJiM0MztNRElPIGJ1cyB3aGljaCBpcyBhbHNvIHVzZWQgdG8gbWFuYWdlIHRoZSBzd2l0Y2gsIHRoZW4gdmVyaWZpZWQgYW5kCiYjNDM7aW5zdGFsbGVkIGJ5IHRoZSBNQ1Vib290IGJvb3Rsb2FkZXIgcnVubmluZyBvbiB0aGUgc3dpdGNoLiBBbGwgcG9ydHMKJiM0MztvZiB0aGUgc3dpdGNoIGFyZSBjbG9zZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdXBkYXRlIGFuZCB0aGUgZHJpdmVyCiYjNDM7cmVwcm9iZXMgdGhlIHN3aXRjaCBhZnRlciBpdCBoYXMgcmVib290ZWQgaW50byB0aGUgbmV3IGZpcm13YXJlLiBBCiYjNDM7Y29tcGxldGUgZmxhc2ggYW5kIHJlcHJvYmUgY3ljbGUgdGFrZXMgYWJvdXQgb25lIG1pbnV0ZS4KJiM0MzsKJiM0MztBIHN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCBlLmcuIGFmdGVyIGFuIGludGVycnVwdGVkCiYjNDM7dXBkYXRlLCBpcyByZWdpc3RlcmVkIHdpdGhvdXQgdXNlciBwb3J0cy4gSWYgdGhlIHByZXZpb3VzIGRvd25sb2FkIHdhcwomIzQzO2ludGVycnVwdGVkIG1pZC10cmFuc2ZlciB0aGUgbG9hZGVyIGlzIHdlZGdlZDsgdGhlIGRyaXZlciBkcmFpbnMgaXQKJiM0MztiYWNrIHRvIGEgY2xlYW4gcmVhZHkgc3RhdGUgaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGNhbiBlYXNpbHkgdGFrZQomIzQzO21vcmUgdGhhbiAxMCBtaW51dGVzLiBEdXJpbmcgdGhhdCByZWNvdmVyeSBgYGRldmxpbmsgZGV2IGluZm9gYCByZXBvcnRzCiYjNDM7bm8gZmlybXdhcmUgdmVyc2lvbiBhbmQgYGBkZXZsaW5rIGRldiBmbGFzaGBgIHJldHVybnMgYGAtRUJVU1lgYC4KJiM0MztPbmNlIHRoZSBsb2FkZXIgaXMgcmVhZHkgdGhlIGZpcm13YXJlIHZlcnNpb24gYXBwZWFycyBhbmQgZmxhc2hpbmcgYQomIzQzO2Zpcm13YXJlIGltYWdlIHRocm91Z2ggdGhlIHJlZ3VsYXIgdXBkYXRlIGZsb3cgcmVjb3ZlcnMgdGhlIHN3aXRjaC4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNjBjZmYwMDk1M2RjYmUuLjNhNTVlZDJiYWQ5Y2JhIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTYxMDcsNiAmIzQzOzE2MTA3LDcgQEAgTToJRGFuaWVsIEdvbGxlICZsdDtkYW5pZWxAbWFrcm90b3BpYS5vcmcmZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tYXhsaW5lYXIsbXhsODYyeHgueWFtbAomIzQzO0Y6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdAogRjoJZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4LwogRjoJbmV0L2RzYS90YWdfbXhsODYyeHguYwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlCkBAIC0xLDMgJiM0MzsxLDMgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIG9iai0kKENPTkZJR19ORVRfRFNBX01YTDg2MikgJiM0Mzs9IG14bDg2Mnh4X2RzYS5vCi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8KJiM0MztteGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8gbXhsODYyeHgtZncubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oCmluZGV4IGExODBhNWRlY2ZmYzAxLi42Zjc3MTg5NTk4NGNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaApAQCAtMTIyNCw2ICYjNDM7MTIyNCwxNiBAQCBzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gewogCV9fbGUzMiBpdl9idWlsZF9udW07CiB9IF9fcGFja2VkOwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgLSBTeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZQomIzQzOyAqIEBhZGRyOiAzMi1iaXQgcmVnaXN0ZXIgYWRkcmVzcwomIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbHVlCiYjNDM7ICovCiYjNDM7c3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgewomIzQzOwlfX2xlMzIgYWRkcjsKJiM0MzsJX19sZTMyIHZhbDsKJiM0Mzt9IF9fcGFja2VkOwomIzQzOwogLyoqCiAgKiBlbnVtIG14bDg2Mnh4X3BvcnRfdHlwZSAtIFBvcnQgVHlwZQogICogQE1YTDg2MlhYX0xPR0lDQUxfUE9SVDogTG9naWNhbCBQb3J0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmgKaW5kZXggYzg3YTk1NWMxM2M0OGUuLmE4NjU0MjVhYTYxZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oCkBAIC03MCw3ICYjNDM7NzAsOSBAQAogI2RlZmluZSBJTlRfR1BIWV9SRUFECQkJKEdQWV9HUFkyWFhfTUFHSUMgJiM0MzsgMHgxKQogI2RlZmluZSBJTlRfR1BIWV9XUklURQkJCShHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MikKIAomIzQzOyNkZWZpbmUgU1lTX01JU0NfRldfVVBEQVRFCQkoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgxKQogI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OCQkoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgyKQomIzQzOyNkZWZpbmUgU1lTX01JU0NfUkVHX1JECQkJKFNZU19NSVNDX01BR0lDICYjNDM7IDB4OCkKIAogI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUcJKE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgxKQogI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19HRVRfU1RBVEUJKE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNTRiMzU1NDUzNGMyYWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYwpAQCAtMCwwICYjNDM7MSw5NDkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4CiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlICZsdDtkYW5pZWxAbWFrcm90b3BpYS5vcmcmZ3Q7CiYjNDM7ICoKJiM0MzsgKiBTQiBQREkgLSBmaXJtd2FyZSBkb3dubG9hZCBpbnRlcmZhY2Ugb3ZlciBjbGF1c2UtMjIgU01ESU8KJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsgKgomIzQzOyAqIFRoZSBNeEw4NjJ4eCBNQ1Vib290IGxvYWRlciBhY2NlcHRzIGEgZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCBmb3VyICYjMzQ7U0IgUERJJiMzNDsKJiM0MzsgKiByZWdpc3RlcnMgaW4gdGhlIHN3aXRjaCBTTURJTyByZWdpc3RlciBzcGFjZS4gSXQgcnVucyB3aGVuZXZlciBubyBXU1AKJiM0MzsgKiBmaXJtd2FyZSBpcyBhY3RpdmU6IHRoZSBub3JtYWwgZmlybXdhcmUgdXBkYXRlIGVudGVycyBpdCBkZWxpYmVyYXRlbHkgLSB0aGUKJiM0MzsgKiBTWVNfTUlTQ19GV19VUERBVEUgQVBJIGNvbW1hbmQgc2V0cyBhIHN0aWNreSByZXNjdWUgYml0IGFuZCByZWJvb3RzIGludG8KJiM0MzsgKiBNQ1Vib290IC0gYW5kIHRoZSBsb2FkZXIgYWxzbyBzdGF5cyBoZXJlIHdoZW4gdGhlIHN0b3JlZCBXU1AgZmlybXdhcmUgZmFpbHMKJiM0MzsgKiBpdHMgYm9vdC10aW1lIGludGVncml0eSBjaGVjay4gVGhpcyBkcml2ZXIgZHJpdmVzIHRoZSBsb2FkZXImIzM5O3MgMHhjNTVjCiYjNDM7ICogJiMzNDtjb25zb2xlJiMzNDsgZG93bmxvYWQgcGF0aC4KJiM0MzsgKgomIzQzOyAqIFNNRElPIHJlZ2lzdGVyIGFjY2VzcyAobXhsODYyeHhfc21kaW9fcmVhZC93cml0ZSk6CiYjNDM7ICogICBNSUkgcmVnIDB4MWYgOj0gJmx0O3NiX3BkaV9yZWcmZ3Q7ICAgICAgOyBhZGRyZXNzL3BhZ2UgbGF0Y2gKJiM0MzsgKiAgIE1JSSByZWcgMHgwMCA6PSAvID0mZ3Q7ICZsdDt1MTYgZGF0YSZndDsgICA7IGRhdGEgd2luZG93CiYjNDM7ICoKJiM0MzsgKiBTQiBQREkgcmVnaXN0ZXJzIChob3N0IG5hbWUvYWRkciAgLSZndDsgIE1DVSBtYWlsYm94KToKJiM0MzsgKiAgIENUUkwgMHhlMTAwIC0mZ3Q7IDB4YzA5Mzg0MDAgICBtb2RlOiBSU1Q9MHgwMCAgUkQ9MHgwMSAgV1I9MHgwMgomIzQzOyAqICAgQUREUiAweGUxMDEgLSZndDsgMHhjMDkzODQwNCAgIFNCIHRhcmdldCB3b3JkIGFkZHJlc3MgKFNCMSBiYW5rID0gMHg3ODAwKQomIzQzOyAqICAgREFUQSAweGUxMDIgLSZndDsgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZAomIzQzOyAqICAgU1RBVCAweGUxMDMgLSZndDsgMHhjMDkzODQwYyAgIGhhbmRzaGFrZTogYSBtYWdpYyAoYmVsb3cpIG9yIGEgYnl0ZSBjb3VudAomIzQzOyAqCiYjNDM7ICogU1RBVCBtYWdpY3M6CiYjNDM7ICogICBSRUFEWSAgMHhjNTVjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGNvbnNvbGUgbG9vcCAgICAgICAgKHRoaXMgZHJpdmVyKQomIzQzOyAqICAgRExfUkRZIDB4YzMzYyAgIGxvYWRlciBpZGxlIGluIHRoZSBmbGFzaGxlc3MgbG9vcAomIzQzOyAqICAgU1RBUlQgIDB4ZjQ4ZiAgIGhvc3QgICAtJmd0OyBiZWdpbiBkb3dubG9hZCBzZXNzaW9uCiYjNDM7ICogICBBQ0sgICAgMHhmNDkwICAgbG9hZGVyIC0mZ3Q7IFNUQVJUIGFja25vd2xlZGdlZCAoU1RBUlQgJiM0MzsgMSkKJiM0MzsgKiAgIEVORCAgICAweDNjYzMgICBob3N0ICAgLSZndDsgZW5kIG9mIHRyYW5zZmVyIC8gZmluYWxpc2UKJiM0MzsgKiAgIFJEUkVHICAweGUyYzAgICBob3N0ICAgLSZndDsgcmVnaXN0ZXItcmVhZCBjb21tYW5kICh8IGluZGV4KSwgc2VlIGJlbG93CiYjNDM7ICoKJiM0MzsgKiBDb25zb2xlIGZsYXNoIHBhdGggKFNUQVQ9MHhjNTVjKSAtIG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKCk6CiYjNDM7ICoKJiM0MzsgKiAgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcgomIzQzOyAqICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tCiYjNDM7ICogICByZXNldCAoQ1RSTD1BRERSPURBVEE9MCkKJiM0MzsgKiAgIHJlYWQgU1RBVCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDB4YzU1YyAgIChSRUFEWSwgaWRsZSkKJiM0MzsgKiAgIFNUQVQgOj0gU1RBUlQoMHhmNDhmKSAgLS0tLS0tLS0tLS0tLS0mZ3Q7CiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICZsdDstLS0tLS0tLS0tLS0tLSBTVEFUID0gMHhmNDkwIChBQ0spCiYjNDM7ICogICBDVFJMIDo9IFdSCiYjNDM7ICogICBEQVRBIDo9IGhkclswLi45XSAgKDIwLWJ5dGUgaGVhZGVyOiB0eXBlLHNpemUxLGNyYzEsc2l6ZTIsY3JjMikKJiM0MzsgKiAgIHJlc2V0OyBTVEFUIDo9IDIwIChoZWFkZXIgbGVuKSAgLS0tLS0mZ3Q7IHBhcnNlIGhkcjsgcl9yZW1haW49c2l6ZTEmIzQzO3NpemUyOwomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJBU0UgdGFyZ2V0IHJlZ2lvbihzKQomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7LS0tLS0tLS0tLS0tLS0gU1RBVD0yMSAobGVuJiM0MzsxKSwgdGhlbiBTVEFUPTAKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpCiYjNDM7ICogICAtLSBwYXlsb2FkLCBzdHJlYW1lZCBpbiBzbGljZXM6IC0tCiYjNDM7ICogICBDVFJMIDo9IFdSCiYjNDM7ICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLgomIzQzOyAqICAgICBhdCB3b3JkIDE2Mzg0OiByZXNldDsgQUREUjo9MHg3ODAwOyBDVFJMOj1XUiAgIChoYWxmLWJhbmsgLSZndDsgU0IxKQomIzQzOyAqICAgICBhdCB3b3JkIDMyNzYwOiBmbHVzaCBzbGljZToKJiM0MzsgKiAgICAgICAgcmVzZXQ7IFNUQVQgOj0gJmx0O2J5dGVzX3RoaXNfc2xpY2UmZ3Q7IC0tLSZndDsgcl9yZW1haW4gLT0gYnl0ZXM7IHByb2dyYW0KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0Oy0tLS0tLS0tLS0tLS0tLS0tLS0gU1RBVD0wICAocmVhZHkgZm9yIG5leHQgc2xpY2UpCiYjNDM7ICogICAuLi4gcmVwZWF0IHVudGlsIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHNlbnQgLi4uCiYjNDM7ICogICBTVEFUIDo9IEVORCgweDNjYzMpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0mZ3Q7IGZpbmFsaXNlCiYjNDM7ICoKJiM0MzsgKiBUaGUgcl9yZW1haW4gPT0gMCBydWxlIChjcml0aWNhbCk6CiYjNDM7ICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyCiYjNDM7ICogICBkb2VzIHJfcmVtYWluIC09IGNvdW50IGFuZCBzdGF5cyBpbiB0aGUgcmVjZWl2ZSBsb29wIHdoaWxlIHJfcmVtYWluICE9IDAuCiYjNDM7ICogICBJdCBsZWF2ZXMgdGhlIGxvb3AsIHZhbGlkYXRlcywgYW5kIC0gaWYgaXQgd2FzIGluIHJlc2N1ZSAtIGNsZWFycyBpdHMKJiM0MzsgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHMKJiM0MzsgKiAgIEVYQUNUTFkgMC4gQSBjb3VudCBsYXJnZXIgdGhhbiByX3JlbWFpbiB1bmRlcmZsb3dzIHRoZSAzMi1iaXQgY291bnRlciBhbmQKJiM0MzsgKiAgIHdlZGdlcyB0aGUgbG9hZGVyIHVudGlsIGEgcG93ZXIgY3ljbGUuIEhlbmNlOgomIzQzOyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nOwomIzQzOyAqICAgICAtIGludGVycnVwdGVkLWRvd25sb2FkIHJlY292ZXJ5IGZlZWRzIDEgYnl0ZSBhdCBhIHRpbWUgKHNlZSBiZWxvdykuCiYjNDM7ICoKJiM0MzsgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKToKJiM0MzsgKiAgIEEgaG9zdCB0aGF0IGRpZXMgbWlkLXBheWxvYWQgbGVhdmVzIHRoZSBsb2FkZXIgc3Bpbm5pbmcgaW4gdGhlIHNsaWNlIGxvb3AKJiM0MzsgKiAgIGhvbGRpbmcgU1RBVD0wIChubyBtYWdpYykuIEZlZWQgc2luZ2xlIDEtYnl0ZSBjaHVua3MgKG9uZSBEQVRBIHdvcmQgJiM0MzsKJiM0MzsgKiAgIFNUQVQ9MSkgdW50aWwgcl9yZW1haW4gcmVhY2hlcyAwLCB0aGVuIFNUQVQ9RU5EOyB0aGUgbG9hZGVyIGZpbmFsaXNlcyB0aGUKJiM0MzsgKiAgIChub3cgY29ycnVwdCkgaW1hZ2UgYW5kIHJlLWFybXMgUkVBRFkgZm9yIGEgY2xlYW4gcmVmbGFzaC4KJiM0MzsgKgomIzQzOyAqIFJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIChub24tZGVzdHJ1Y3RpdmUgbGl2ZW5lc3MgcHJvb2YpOgomIzQzOyAqICAgREFUQSA6PSAweDdjMjMgKG1hcmtlcik7IFNUQVQgOj0gMHhlMmMwfGlkeAomIzQzOyAqICAgICAtJmd0OyBsb2FkZXIgcmV0dXJucyBhIHJ1bnRpbWUgd29yZCBpbiBEQVRBIGFuZCByZS1hcm1zIFNUQVQ9MHhjNTVjLgomIzQzOyAqICAgVGhlIHJlcGx5IHNvdXJjZSBpcyBsb2FkZXIgQlNTLCBub3QgYSBjaGlwIGlkOyB1c2VkIG9ubHkgdG8gcHJvdmUgYSBsaXZlCiYjNDM7ICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLgomIzQzOyAqCiYjNDM7ICogVGhlIG90aGVyIFNUQVQgcmVhZHkgbWFnaWMsIDB4YzMzYywgbWFya3MgdGhlIGxvYWRlciYjMzk7cyBmbGFzaGxlc3MKJiM0MzsgKiBjaGlwLXRvLWNoaXAgZG93bmxvYWQgbW9kZSAoTXhMODYyODFTIDE2LXBvcnQgdGllcik7IHRoaXMgZHJpdmVyIGRvZXMgbm90CiYjNDM7ICogdXNlIGl0LgomIzQzOyAqCiYjNDM7ICogUmVzY3VlIGxpZmVjeWNsZSAoZGV2bGluayk6IHByb2JlIHJ1bnMgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCk7IGEgd2VkZ2VkCiYjNDM7ICogbG9hZGVyIGlzIGRyYWluZWQgYmFjayB0byBSRUFEWSBieSBhIGJhY2tncm91bmQgc2VsZi1oZWFsIChyZXNjdWVfaGVhbF93b3JrKSBzbwomIzQzOyAqIHRoZSBtdWx0aS1taW51dGUgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay4gZGV2bGluayBkZXYgaW5mbwomIzQzOyAqIGV4cG9zZXMgdGhlIGZ3IHZlcnNpb24gKHRoZSAmIzM0O2ZsYXNoYWJsZSYjMzQ7IHNpZ25hbCkgb25seSBvbmNlIGF0IFJFQURZOwomIzQzOyAqIGZsYXNoX3VwZGF0ZSByZXR1cm5zIC1FQlVTWSB1bnRpbCB0aGVuLCBhbmQgcmVwcm9iZXMgdG8gV1NQIGZpcm13YXJlIG9uIHN1Y2Nlc3MuCiYjNDM7ICoKJiM0MzsgKiBOb3RlczoKJiM0MzsgKiAgIC0gQ2hpcCBpZC9yZXZpc2lvbiAoMHhjMGQyODg4NC84OCkgYXJlIE5PVCByZWFjaGFibGUgb24gdGhpcyBjaGFubmVsOyB0aGV5CiYjNDM7ICogICAgIG5lZWQgdGhlIGNsYXVzZS00NSBNTUQgZmlybXdhcmUgbWFpbGJveCwgd2hpY2ggaXMgZGVhZCB1bmRlciBNQ1Vib290LgomIzQzOyAqICAgICBSZXNjdWUgaWRlbnRpdHkgaXMgYnkgU0IgUERJIGJlaGF2aW91ciBvbmx5IChteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QpLgomIzQzOyAqICAgLSBUaGUgU01ESU8gUEhZIGFkZHJlc3MgYW5kIHRoZSAweGUxeHggb2Zmc2V0cyBhcmUgT1RQLWNvbmZpZ3VyYWJsZTsgZGVyaXZlCiYjNDM7ICogICAgIHRoZW0gZnJvbSB0aGUgRFQgYmluZGluZywgZG8gbm90IGFzc3VtZSBmaXhlZCB2YWx1ZXMuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYzMyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L292ZXJmbG93LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC93b3JrcXVldWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2RzYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvc3dpdGNoZGV2LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWNtZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWZ3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtaG9zdC5oJiMzNDsKJiM0MzsKJiM0MzsvKiBTQiBQREkgcmVnaXN0ZXJzIChjbGF1c2UtMjIgU01ESU8gYWRkcmVzcyBzcGFjZSkgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMCQkweGUxMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSCQkweGUxMDEKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBCQkweGUxMDIKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUCQkweGUxMDMKJiM0MzsKJiM0MzsvKiBTQiBQREkgQ1RSTCBtb2RlcyAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUCTB4MDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSCQkweDAyCiYjNDM7CiYjNDM7LyogU0IgUERJIGhhbmRzaGFrZSBtYWdpYyAocHVibGlzaGVkL2NvbnN1bWVkIHZpYSBTVEFUKSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JFQURZCQkweGM1NWMJLyogbG9hZGVyIGlkbGUsIGNvbnNvbGUgbG9vcCAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RMX1JFQURZCTB4YzMzYwkvKiBsb2FkZXIgaWRsZSwgZmxhc2hsZXNzIGxvb3AgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFSVAkJMHhmNDhmCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfRU5ECQkweDNjYzMKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFRwkJMHhlMmMwCS8qIHJlZ2lzdGVyLXJlYWQgY21kICh8IGluZGV4KSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUksJMHg3YzIzCS8qIG1hcmtlciBwbGFjZWQgaW4gREFUQSBmb3IgUkRSRUcgKi8KJiM0MzsKJiM0MzsvKiBCZWhhdmlvdXJhbCBwcmVzZW5jZSBwcm9iZTogdHdvIGRpc3RpbmN0IDE2LWJpdCBsYXRjaGVzIG9uIEFERFIvREFUQS4gKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BCQkweDVhNWEKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9ECQkweGE1YTUKJiM0MzsKJiM0MzsvKiBGaXJtd2FyZSB0cmFuc2ZlciBnZW9tZXRyeSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfSERSX1NJWkUJCTIwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEYJCTE2Mzg0CS8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0UJCTMyNzYwCS8qIHdvcmRzIHBlciBmdWxsIHNsaWNlICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUgkJMHg3ODAwCS8qIFNCMSB3b3JkIGFkZHJlc3MgKi8KJiM0MzsKJiM0MzsvKiBUaW1lb3V0cyAoZ2VuZXJvdXMgdXBwZXIgYm91bmRzKSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUwkzMDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUwk1MDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TCTMwMDAwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NUwkxMjAwMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUwk1MDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TCTUwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMAomIzQzOwomIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLAomIzQzOwkJCQkgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsCiYjNDM7CQkJCSAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJaW50IHJldCwgdmFsOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsCiYjNDM7CQkJCXZhbCAmbHQ7IDAgfHwgKHUxNil2YWwgPT0gZXhwZWN0ZWQsCiYjNDM7CQkJCTEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsCiYjNDM7CQkJCXByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTsKJiM0MzsJaWYgKHZhbCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gdmFsOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgICAgIHUzMiBkYXRhX3dyaXR0ZW4pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsIGRhdGFfd3JpdHRlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwKJiM0MzsJCQkJCSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLAomIzQzOwkJCQkgIHUzMiBkb25lLCB1MzIgdG90YWwpCiYjNDM7ewomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUG9zdC1mbGFzaCByZXByb2JlLiBkZXZpY2VfcmVwcm9iZSgpIC0mZ3Q7IHJlbW92ZSgpIGZyZWVzIHByaXYsIHNvIHRoaXMgcnVucwomIzQzOyAqIGRldGFjaGVkIGZyb20gcHJpdiwgb24gb25seSB0aGUgaGVsZCBkZXZpY2UgcmVmZXJlbmNlLiBJdCBydW5zIGFzIGEga3RocmVhZAomIzQzOyAqIHNvIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkIHdpdGggbW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KCksCiYjNDM7ICogZnJvbSBjb3JlLWtlcm5lbCBjb2RlIC0tIGEgd29yayBpdGVtJiMzOTtzIHRyYWlsaW5nIG1vZHVsZV9wdXQoKSBjb3VsZCByZXR1cm4KJiM0MzsgKiBpbnRvIG1vZHVsZSB0ZXh0IGEgcmFjaW5nIHJtbW9kIGhhcyBhbHJlYWR5IGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4odm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CiYjNDM7CiYjNDM7CW1zbGVlcChNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TKTsKJiM0MzsJaWYgKGRldmljZV9yZXByb2JlKGRldikpCiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtyZXByb2JlIGZhaWxlZFxuJiMzNDspOwomIzQzOwlwdXRfZGV2aWNlKGRldik7CiYjNDM7CW1vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdCgwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiB7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBTcGF3biB0aGUgcmVwcm9iZSBrdGhyZWFkIGZyb20gd29ya3F1ZXVlIGNvbnRleHQsIHdoZXJlIGt0aHJlYWRfY3JlYXRlKCkKJiM0MzsgKiBjYW5ub3QgcmV0dXJuIC1FSU5UUiBhcyBpdCBjYW4gZnJvbSB0aGUgZGV2bGluayBjYWxsZXImIzM5O3MgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmZfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa28gPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYsIHdvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrby0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiYjNDM7CiYjNDM7CWtmcmVlKGtvKTsKJiM0MzsJdGFzayA9IGt0aHJlYWRfcnVuKG14bDg2Mnh4X3JlcHJvYmVfdGhyZWFkX2ZuLCBkZXYsICYjMzQ7bXhsODYyeHgtcmVwcm9iZSYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUih0YXNrKSkgewomIzQzOwkJZGV2X2VycihkZXYsCiYjNDM7CQkJJiMzNDtyZXByb2JlIGt0aHJlYWQgZmFpbGVkICglcGUpOyByZWxvYWQgdGhlIGRyaXZlciB0byByZXN0b3JlIG9wZXJhdGlvblxuJiMzNDssCiYjNDM7CQkJdGFzayk7CiYjNDM7CQlwdXRfZGV2aWNlKGRldik7CiYjNDM7CQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuCiYjNDM7ICogYWxsb2NhdGlvbiBmYWlsdXJlIGFib3J0cyBjbGVhbmx5LiBUaGUgY2FsbGVyIGhvbGRzIGEgbW9kdWxlIGFuZCBhIGRldmljZQomIzQzOyAqIHJlZmVyZW5jZTsgb25jZSB0aGUga2lja29mZiBpcyBzY2hlZHVsZWQgdGhlIHJlcHJvYmUga3RocmVhZCByZWxlYXNlcyBib3RoLgomIzQzOyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICpteGw4NjJ4eF9yZXByb2JlX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKmtvOwomIzQzOwomIzQzOwlrbyA9IGt6YWxsb2Nfb2JqKCprbyk7CiYjNDM7CWlmICgha28pCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJa28tJmd0O2RldiA9IGRldjsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7a28tJmd0O3dvcmssIG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZl9mbik7CiYjNDM7CXJldHVybiBrbzsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQnl0ZS1jb3VudCBvZiBlYWNoIGNodW5rIGZlZCB0byB0aGUgbG9hZGVyIGR1cmluZyBkcmFpbi4gSXQgTVVTVCBiZSAxOiB0aGUKJiM0MzsgKiBsb2FkZXIgb25seSBsZXRzIHVzIG9ic2VydmUgJiMzNDtjb3VudGVyID09IDAmIzM0OywgbmV2ZXIgJiMzNDtjb3VudGVyICZsdDsgc3RlcCYjMzQ7LCBzbyBhbnkKJiM0MzsgKiBzdGVwICZndDsgMSBjYW4gc3VidHJhY3QgcGFzdCB6ZXJvLCB1bmRlcmZsb3cgdGhlIDMyLWJpdCBjb3VudGVyIGFuZCB3ZWRnZSB0aGUKJiM0MzsgKiBsb2FkZXIgZm9yIH4yXjMyIG1vcmUgYnl0ZXMgKGEgc3RhdGUgb25seSBhIHBvd2VyIGN5Y2xlIGNsZWFycykuIFN0ZXBwaW5nIGJ5CiYjNDM7ICogMSB3YWxrcyB0aGUgY291bnRlciB0aHJvdWdoIGV2ZXJ5IHZhbHVlIGFuZCBpcyBndWFyYW50ZWVkIHRvIGxhbmQgb24gemVybwomIzQzOyAqIHdoYXRldmVyIGl0cyAocG9zc2libHkgb2RkKSBzdGFydC4gQSAxLWJ5dGUgY2h1bmsgaXMgYSBwYXRoIHRoZSBsb2FkZXIKJiM0MzsgKiBhbHJlYWR5IGhhbmRsZXM6IHRoZSBub3JtYWwgdHJhbnNmZXIgZW5kcyB3aXRoIGEgc2luZ2xlIHRyYWlsaW5nIGJ5dGUgZm9yCiYjNDM7ICogb2RkLXNpemVkIGltYWdlcyAoc2VlIFN0ZXAgNikuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUwkxCiYjNDM7CiYjNDM7LyogUG9sbCBTVEFUIHdoaWxlIGRyYWluaW5nIGEgc3R1Y2sgZG93bmxvYWQ6IDAgbWVhbnMgJiMzNDtmZWVkIHRoZSBuZXh0IGNodW5rJiMzNDssCiYjNDM7ICogUkVBRFkgbWVhbnMgdGhlIGxvYWRlciBsZWZ0IHRoZSByZWNlaXZlIGxvb3AgYW5kIHJlLWFybWVkIGl0cyBjb21tYW5kIGxvb3AsCiYjNDM7ICogYW55dGhpbmcgZWxzZSBpcyBhIHRyYW5zaWVudCAodGhlIGNvdW50IGJlaW5nIGNvbnN1bWVkKSAtIEJVU1kgcGFzdCB0aGUKJiM0MzsgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuCiYjNDM7ICovCiYjNDM7ZW51bSB7IE1YTDg2MlhYX0RSQUlOX0ZFRUQsIE1YTDg2MlhYX0RSQUlOX1JFQURZLCBNWEw4NjJYWF9EUkFJTl9CVVNZIH07CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcmVhZF9wb2xsX3RpbWVvdXQobXhsODYyeHhfc21kaW9fcmVhZCwgdmFsLAomIzQzOwkJCSAgdmFsICZsdDsgMCB8fCAodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkgfHwKJiM0MzsJCQkgICh1MTYpdmFsID09IDAsCiYjNDM7CQkJICA1MCwgdGltZW91dF9tcyAqIDEwMDAsIGZhbHNlLAomIzQzOwkJCSAgcHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybiB2YWw7CiYjNDM7CWlmICgodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkpCiYjNDM7CQlyZXR1cm4gTVhMODYyWFhfRFJBSU5fUkVBRFk7CiYjNDM7CWlmICgodTE2KXZhbCA9PSAwKQomIzQzOwkJcmV0dXJuIE1YTDg2MlhYX0RSQUlOX0ZFRUQ7CiYjNDM7CXJldHVybiBNWEw4NjJYWF9EUkFJTl9CVVNZOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWNvdmVyIGEgc3dpdGNoIHdob3NlIFNCIFBESSBkb3dubG9hZCB3YXMgaW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIC0gdGhlCiYjNDM7ICogaG9zdCBkaWVkIGFmdGVyIE1DVWJvb3QgYmVnYW4gZXJhc2luZyBmbGFzaCwgd2hldGhlciBpdCBhYm9ydGVkIG1pZCBlcmFzZSBvcgomIzQzOyAqIG1pZCBpbWFnZS13cml0ZSwgYm90aCBlbmQgdXAgaW4gdGhlIHNhbWUgcGxhY2U6IHRoZSBwYXlsb2FkIHJlY2VpdmUgbG9vcC4KJiM0MzsgKiBUaGVyZSB0aGUgbG9hZGVyIHB1Ymxpc2hlcyBTVEFUPTAsIHdhaXRzIGZvciB0aGUgaG9zdCB0byB3cml0ZSBhIGJ5dGUtY291bnQKJiM0MzsgKiB0byBTVEFULCBETUFzIHRoYXQgbWFueSBieXRlcyBhbmQgc3VidHJhY3RzIHRoZSBjb3VudCBmcm9tIGEgcmVtYWluaW5nLWJ5dGVzCiYjNDM7ICogY291bnRlciwgbGVhdmluZyB0aGUgbG9vcCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyBleGFjdGx5IHplcm8uIFRoZQomIzQzOyAqIGltYWdlIHNpemUgZGllZCB3aXRoIHRoZSBob3N0LCBzbyB3ZSBmZWVkIHNpbmdsZS1ieXRlIGNodW5rcyAoc2VlCiYjNDM7ICogTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpIHRvIHdhbGsgdGhlIGNvdW50ZXIgdG8gemVybyB3aXRob3V0IHVuZGVyZmxvdywKJiM0MzsgKiB0aGVuIHNlbmQgRU5ELiBUaGUgbG9hZGVyIHZhbGlkYXRlcyB0aGUgKG5vdyBjb3JydXB0KSBpbWFnZSBhbmQgcmUtYXJtcwomIzQzOyAqIFJFQURZLCBvciBib290cyBhIHZhbGlkIGltYWdlIHRoYXQgaGFwcGVuZWQgdG8gc3Vydml2ZSBpbiBmbGFzaC4gVGhpcyBvbmx5CiYjNDM7ICogZmluYWxpc2VzIHRoZSB0cmFuc2ZlcjsgdGhlIGNhbGxlciYjMzk7cyByZXByb2JlIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlCiYjNDM7ICogcmVzdWx0cy4gUmV0dXJucyAwIG9uY2UgZmluYWxpc2VkLCAmbHQ7MCBvbiBlcnJvci4gRG9lcyBOT1QgcmVjb3ZlciBhIGNvdW50ZXIKJiM0MzsgKiBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGEKJiM0MzsgKiBwb3dlciBjeWNsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2OwomIzQzOwkvKiBCb3VuZDogdHdpY2UgdGhlIGxvYWRlciYjMzk7cyAxNiBNaUIgaW1hZ2UgY2FwLCBvbmUgYnl0ZSBwZXIgY2h1bmsuICovCiYjNDM7CXUzMiBtYXhfY2h1bmtzID0gMnUgKiAoMTZ1ICZsdDsmbHQ7IDIwKSAvIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTOwomIzQzOwl1MzIgY2h1bmsgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkZXZfd2FybihkZXYsICYjMzQ7Zmxhc2g6IGRyYWluaW5nIGludGVycnVwdGVkIGRvd25sb2FkXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdoaWxlIChjaHVuayAmbHQ7IG1heF9jaHVua3MpIHsKJiM0MzsJCS8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovCiYjNDM7CQlpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXJldHVybiAtRUNBTkNFTEVEOwomIzQzOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9SRUFEWSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fQlVTWSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIEZlZWQgb25lIHplcm8gYnl0ZTsgcmVzZXQgY2xlYXJlZCB0aGUgd3JpdGUgbGF0Y2guICovCiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJCQkgICBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJY2h1bmsmIzQzOyYjNDM7OwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNodW5rICZndDs9IG1heF9jaHVua3MpIHsKJiM0MzsJCWRldl9lcnIoZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGludGVycnVwdGVkIGRvd25sb2FkIGRpZCBub3QgZHJhaW4gYWZ0ZXIgJXUgY2h1bmtzXG4mIzM0OywKJiM0MzsJCQljaHVuayk7CiYjNDM7CQlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0VORCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogTGV0IHRoZSBsb2FkZXIgdmFsaWRhdGUgYW5kIHJlLWFybSBSRUFEWSwgb3IgYm9vdCBhIHN1cnZpdmluZyBpbWFnZTsKJiM0MzsJICogdGhlIGNhbGxlciYjMzk7cyByZXByb2JlIHRoZW4gY2xhc3NpZmllcyB3aGljaGV2ZXIgc3RhdGUgcmVzdWx0cy4KJiM0MzsJICovCiYjNDM7CW1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQmFja2dyb3VuZCBzZWxmLWhlYWw6IGRyYWluIGEgd2VkZ2VkIGRvd25sb2FkIG9mZiB0aGUgZGV2bGluayBmbGFzaCBwYXRoLCBzbwomIzQzOyAqIHRoZSBtaW51dGVzLWxvbmcgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay4gU2NoZWR1bGVkIGZyb20gcHJvYmU7CiYjNDM7ICogcmVwcm9iZXMgb24gc3VjY2VzcyBzbyB0aGUgcHJvYmUtdGltZSBkZXRlY3Rpb24gcmUtY2xhc3NpZmllcyB0aGUgc3dpdGNoLgomIzQzOyAqLwomIzQzO3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3ByaXYsIHJlc2N1ZV9oZWFsX3dvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldjsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRldl9pbmZvKGRldiwgJiMzNDtyZWNvdmVyaW5nIGludGVycnVwdGVkIGRvd25sb2FkIGluIGJhY2tncm91bmRcbiYjMzQ7KTsKJiM0MzsJcmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpOwomIzQzOwlpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBUaGUgaW50ZXJydXB0ZWQgdHJhbnNmZXIgaXMgZmluYWxpc2VkOyByZXByb2JlIHNvIHRoZSBwcm9iZS10aW1lCiYjNDM7CSAqIGRldGVjdGlvbiBicmluZ3MgdGhlIGRyaXZlciB1cCAtLSBmbGFzaGFibGUgaW4gcmVzY3VlIG1vZGUgaWYgdGhlCiYjNDM7CSAqIGxvYWRlciBpcyBhdCBSRUFEWSwgb3Igbm9ybWFsbHkgaWYgYSB2YWxpZCBpbWFnZSBib290ZWQuIFRoZSByZWZzCiYjNDM7CSAqIGFyZSByZWxlYXNlZCBieSB0aGUgcmVwcm9iZSBvbmNlIGl0IGNvbXBsZXRlcy4KJiM0MzsJICovCiYjNDM7CWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlnZXRfZGV2aWNlKGRldik7CiYjNDM7CWtvID0gbXhsODYyeHhfcmVwcm9iZV9hbGxvYyhkZXYpOwomIzQzOwlpZiAoIWtvKSB7CiYjNDM7CQlwdXRfZGV2aWNlKGRldik7CiYjNDM7CQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7a28tJmd0O3dvcmspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBEZXRlY3QgTUNVYm9vdCByZXNjdWUgbW9kZSBvdmVyIGNsYXVzZS0yMiBTTURJTyBhbG9uZSwgc28gdGhlIGNhbGxlciBjYW4gcnVsZQomIzQzOyAqIHRoZSBsb2FkZXIgb3V0IGJlZm9yZSBhbnkgQzQ1IEFQSSByZXF1ZXN0ICh3aGljaCBzcGV3cyBDUkMgZXJyb3JzIHdoZW4gbm8gV1NQCiYjNDM7ICogZmlybXdhcmUgYW5zd2VycykuIEEgc2NyYXRjaCB3cml0ZSB0byBBRERSL0RBVEEgbXVzdCBsYXRjaCBvciB0aGUgY2hpcCBpcwomIzQzOyAqIGFic2VudCAoLUVOT0RFVik7IFNUQVQgdGhlbiBjbGFzc2lmaWVzIHRoZSBzdGF0ZSwgcG9rZWQgZGVzdHJ1Y3RpdmVseSBvbmx5CiYjNDM7ICogd2hlbiAwLCB0aGUgb25lIHZhbHVlIGEgcnVubmluZyBmaXJtd2FyZSBuZXZlciBob2xkczoKJiM0MzsgKgomIzQzOyAqICAtIDB4YzMzYzogZmxhc2hsZXNzIGxvb3AsIHJlYWR5LgomIzQzOyAqICAtIDB4YzU1YzogY29uc29sZSBsb29wLCBpZiB0aGUgcmVnaXN0ZXItcmVhZCBjaGFsbGVuZ2UgaXMgc2VydmljZWQuCiYjNDM7ICogIC0gb3RoZXIgbm9uLXplcm86IHJ1bm5pbmcgZmlybXdhcmUsIGxlZnQgdW5wb2tlZC4KJiM0MzsgKiAgLSAwOiB3ZWRnZWQgcmVjZWl2ZSBsb29wLCBpZiBhIDEtYnl0ZSBzbGljZS1hZHZhbmNlIGRyYWlucyBiYWNrIHRvIDAuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IE1YTDg2MlhYX0lOX1JFU0NVRSwgTVhMODYyWFhfTk9UX1JFU0NVRSwgb3IgbmVnYXRpdmUgKC1FTk9ERVYvU01ESU8pLgomIzQzOyAqLwomIzQzO2ludCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgc3RhdCwgZGF0LCByZXQsIHJiLCBhLCBkOwomIzQzOwomIzQzOwkvKiByZXNjdWVfcmVhZHkgZ2F0ZXMgZmxhc2hpbmc7IGEgd2VkZ2VkIGxvYWRlciBuZWVkcyB0aGUgZHJhaW4gZmlyc3QuICovCiYjNDM7CXByaXYtJmd0O3Jlc2N1ZV9yZWFkeSA9IGZhbHNlOwomIzQzOwomIzQzOwkvKiBQcmVzZW5jZTogYSBsaXZlIGNoaXAgbGF0Y2hlcyB0aGUgc2NyYXRjaCB3cml0ZSwgYW4gYWJzZW50IG9uZSBmbG9hdHMuICovCiYjNDM7CWEgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUiwKJiM0MzsJCQkJIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTsKJiM0MzsJaWYgKGEgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwKJiM0MzsJCQkJIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKTsKJiM0MzsJaWYgKGQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGQ7CiYjNDM7CWEgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSKTsKJiM0MzsJaWYgKGEgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGE7CiYjNDM7CWQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBKTsKJiM0MzsJaWYgKGQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGQ7CiYjNDM7CWlmICgodTE2KWEgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0EgfHwKJiM0MzsJICAgICh1MTYpZCAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3RhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpOwomIzQzOwlpZiAoc3RhdCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gc3RhdDsKJiM0MzsKJiM0MzsJLyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3AgKE14TDg2MjgxUyB0aWVyKTogdGhpcyBkcml2ZXIgZG9lcyBub3QKJiM0MzsJICogc3VwcG9ydCBpdCAtLSB0aGUgY29uc29sZSBmbGFzaCBwYXRoIGV4cGVjdHMgUkVBRFkuIFRyZWF0IGl0IGFzIGFuCiYjNDM7CSAqIHVudXNhYmxlIGNvbmZpZ3VyYXRpb24sIGxpa2UgYW55IG90aGVyIHVuc3VwcG9ydGVkIHN0YXRlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFkpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJLyogQ29uc29sZSBsb29wIGF0IFJFQURZOiBjb25maXJtIHRoZSBsaXZlIG1haWxib3ggd2l0aCB0aGUgcmVnaXN0ZXItcmVhZAomIzQzOwkgKiBjaGFsbGVuZ2UgKGNvbnN1bWVzIHRoZSBtYXJrZXIgZnJvbSBEQVRBIGFuZCByZS1hcm1zIFJFQURZKS4KJiM0MzsJICovCiYjNDM7CWlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKSB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwKJiM0MzsJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9SRFJFRyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSwKJiM0MzsJCQkJCSAgICAgICBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7CiYjNDM7CQlkYXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBKTsKJiM0MzsJCWlmIChkYXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiBkYXQ7CiYjNDM7CQlteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CQlpZiAoIXJiICZhbXA7JmFtcDsgKHUxNilkYXQgIT0gTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspIHsKJiM0MzsJCQlwcml2LSZndDtyZXNjdWVfcmVhZHkgPSB0cnVlOwomIzQzOwkJCXJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBBbnkgb3RoZXIgbm9uLXplcm8gdmFsdWUgaXMgYSBydW5uaW5nIGZpcm13YXJlLCBub3QgYSBsb2FkZXIuICovCiYjNDM7CWlmIChzdGF0KQomIzQzOwkJcmV0dXJuIE1YTDg2MlhYX05PVF9SRVNDVUU7CiYjNDM7CiYjNDM7CS8qIFNUQVQgPT0gMDogYSB3ZWRnZWQgcmVjZWl2ZSBsb29wIGNvbnN1bWVzIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgYmFjawomIzQzOwkgKiB0byAwIChmZWVkIG9uZSBEQVRBIHdvcmQgZmlyc3QsIGxpa2UgYSBkcmFpbiBjaHVuaykuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTsKJiM0MzsJaWYgKCFyYikKJiM0MzsJCXJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PREVWOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNQ1Vib290IGZpcm13YXJlIGltYWdlIGhlYWRlciAqLwomIzQzO3N0cnVjdCBteGw4NjJ4eF9md19oZHIgewomIzQzOwlfX2xlMzIgaW1hZ2VfdHlwZTsKJiM0MzsJX19sZTMyIGltYWdlX3NpemVfMTsKJiM0MzsJX19sZTMyIGltYWdlX2NoZWNrc3VtXzE7CiYjNDM7CV9fbGUzMiBpbWFnZV9zaXplXzI7CiYjNDM7CV9fbGUzMiBpbWFnZV9jaGVja3N1bV8yOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyICpwYXlsb2FkX3NpemUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7CiYjNDM7CXUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsOwomIzQzOwljb25zdCB1OCAqcGF5bG9hZDsKJiM0MzsJdTMyIGNyYzsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICZsdDsgTVhMODYyWFhfRldfSERSX1NJWkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBteGw4NjJ4eF9md19oZHIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsJcGF5bG9hZCA9IGZ3LSZndDtkYXRhICYjNDM7IE1YTDg2MlhYX0ZXX0hEUl9TSVpFOwomIzQzOwlzaXplMSA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2Vfc2l6ZV8xKTsKJiM0MzsJc2l6ZTIgPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX3NpemVfMik7CiYjNDM7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coc2l6ZTEsIHNpemUyLCAmYW1wO3RvdGFsKSB8fAomIzQzOwkgICAgdG90YWwgJmd0OyBmdy0mZ3Q7c2l6ZSAtIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRvdGFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgd2l0aCBlbXB0eSBwYXlsb2FkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2l6ZTEpIHsKJiM0MzsJCWNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTsKJiM0MzsJCWlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8xKSkgewomIzQzOwkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Zmxhc2g6IGltYWdlIDEgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcbiYjMzQ7LAomIzQzOwkJCQljcmMsIGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2VfY2hlY2tzdW1fMSkpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaXplMikgewomIzQzOwkJY3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCAmIzQzOyBzaXplMSwgc2l6ZTIpOwomIzQzOwkJaWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX2NoZWNrc3VtXzIpKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxuJiMzNDssCiYjNDM7CQkJCWNyYywgbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8yKSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnBheWxvYWRfc2l6ZSA9IHRvdGFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyIHBheWxvYWRfc2l6ZSwgc3RydWN0IGRldmxpbmsgKmRsKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKnBheWxvYWQgPSBmdy0mZ3Q7ZGF0YSAmIzQzOyBNWEw4NjJYWF9GV19IRFJfU0laRTsKJiM0MzsJdTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXh0X25vdGlmeSA9IGppZmZpZXMgLSAxOwomIzQzOwl1MTYgd29yZCwgZmRhdGE7CiYjNDM7CWludCByZXQsIGk7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMTogcmVib290IHRoZSBmaXJtd2FyZSBpbnRvIE1DVWJvb3QgcmVzY3VlIG1vZGUgKi8KJiM0MzsJaWYgKCFwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLAomIzQzOwkJCQkJZmFsc2UsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O2ZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCUVSUl9QVFIocmV0KSk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdGVwIDI6IHdhaXQgZm9yIGJvb3Rsb2FkZXIgcmVhZHkgKi8KJiM0MzsJbXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCAmIzM0O1dhaXRpbmcgZm9yIGJvb3Rsb2FkZXImIzM0OywgMCwgMCk7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJLyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdAomIzQzOwkgKiByZWJvb3RzIGluc3RlYWQgb2Ygd2FpdGluZyBmb3JldmVyLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksCiYjNDM7CQkJCQlNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBib290bG9hZGVyIG5vdCByZWFkeTogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMzogc3RhcnQgaGFuZHNoYWtlICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCQkgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCAmIzQzOyAxLAomIzQzOwkJCQkJTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlnb3RvIGVuZF9tYWdpYzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqLwomIzQzOwlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7RXJhc2luZyBmbGFzaCYjMzQ7LCAwLCAwKTsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXdvcmQgPSBmdy0mZ3Q7ZGF0YVtpICogMl0gfAomIzQzOwkJICAgICAgICgodTE2KWZ3LSZndDtkYXRhW2kgKiAyICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byB3cml0ZV9lcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwkvKiB0aGUgYnl0ZSBjb3VudCBpbiBTVEFUIHRyaWdnZXJzIHRoZSBlcmFzZSAqLwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkJICAgTVhMODYyWFhfRldfSERSX1NJWkUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwkvKiBBQ0sgaXMgYnl0ZSBjb3VudCAmIzQzOyAxICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgJiM0MzsgMSwKJiM0MzsJCQkJCU1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBoZWFkZXIgQUNLIGZhaWxlZDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLAomIzQzOwkJCQkJTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqLwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwl3aGlsZSAoaWR4ICZsdDsgcGF5bG9hZF9zaXplKSB7CiYjNDM7CQlpZiAoaWR4ICYjNDM7IDEgJmx0OyBwYXlsb2FkX3NpemUpIHsKJiM0MzsJCQlmZGF0YSA9IHBheWxvYWRbaWR4XSB8CiYjNDM7CQkJCSgodTE2KXBheWxvYWRbaWR4ICYjNDM7IDFdICZsdDsmbHQ7IDgpOwomIzQzOwkJCWlkeCAmIzQzOz0gMjsKJiM0MzsJCQlkYXRhX3dyaXR0ZW4gJiM0Mzs9IDI7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWZkYXRhID0gcGF5bG9hZFtpZHhdOwomIzQzOwkJCWlkeCYjNDM7JiM0Mzs7CiYjNDM7CQkJZGF0YV93cml0dGVuJiM0MzsmIzQzOzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCBmZGF0YSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHdyaXRlX2VycjsKJiM0MzsJCXdvcmRfaWR4JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChpZHggJmd0Oz0gcGF5bG9hZF9zaXplKSB7CiYjNDM7CQkJcmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBIYWxmLWJhbmsgYm91bmRhcnk6IHN3aXRjaCB0byBTQjEgYWRkcmVzcyAqLwomIzQzOwkJaWYgKHdvcmRfaWR4ID09IE1YTDg2MlhYX0ZXX0JBTktfSEFMRikgewomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLAomIzQzOwkJCQkJCSAgIE1YTDg2MlhYX0ZXX1NCMV9BRERSKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CQkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIHdyaXRlX2VycjsKJiM0MzsJCX0gZWxzZSBpZiAod29yZF9pZHggJmd0Oz0gTVhMODYyWFhfRldfQkFOS19TTElDRSkgewomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pOwomIzQzOwkJCWlmIChyZXQpIHsKJiM0MzsJCQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJCSYjMzQ7Zmxhc2g6IHdyaXRlIHRpbWVvdXQgYXQgJXUvJXU6ICVwZVxuJiMzNDssCiYjNDM7CQkJCQlpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTsKJiM0MzsJCQkJZ290byBlbmRfbWFnaWM7CiYjNDM7CQkJfQomIzQzOwkJCXdvcmRfaWR4ID0gMDsKJiM0MzsJCQlkYXRhX3dyaXR0ZW4gPSAwOwomIzQzOwkJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkJCSAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbmV4dF9ub3RpZnkpKSB7CiYjNDM7CQkJCW14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgJiMzNDtGbGFzaGluZyYjMzQ7LCBpZHgsCiYjNDM7CQkJCQkJICAgICAgcGF5bG9hZF9zaXplKTsKJiM0MzsJCQkJbmV4dF9ub3RpZnkgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBmaW5hbCB3cml0ZSB0aW1lb3V0OiAlcGVcbiYjMzQ7LCBFUlJfUFRSKHJldCkpOwomIzQzOwkJZ290byBlbmRfbWFnaWM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCAmIzM0O0ZsYXNoaW5nJiMzNDssIHBheWxvYWRfc2l6ZSwgcGF5bG9hZF9zaXplKTsKJiM0MzsJZ290byBlbmRfbWFnaWM7CiYjNDM7CiYjNDM7d3JpdGVfZXJyOgomIzQzOwlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LCAmIzM0O2ZsYXNoOiBTTURJTyB3cml0ZSBmYWlsZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQlFUlJfUFRSKHJldCkpOwomIzQzO2VuZF9tYWdpYzoKJiM0MzsJLyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqLwomIzQzOwlteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwKJiM0MzsJCQkgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpOwomIzQzOwltc2xlZXAoTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCSAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJY2hhciBidWZbMTZdOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBObyBjaGlwLWlkL3JldmlzaW9uIGluIE1DVWJvb3QgKG5lZWRzIHRoZSBmaXJtd2FyZSBNTUQgbWFpbGJveCkuIFRoZQomIzQzOwkgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlICYjMzQ7cmVhZHkgdG8gZmxhc2gmIzM0OyBzaWduYWw6IHJlcG9ydCBpdCBvbmx5CiYjNDM7CSAqIG9uY2UgdGhlIGxvYWRlciBpcyBhdCBhIGNsZWFuIFJFQURZLCBub3RoaW5nIHdoaWxlIHN0aWxsIGRyYWluaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKSB7CiYjNDM7CQlpZiAoIVJFQURfT05DRShwcml2LSZndDtyZXNjdWVfcmVhZHkpKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldS4ldS4ldSYjMzQ7LAomIzQzOwkJCSBwcml2LSZndDtmd192ZXJzaW9uLm1ham9yLCBwcml2LSZndDtmd192ZXJzaW9uLm1pbm9yLAomIzQzOwkJCSBwcml2LSZndDtmd192ZXJzaW9uLnJldmlzaW9uKTsKJiM0MzsJCXJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCBidWYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCAmIzM0O2Z3JiMzNDssIGJ1Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQSAwIHBhcnQgbnVtYmVyIG1lYW5zIHRoZSBDSElQIElEIHJlYWQgZmFpbGVkIG9yIHRoZSBwYXJ0IGlzCiYjNDM7CSAqIHVuZnVzZWQ7IG9taXQgaXQgcmF0aGVyIHRoYW4gcHVibGlzaCBhIGJvZ3VzICYjMzQ7MDAwMCYjMzQ7IHRoYXQgZnd1cGQKJiM0MzsJICogd291bGQgbWF0Y2ggZmlybXdhcmUgYWdhaW5zdCAtLSBpdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIGRyaXZlcgomIzQzOwkgKiBuYW1lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2FzaWNfaWQpIHsKJiM0MzsJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JTA0WCYjMzQ7LCBwcml2LSZndDthc2ljX2lkKTsKJiM0MzsJCXJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsCiYjNDM7CQkJCQkJICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsCiYjNDM7CQkJCQkJICAgICBidWYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldSYjMzQ7LCBwcml2LSZndDthc2ljX3Jldik7CiYjNDM7CQlyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLAomIzQzOwkJCQkJCSAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX1JFViwKJiM0MzsJCQkJCQkgICAgIGJ1Zik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldS4ldS4ldSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWFqb3IsIHByaXYtJmd0O2Z3X3ZlcnNpb24ubWlub3IsCiYjNDM7CQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5yZXZpc2lvbik7CiYjNDM7CiYjNDM7CXJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCBidWYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogYm9vdHMgdGhpcyBpbWFnZSBmcm9tIGl0cyBvd24gZmxhc2g6IHN0b3JlZCA9PSBydW5uaW5nICovCiYjNDM7CXJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCBidWYpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbzsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsJdTMyIHBheWxvYWRfc2l6ZTsKJiM0MzsJaW50IHJldCwgaTsKJiM0MzsKJiM0MzsJaWYgKHBhcmFtcy0mZ3Q7Y29tcG9uZW50KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O2NvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy0mZ3Q7ZncsICZhbXA7cGF5bG9hZF9zaXplKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUmVmdXNlIHRvIGZsYXNoIHdoaWxlIHRoZSBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBpcyBzdGlsbCBkcmFpbmluZy4gKi8KJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlICZhbXA7JmFtcDsgIVJFQURfT05DRShwcml2LSZndDtyZXNjdWVfcmVhZHkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O3N3aXRjaCBpcyByZWNvdmVyaW5nIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZXRyeSBzaG9ydGx5JiMzNDspOwomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgcmVmZXJlbmNlcyB0aGUgcmVwcm9iZSB3b3JrIG5lZWRzIHRvIHJlc3RvcmUgbm9ybWFsIG9wZXJhdGlvbgomIzQzOwkgKiBtdXN0IGJlIGhlbGQgYmVmb3JlIHRoZSBzd2l0Y2ggaXMgZGlzdHVyYmVkOyB0aGUgd29yayBpdHNlbGYgaXMKJiM0MzsJICogc2NoZWR1bGVkIG9ubHkgb25jZSB0aGUgZmxhc2ggaXMgZG9uZSAoc2VlIGJlbG93KS4KJiM0MzsJICovCiYjNDM7CWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CWdldF9kZXZpY2UoZHMtJmd0O2Rldik7CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIHRoZSByZXByb2JlIGtpY2tvZmYgYmVmb3JlIGRpc3R1cmJpbmcgdGhlIHN3aXRjaCwgc28gYW4KJiM0MzsJICogLUVOT01FTSBoZXJlIGNhbm5vdCBzdHJhbmQgaXQgZmxhc2hlZCBidXQgbmV2ZXIgcmVwcm9iZWQuCiYjNDM7CSAqLwomIzQzOwlrbyA9IG14bDg2Mnh4X3JlcHJvYmVfYWxsb2MoZHMtJmd0O2Rldik7CiYjNDM7CWlmICgha28pIHsKJiM0MzsJCXB1dF9kZXZpY2UoZHMtJmd0O2Rldik7CiYjNDM7CQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCWRldl9pbmZvKGRzLSZndDtkZXYsCiYjNDM7CQkJICYjMzQ7Zmxhc2g6IGZsYXNoaW5nIHN3aXRjaCB2aWEgTUNVYm9vdCByZXNjdWUgbW9kZVxuJiMzNDspOwomIzQzOwllbHNlCiYjNDM7CQlkZXZfaW5mbyhkcy0mZ3Q7ZGV2LCAmIzM0O2ZsYXNoOiBydW5uaW5nIGZpcm13YXJlICV1LiV1LiV1XG4mIzM0OywKJiM0MzsJCQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciwKJiM0MzsJCQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5yZXZpc2lvbik7CiYjNDM7CiYjNDM7CS8qIENsb3NlIHBvcnRzIHdoaWxlIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCBhbGl2ZSBzbyB0aGUgRFNBCiYjNDM7CSAqIGNvcmUmIzM5O3MgTURCL0ZEQiB0cmFja2luZyBpcyBkcmFpbmVkLCBhbmQgZGV0YWNoIHVzZXIgcG9ydHMKJiM0MzsJICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGUKJiM0MzsJICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC4KJiM0MzsJICovCiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHsKJiM0MzsJCWlmIChkcC0mZ3Q7dXNlcikgewomIzQzOwkJCWRldl9jbG9zZShkcC0mZ3Q7dXNlcik7CiYjNDM7CQkJbmV0aWZfZGV2aWNlX2RldGFjaChkcC0mZ3Q7dXNlcik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpCiYjNDM7CQlkZXZfY2xvc2UoZHAtJmd0O2NvbmR1aXQpOwomIzQzOwkvKiBUaGUgYnJpZGdlIGRlZmVycyB0aGUgU1RQIHN0YXRlIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IGNsb3NpbmcKJiM0MzsJICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuCiYjNDM7CSAqLwomIzQzOwlzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2VzcygpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwltdXRleF9sb2NrX25lc3RlZCgmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7CiYjNDM7CXByaXYtJmd0O2Jsb2NrX2hvc3QgPSB0cnVlOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CiYjNDM7CXNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsICZhbXA7cHJpdi0mZ3Q7ZmxhZ3MpOwomIzQzOwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtzdGF0c193b3JrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O2NyY19lcnJfd29yayk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkcy0mZ3Q7bnVtX3BvcnRzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspOwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtJmd0O2Z3LCBwYXlsb2FkX3NpemUsCiYjNDM7CQkJCSAgICAgIGRzLSZndDtkZXZsaW5rKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7ZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkJiMzNDspOwomIzQzOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywKJiM0MzsJCQkJICBNRElPX01VVEVYX05FU1RFRCk7CiYjNDM7CQlwcml2LSZndDtibG9ja19ob3N0ID0gZmFsc2U7CiYjNDM7CQlwcml2LSZndDtyZXNjdWVfbW9kZSA9IGZhbHNlOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwomIzQzOwkJLyogUmVmcmVzaCB0aGUgY2FjaGVkIHZlcnNpb25zIHNvIHRoZSBmbGFzaCB1cGRhdGUgb25seQomIzQzOwkJICogY29tcGxldGVzIG9uY2UgdGhlIG5ldyBmaXJtd2FyZSBpcyBjb25maXJtZWQgcnVubmluZyBhbmQKJiM0MzsJCSAqIGRldmxpbmsgZGV2IGluZm8gcmVwb3J0cyBpdC4gTXVzdCBoYXBwZW4gYmVmb3JlIHNldHRpbmcKJiM0MzsJCSAqIHNraXBfdGVhcmRvd24sIHdoaWNoIGRpc2NhcmRzIGFsbCBmaXJtd2FyZSBBUEkgcmVhZHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtuZXcgZmlybXdhcmUgZGlkIG5vdCBiZWNvbWUgcmVhZHkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOwomIzQzOwlwcml2LSZndDtza2lwX3RlYXJkb3duID0gdHJ1ZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwomIzQzOwkvKiBLaWNrIG9mZiB0aGUgcmVwcm9iZSBsYXN0OyB0aGUga2lja29mZiB3YXMgYWxsb2NhdGVkIHVwIGZyb250IGFuZAomIzQzOwkgKiBpdHMgbW9kdWxlIGFuZCBkZXZpY2UgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJc2NoZWR1bGVfd29yaygmYW1wO2tvLSZndDt3b3JrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oCkBAIC0wLDAgJiM0MzsxLDIwIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9fTVhMODYyWFhfRldfSAomIzQzOyNkZWZpbmUgX19NWEw4NjJYWF9GV19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgbXhsODYyeHhfcHJpdjsKJiM0MztzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7CiYjNDM7dm9pZCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCSAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfX01YTDg2MlhYX0ZXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jCmluZGV4IDRhY2QyMTZmN2NjMDA5Li4yZGJkMDc0YzBmZTI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jCkBAIC0xNSw2ICYjNDM7MTUsOCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9kc2EuaCZndDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1jbWQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1mdy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHgtaG9zdC5oJiMzNDsKIAogI2RlZmluZSBDVFJMX0JVU1lfTUFTSwkJCUJJVCgxNSkKQEAgLTM0MCw2ICYjNDM7MzQyLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsCiAKIAltdXRleF9sb2NrX25lc3RlZCgmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7CiAKJiM0MzsJaWYgKHByaXYtJmd0O3NraXBfdGVhcmRvd24pIHsKJiM0MzsJCXJldCA9IHJlYWQgPyAtRU5PREVWIDogMDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtibG9ja19ob3N0ICZhbXA7JmFtcDsgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkgewomIzQzOwkJcmV0ID0gLUVCVVNZOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKIAltYXggPSAoc2l6ZSAmIzQzOyAxKSAvIDI7CiAKIAlyZXQgPSBteGw4NjJ4eF9idXN5X3dhaXQocHJpdik7CkBAIC00OTUsMTIgJiM0Mzs1MTIsNDkgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHCQkweDFmCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TTURJT19QQUdFX01BU0sJMHhmZmYwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TTURJT19PRkZfTUFTSwkJMHgwMDBmCiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2J1czsKJiM0MzsJaW50IHBoeSA9IHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsCiYjNDM7CQkJICAgICAgYWRkciAmYW1wOyBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlyZXQgPSBfX21kaW9idXNfcmVhZChidXMsIHBoeSwgYWRkciAmYW1wOyBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LSZndDttZGlvZGV2LSZndDtidXM7CiYjNDM7CWludCBwaHkgPSBwcml2LSZndDttZGlvZGV2LSZndDthZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLAomIzQzOwkJCSAgICAgIGFkZHIgJmFtcDsgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyICZhbXA7IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLLAomIzQzOwkJCQkgICAgICB2YWwpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogdm9pZCBteGw4NjJ4eF9ob3N0X2luaXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiB7CiAJSU5JVF9XT1JLKCZhbXA7cHJpdi0mZ3Q7Y3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pOwomIzQzOwlJTklUX1dPUksoJmFtcDtwcml2LSZndDtyZXNjdWVfaGVhbF93b3JrLCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKTsKIH0KIAogdm9pZCBteGw4NjJ4eF9ob3N0X3NodXRkb3duKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQogewogCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtwcml2LSZndDtjcmNfZXJyX3dvcmspOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7cmVzY3VlX2hlYWxfd29yayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaAppbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaApAQCAtMTgsNSAmIzQzOzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSwKIAlteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgJmFtcDsoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKQogCiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpOwomIzQzO2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcik7CiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCk7CiAKICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMKQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKIAogCXN3aXRjaCAocG9ydCkgewogCWNhc2UgOSAuLi4gMTY6CiYjNDM7CQlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiAJCWlmICghTVhMODYyWFhfRldfVkVSX01JTihwcml2LCAxLCAwLCA4NCkpIHsKIAkJCWRldl93YXJuX29uY2UoZHAtJmd0O2RzLSZndDtkZXYsCiAJCQkJICAgICAgJiMzNDtTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMKaW5kZXggNDVkMjM3YjNhNDBmMTAuLjhkMjE3NDdjZGYxNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYwpAQCAtMjEsNiAmIzQzOzIxLDcgQEAKICNpbmNsdWRlICYjMzQ7bXhsODYyeHguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWFwaS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtZncuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWhvc3QuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LXBoeWxpbmsuaCYjMzQ7CiAKQEAgLTcxLDYgJiM0Mzs3MiwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIG14bDg2Mnh4X3Jtb25fcmFuZ2VzW10gPSB7CiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1RJTUVPVVRfTVMJMTAwMDAKICNkZWZpbmUgTVhMODYyWFhfUkVBRFlfUE9MTF9NUwkJMTAwCiAKJiM0MzsvKiBDaGlwIElEIHJlZ2lzdGVycywgcmVhZCB2aWEgU1lTX01JU0NfUkVHX1JEICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9DSElQSURfTAkJMHhjMGQyODg4NAomIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX00JCTB4YzBkMjg4ODgKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MCQlHRU5NQVNLKDE1LCAxMikKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NCQlHRU5NQVNLKDExLCAwKQomIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTglHRU5NQVNLKDE0LCAxMikKJiM0MzsKICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMCQkweGUwMAogI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTCQkweGUxMgogI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTCQkweGUxMwpAQCAtMjIyLDcgJiM0MzsyMzAsNDYgQEAgc3RhdGljIGludCBteGw4NjJ4eF9waHlfd3JpdGVfYzQ1X21paV9idXMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsCiAJcmV0dXJuIG14bDg2Mnh4X3BoeV93cml0ZV9tbWQoYnVzLSZndDtwcml2LCBhZGRyLCBkZXZhZGQsIHJlZ251bSwgdmFsKTsKIH0KIAotc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0MzsvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElECiYjNDM7ICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZQomIzQzOyAqIGNhY2hlZCBhdCBzZXR1cCBhbmQgbGVmdCB6ZXJvIHdoZW4gdGhlIHN3aXRjaCBpcyBpbiByZXNjdWUgbW9kZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHJlZyA9IHt9OwomIzQzOwl1MTYgY2hpcGlkX2wsIGNoaXBpZF9tOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9MKTsKJiM0MzsJcmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJY2hpcGlkX2wgPSBsZTMyX3RvX2NwdShyZWcudmFsKTsKJiM0MzsKJiM0MzsJcmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTSk7CiYjNDM7CXJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWNoaXBpZF9tID0gbGUzMl90b19jcHUocmVnLnZhbCk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2FzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8CiYjNDM7CQkJRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NLCBjaGlwaWRfbSkgJmx0OyZsdDsgNDsKJiM0MzsJcHJpdi0mZ3Q7YXNpY19yZXYgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTiwgY2hpcGlkX20pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogbXhsODYyeHhfd2FpdF9yZWFkeSAtIHdhaXQgZm9yIHRoZSBzd2l0Y2ggZmlybXdhcmUgdG8gYmVjb21lIG9wZXJhdGlvbmFsCiYjNDM7ICogQGRzOiBEU0Egc3dpdGNoIGluc3RhbmNlCiYjNDM7ICoKJiM0MzsgKiBQb2xsIHRoZSBmaXJtd2FyZSB1bnRpbCBpdCByZXBvcnRzIGl0cyB2ZXJzaW9uIGFuZCBhY2NlcHRzCiYjNDM7ICogY29uZmlndXJhdGlvbiBjb21tYW5kcywgdGhlbiBjYWNoZSB0aGUgZmlybXdhcmUgdmVyc2lvbiBhbmQgY2hpcCBJRC4KJiM0MzsgKiBUYWtlcyBhdCBsZWFzdCB0d28gc2Vjb25kcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KJiM0MzsgKi8KJiM0MztpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9OwogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzLCB0aW1lb3V0OwpAQCAtMjU0LDYgJiM0MzszMDEsMTEgQEAgc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciA9IHZlci5pdl9tYWpvcjsKIAkJcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciA9IHZlci5pdl9taW5vcjsKIAkJcHJpdi0mZ3Q7ZndfdmVyc2lvbi5yZXZpc2lvbiA9IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbik7CiYjNDM7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9yZWFkX2NoaXBfaWQocHJpdik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWRldl93YXJuKGRzLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgY2hpcCBJRDogJXBlXG4mIzM0OywKJiM0MzsJCQkJIEVSUl9QVFIocmV0KSk7CiAJCXJldHVybiAwOwogCiBub3RfcmVhZHlfeWV0OgpAQCAtNjIyLDE1ICYjNDM7Njc0LDQ5IEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWludCBuX3VzZXJfcG9ydHMgPSAwLCBtYXhfdmxhbnM7CiAJaW50IGluZ3Jlc3NfZmluYWxzLCB2aWRfcnVsZXM7CiAJc3RydWN0IGRzYV9wb3J0ICpkcDsKLQlpbnQgcmV0LCBpOwomIzQzOwlpbnQgcmV0LCBpLCByZXNjdWU7CiAKLQlyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwkvKiBEZXRlY3QgdGhlIGxvYWRlciBvdmVyIFNCIFBESSBmaXJzdDogaXQgbmVlZHMgbm8gZmlybXdhcmUsIHVubGlrZSB0aGUKJiM0MzsJICogQzQ1IEFQSSAobXhsODYyeHhfcmVzZXQvd2FpdF9yZWFkeSkgd2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vbmUKJiM0MzsJICogYW5zd2Vycy4gVG91Y2ggQzQ1IG9ubHkgb25jZSByZXNjdWUgaXMgcnVsZWQgb3V0LgomIzQzOwkgKi8KJiM0MzsJcmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpOwomIzQzOwlpZiAocmVzY3VlICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXNjdWU7CiAKLQlyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpIHsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJLyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqLwomIzQzOwkJCXJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTsKJiM0MzsJCQlpZiAocmVzY3VlICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJlc2N1ZTsKJiM0MzsJCQlpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cmVzY3VlX21vZGUgPSByZXNjdWU7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJaWYgKHByaXYtJmd0O3Jlc2N1ZV9yZWFkeSkgewomIzQzOwkJCWRldl93YXJuKGRzLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcbiYjMzQ7KTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogRHJhaW4gdGhlIHdlZGdlZCBkb3dubG9hZCBpbiB0aGUgYmFja2dyb3VuZCBzbyBpdAomIzQzOwkJCSAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZQomIzQzOwkJCSAqIGF2YWlsYWJsZSBvbmNlIHJlYWR5LgomIzQzOwkJCSAqLwomIzQzOwkJCWRldl93YXJuKGRzLSZndDtkZXYsCiYjNDM7CQkJCSAmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHdpdGggYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJlY292ZXJpbmcgaW4gYmFja2dyb3VuZFxuJiMzNDspOwomIzQzOwkJCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZhbXA7cHJpdi0mZ3Q7cmVzY3VlX2hlYWxfd29yayk7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3NlcmRlc19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDtzZXJkZXNfcG9ydHMpOyBpJiM0MzsmIzQzOykKQEAgLTcxNSwxMSAmIzQzOzgwMSwyMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc3RhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpCiBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJcmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIHsKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCWlmIChteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSkpCiAJCWRldl9lcnIoZHMtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb3J0ICVkXG4mIzM0OywgcG9ydCk7CiB9CkBAIC0xMzM3LDYgJiM0MzsxNDMzLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQogCWJvb2wgaXNfY3B1X3BvcnQgPSBkc2FfcG9ydF9pc19jcHUoZHApOwogCWludCByZXQ7CiAKJiM0MzsJLyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdAomIzQzOwkgKiBzdWNjZWVkIGZvciB0aGUgdHJlZSB0byByZWdpc3Rlci4KJiM0MzsJICovCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybiBkc2FfcG9ydF9pc191c2VyKGRwKSA/IC1FTk9ERVYgOiAwOwomIzQzOwogCXJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTU3Miw2ICYjNDM7MTY3NCwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCWV0aGVyX2FkZHJfY29weShxcGFyYW0ubWFjLCBtZGItJmd0O2FkZHIpOwogCiAJcmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgTVhMODYyWFhfTUFDX1RBQkxFRU5UUllRVUVSWSwgcXBhcmFtKTsKJiM0MzsJLyogLUVOT0RFVjogdGhlIGZpcm13YXJlIGFuZCBpdHMgTUFDIHRhYmxlIGFyZSBnb25lLCBub3RoaW5nIGxlZnQKJiM0MzsJICogdG8gZGVsZXRlCiYjNDM7CSAqLwomIzQzOwlpZiAocmV0ID09IC1FTk9ERVYpCiYjNDM7CQlyZXR1cm4gMDsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjI4LDYgJiM0MzsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBCUl9TVEFURV9ESVNBQkxFRDoKIAkJcGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpOwpAQCAtMjAxNSw2ICYjNDM7MjEyNSwxMiBAQCBzdGF0aWMgdm9pZCBteGw4NjJ4eF9zdGF0c193b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBwcml2LSZndDtkczsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwogCiYjNDM7CS8qIEEgZ2V0X3N0YXRzNjQoKSByZS1hcm0gY2FuIHJhY2UgdGhlIGZsYXNoIHRlYXJkb3duJiMzOTtzIFdPUktfU1RPUFBFRAomIzQzOwkgKiBzZXQgYW5kIGNhbmNlbDsgYmFpbCBoZXJlIHNvIGEgc3RyYXkgcG9sbCBuZXZlciBydW5zIGR1cmluZyBhIGZsYXNoLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCAmYW1wO3ByaXYtJmd0O2ZsYWdzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcykKIAkJbXhsODYyeHhfc3RhdHNfcG9sbChkcywgZHAtJmd0O2luZGV4KTsKIApAQCAtMjA4Niw2ICYjNDM7MjIwMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHsKIAkuZ2V0X3BhdXNlX3N0YXRzID0gbXhsODYyeHhfZ2V0X3BhdXNlX3N0YXRzLAogCS5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLAogCS5nZXRfc3RhdHM2NCA9IG14bDg2Mnh4X2dldF9zdGF0czY0LAomIzQzOwkuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsCiYjNDM7CS5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLAogfTsKIAogc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCmluZGV4IDQzMmE1ZjNmMmUwOGU2Li4xMjk5ODVmMmJiZjNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmgKQEAgLTE0LDYgJiM0MzsxNCwxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdjsKICNkZWZpbmUgTVhMODYyWFhfRklSU1RfU0VSREVTX1BPUlQJOQogI2RlZmluZSBNWEw4NjJYWF9TRVJERVNfU0xPVFMJCTQKIAomIzQzOy8qIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpIHJldHVybiBjb2RlcyAobmVnYXRpdmUgdmFsdWVzIGFyZSBlcnJvcnMpICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFCQkwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9JTl9SRVNDVUUJCTEKJiM0MzsKICNkZWZpbmUgTVhMODYyWFhfREVGQVVMVF9CUklER0UJCTAKICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRVMJCTQ4CiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VfUE9SVFMJMTI4CkBAIC0zMDMsNiAmIzQzOzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7CiAgKiAgICAgICAgICAgICAgICAgICAgICBmbG9vZGluZykKICAqIEBmd192ZXJzaW9uOiAgICAgICAgIGNhY2hlZCBmaXJtd2FyZSB2ZXJzaW9uLCBwb3B1bGF0ZWQgYXQgcHJvYmUgYW5kCiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKQomIzQzOyAqIEBhc2ljX2lkOiAgICAgICAgICAgIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycywKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayAmIzM0O2FzaWMuaWQmIzM0OyBmaXhlZCB2ZXJzaW9uCiYjNDM7ICogQGFzaWNfcmV2OiAgICAgICAgICAgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgJiMzNDthc2ljLnJldiYjMzQ7IGZpeGVkIHZlcnNpb24KICAqIEBzZXJkZXNfcG9ydHM6ICAgICAgIFNlckRlcyBpbnRlcmZhY2VzIGluY2wuIHN1Yi1pbnRlcmZhY2VzIGluIGNhc2Ugb2YKICAqICAgICAgICAgICAgICAgICAgICAgIDEwR19RWEdNSUkgb3IgUVNHTUlJCiAgKiBAc2VyZGVzX3JlZmNvdW50OiAgICBwZXItWFBDUyBjb3VudCBvZiBzdWItcG9ydHMgZW5hYmxlZCBieSBwaHlsaW5rOwpAQCAtMzE5LDYgJiM0MzszMjcsMTUgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gewogICogQGV2bGFuX2luZ3Jlc3Nfc2l6ZTogcGVyLXBvcnQgaW5ncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemUKICAqIEBldmxhbl9lZ3Jlc3Nfc2l6ZTogIHBlci1wb3J0IGVncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemUKICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemUKJiM0MzsgKiBAYmxvY2tfaG9zdDogICAgICAgICByZWplY3QgZmlybXdhcmUgQVBJIGNvbW1hbmRzIChleGNlcHQgRldfVVBEQVRFKQomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoCiYjNDM7ICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93bgomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZCBieSB0aGUgcG9zdC1mbGFzaCByZXByb2JlCiYjNDM7ICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kcyBmYWlsIGZhc3QsCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3MKJiM0MzsgKiBAcmVzY3VlX3JlYWR5OiAgICAgICAocmVzY3VlX21vZGUpIGxvYWRlciBpcyBhdCBhIGNsZWFuIFJFQURZIGFuZCB3aWxsIGFjY2VwdAomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGEgZmxhc2g7IGZhbHNlIHdoaWxlIHJlc2N1ZV9oZWFsX3dvcmsgaXMgZHJhaW5pbmcKJiM0MzsgKiBAcmVzY3VlX2hlYWxfd29yazogICBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBkcmFpbmluZyBhIHdlZGdlZCBkb3dubG9hZCB0byBSRUFEWQogICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVycwogICogICAgICAgICAgICAgICAgICAgICAgYW5kIGFjY3VtdWxhdGVzIHRoZW0gaW50byA2NC1iaXQgcGVyLXBvcnQgc3RhdHMKICAqLwpAQCAtMzI2LDkgJiM0MzszNDMsMTIgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXYgewogCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAlzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7CiAJc3RydWN0IHdvcmtfc3RydWN0IGNyY19lcnJfd29yazsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHJlc2N1ZV9oZWFsX3dvcms7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgZHJvcF9tZXRlcjsKIAlzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiBmd192ZXJzaW9uOwomIzQzOwl1MTYgYXNpY19pZDsKJiM0MzsJdTggYXNpY19yZXY7CiAJc3RydWN0IG14bDg2Mnh4X3BjcyBzZXJkZXNfcG9ydHNbOF07CiAJaW50IHNlcmRlc19yZWZjb3VudFsyXTsKIAlzdHJ1Y3QgbXV0ZXggc2VyZGVzX2xvY2s7CkBAIC0zMzcsNyAmIzQzOzM1NywxMyBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7CiAJdTE2IGV2bGFuX2luZ3Jlc3Nfc2l6ZTsKIAl1MTYgZXZsYW5fZWdyZXNzX3NpemU7CiAJdTE2IHZmX2Jsb2NrX3NpemU7CiYjNDM7CWJvb2wgYmxvY2tfaG9zdDsKJiM0MzsJYm9vbCBza2lwX3RlYXJkb3duOwomIzQzOwlib29sIHJlc2N1ZV9tb2RlOwomIzQzOwlib29sIHJlc2N1ZV9yZWFkeTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7CiB9OwogCiYjNDM7aW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKJiM0MzsKICNlbmRpZiAvKiBfX01YTDg2MlhYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtMTE3MCw2ICYjNDM7MTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7CiAJaW50CSgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAogCQkJCSAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwlpbnQJKCpkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAomIzQzOwkJCQkJc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAlpbnQJKCpkZXZsaW5rX3NiX3Bvb2xfZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmMKaW5kZXggZWQzNDJmMzQ1NjkyYmIuLmQ2MDIyMjY3YTgzOWNkIDEwMDY0NAotLS0gYS9uZXQvZHNhL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL2RldmxpbmsuYwpAQCAtMjAsNiAmIzQzOzIwLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCwKJiM0MzsJCQkJICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRzLSZndDtvcHMtJmd0O2RldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsCiAJCQkJICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCwKIAkJCQkgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbykKQEAgLTE2NywxOCAmIzQzOzE3NiwzMSBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsCiAJCQkJCQkJcF9tYXgpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHsKLQkuaW5mb19nZXQJCQk9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LAotCS5zYl9wb29sX2dldAkJCT0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsCi0JLnNiX3Bvb2xfc2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX3NldCwKLQkuc2JfcG9ydF9wb29sX2dldAkJPSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LAotCS5zYl9wb3J0X3Bvb2xfc2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsCi0JLnNiX3RjX3Bvb2xfYmluZF9nZXQJCT0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwKLQkuc2JfdGNfcG9vbF9iaW5kX3NldAkJPSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LAotCS5zYl9vY2Nfc25hcHNob3QJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LAotCS5zYl9vY2NfbWF4X2NsZWFyCQk9IGRzYV9kZXZsaW5rX3NiX29jY19tYXhfY2xlYXIsCi0JLnNiX29jY19wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LAomIzQzOy8qIFRoZSBkZXZsaW5rIGNvcmUgcmVqZWN0cyBmbGFzaCByZXF1ZXN0cyB1cCBmcm9udCB3aGVuIHRoZSBmbGFzaF91cGRhdGUKJiM0MzsgKiBvcCBpcyBhYnNlbnQsIGJlZm9yZSBmZXRjaGluZyB0aGUgZmlybXdhcmUgZmlsZSBmcm9tIHVzZXJzcGFjZS4gT25seQomIzQzOyAqIGluc3RhbGwgdGhlIG9wIGZvciBzd2l0Y2hlcyB3aG9zZSBkcml2ZXIgaW1wbGVtZW50cyBpdCwgc28gdGhhdAomIzQzOyAqIHVuc3VwcG9ydGVkIHJlcXVlc3RzIGtlZXAgZmFpbGluZyBlYXJseS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIERTQV9ERVZMSU5LX09QUwkJCQkJCQlcCiYjNDM7CS5pbmZvX2dldAkJCT0gZHNhX2RldmxpbmtfaW5mb19nZXQsCQlcCiYjNDM7CS5zYl9wb29sX2dldAkJCT0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsCVwKJiM0MzsJLnNiX3Bvb2xfc2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX3NldCwJXAomIzQzOwkuc2JfcG9ydF9wb29sX2dldAkJPSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LAlcCiYjNDM7CS5zYl9wb3J0X3Bvb2xfc2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsCVwKJiM0MzsJLnNiX3RjX3Bvb2xfYmluZF9nZXQJCT0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXAomIzQzOwkuc2JfdGNfcG9vbF9iaW5kX3NldAkJPSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LCBcCiYjNDM7CS5zYl9vY2Nfc25hcHNob3QJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LAlcCiYjNDM7CS5zYl9vY2NfbWF4X2NsZWFyCQk9IGRzYV9kZXZsaW5rX3NiX29jY19tYXhfY2xlYXIsCVwKJiM0MzsJLnNiX29jY19wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LCBcCiAJLnNiX29jY190Y19wb3J0X2JpbmRfZ2V0CT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQsCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7CiYjNDM7CURTQV9ERVZMSU5LX09QUwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7CiYjNDM7CURTQV9ERVZMSU5LX09QUwomIzQzOwkuZmxhc2hfdXBkYXRlCQkJPSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsCiB9OwogCiBpbnQgZHNhX2RldmxpbmtfcGFyYW1fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLApAQCAtMzc4LDEyICYjNDM7NDAwLDE2IEBAIHZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogaW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJc3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7CiYjNDM7CWNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzOwogCXN0cnVjdCBkZXZsaW5rICpkbDsKIAomIzQzOwlvcHMgPSBkcy0mZ3Q7b3BzLSZndDtkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/ICZhbXA7ZHNhX2RldmxpbmtfZmxhc2hfb3BzCiYjNDM7CQkJCQkgICAgOiAmYW1wO2RzYV9kZXZsaW5rX29wczsKJiM0MzsKIAkvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhbgogCSAqIGFkZCBkcGlwZSB0YWJsZXMKIAkgKi8KLQlkbCA9IGRldmxpbmtfYWxsb2MoJmFtcDtkc2FfZGV2bGlua19vcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLSZndDtkZXYpOwomIzQzOwlkbCA9IGRldmxpbmtfYWxsb2Mob3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy0mZ3Q7ZGV2KTsKIAlpZiAoIWRsKQogCQlyZXR1cm4gLUVOT01FTTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI0NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaCBkcml2ZXIsIGFkZGluZyBmaXJtd2FyZSBmbGFzaGluZyBhbmQgZGV2bGluayBzdXBwb3J0LiBJdCB0b3VjaGVzIGEgZmV3IGZpbGVzOiBgbXhsODYyeHgtZncuY2AsIGFuZCBtb2RpZmljYXRpb25zIHRvIGBteGw4NjJ4eC5jYCwgYG14bDg2Mnh4LWhvc3QuY2AsIGBteGw4NjJ4eC1waHlsaW5rLmNgLCBhbmQgYG5ldC9kc2EvZGV2bGluay5jYC4gQmVmb3JlIEkgZGl2ZSBpbnRvIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBldmVuICpwb3NzaWJsZSogaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHNraXBwaW5nIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBjb2RlIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuCgpGaXJzdCB0aG91Z2h0OiBpcyB0aGUgYG14bDg2Mnh4YCBhIFBDSWUgc3dpdGNoPyBOb3BlLCBpdCYjMzk7cyBhIERTQSBzd2l0Y2gsIHdoaWNoIGlzIGltcG9ydGFudC4gRFNBIHN3aXRjaGVzIGFyZSBjb25uZWN0ZWQgdmlhIGEgZGlmZmVyZW50IGFyY2hpdGVjdHVyZSBmcm9tIHRoZSBQQ0llIHN3aXRjaGVzIG1lbnRpb25lZCBpbiB0aGUgcHJvbXB0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBEU0Egc3dpdGNoIGlzIGNvbm5lY3RlZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQgdXNlcyBNRElPIChgc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2YCkuIE1ESU8gaXMgYSBzZXJpYWwgYnVzLCB1bmxpa2UgUENJZS4KCk5vdywgdGhlIE1ESU8gZGV2aWNlcy4uLiBhcmUgdGhleSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZW11bGF0ZWQgb3IgZnV6emVkIHZpYSBzb21lIHZpcnR1YWwgTURJTyBidXM/IFN5emthbGxlciBkb2VzbiYjMzk7dCB1c3VhbGx5IGVtdWxhdGUgc3BlY2lmaWMgTURJTyBEU0Egc3dpdGNoZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZHJpdmVyIG9yIGlmIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc29tZSBnZW5lcmljIGludGVyZmFjZS4gVGhlIHByb21wdCBjb250aW51ZXMgdG8gY2F1dGlvbiBhYm91dCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLgoKU28sIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBgbXhsODYyeHhgIHJlYWNoYWJsZSBpbiBRRU1VPyBDYW4gSSBpbnN0YW50aWF0ZSBpdCBpbiBhIHdheSB0aGF0IHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aD8gSG93IHdvdWxkIEkgZ2V0IHRoaXMgdG8gd29yaz8gSSBrbm93IEkyQy9NRElPL1NQSSBkZXZpY2VzIGNhbiBzb21ldGltZXMgYmUgaW5zdGFudGlhdGVkIHZpYSBzeXNmcyBvciBuZXRsaW5rIGlmIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBidXMsIG9yIHZpYSBkZXZpY2UgdHJlZSBvdmVybGF5cy4gU3l6a2FsbGVyIGhhcyBzb21lIHN1cHBvcnQgZm9yIGluamVjdGluZyBJMkMvU1BJIGRldmljZXMsIGJ1dCBNRElPPyBOb3Qgc3VyZSBhYm91dCB0aGF0LgoKVGhlbiwgdGhlcmUmIzM5O3MgZGV2bGluay4gRGV2bGluayBjb21tYW5kcyBjYW4gYmUgc2VudCB0byAqYW55KiByZWdpc3RlcmVkIGRldmxpbmsgZGV2aWNlLiBIb3dldmVyLCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgaGFzIHRvICpwcm9iZSogYmVmb3JlIHRoZSBkZXZsaW5rIGRldmljZSBjYW4gYmUgcmVnaXN0ZXJlZCwgcmlnaHQ/IEFuZCB0aGUgZHJpdmVyIHByb2JlcyBvbiBhbiBNRElPIGJ1cy4gT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNgIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJvYmluZyBzZXF1ZW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtteGw4NjJ4eF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjE3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjIwOC1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIyMDk6c3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMjEwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMzE4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXhsODYyeHhfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjMxOTpcdC5wcm9iZSAgPSBteGw4NjJ4eF9wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIzMjAtXHQucmVtb3ZlID0gbXhsODYyeHhfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjcyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIGBteGw4NjJ4eGAgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtZGlvX2RyaXZlcmAsIHNwZWNpZmljYWxseSB0aGUgYG14bDg2Mnh4YCBvbmUuIFRoZSBxdWVzdGlvbiBpcywgY2FuIFN5emthbGxlciBlZmZlY3RpdmVseSBwcm9iZSBhbmQgZnV6eiB0aGlzIHRoaW5nPyBJIGtub3cgU3l6a2FsbGVyIGNhbiBoYW5kbGUgY2VydGFpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBgdmhjaWAgZm9yIFVTQiBvciBgbmV0ZGV2c2ltYCBmb3IgbmV0d29yayBkZXZpY2VzLCBhbmQgZXZlbiBgbWFjODAyMTFfaHdzaW1gLiBCdXQgTURJTyBpcyB0cmlja3kuIEl0IGxvb2tzIGxpa2Ugc29tZSBkcml2ZXJzLCBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBtaWdodCBiZSBwcm9iZWFibGUgd2l0aCBzb21lIGVmZm9ydCwgYW5kIGhhcmR3YXJlIERTQSBzd2l0Y2hlcyB0eXBpY2FsbHkgcmVxdWlyZSBhIGRldmljZSB0cmVlLCB3aGljaCBTeXprYWxsZXIgZG9lc24mIzM5O3QgZHluYW1pY2FsbHkgaGFuZGxlIGZvciBNRElPIGRldmljZXMgdW5sZXNzIGEgdmVyeSBzcGVjaWZpYyAmIzM0O3BzZXVkby1kZXZpY2UmIzM0OyBleGlzdHMuCgpOb3csIEkgKmRvKiBzZWUgdGhhdCBTeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rXy4uLmAgd2hpY2ggY291bGQgYmUgdXNlZnVsLCBidXQgdGhhdCByZWxpZXMgb24gdGhlIGRldmljZSBiZWluZyAqcHJlc2VudCogaW4gdGhlIGZpcnN0IHBsYWNlLiBJZiB0aGUgYG14bDg2Mnh4YCBkZXZpY2UgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgbXhsODYyeHhfcHJvYmVgIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgYmUgY2FsbGVkLCB3aGljaCBtZWFucyB0aGUgZGV2bGluayBmbGFzaCB1cGRhdGUgY29kZSB3aWxsIGFsc28gYmUgdW5yZWFjaGFibGUuIFRoYXQmIzM5O3MgYSBwcm9ibGVtLgoKSG1tLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhhdCBjb2RlIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmU/IEkgc2F3IHRoYXQgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgdXNlcyBNRElPIHJlYWRzIGFuZCB3cml0ZXMuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgdGhlcmUsIGl0IHNob3VsZCBmYWlsIHdpdGggYC1FTk9ERVZgLiBUaGF0IGNvdWxkIGJlIGEgcG9zc2libGUgZW50cnkgcG9pbnQsIGJ1dCBpdCBzdGlsbCBtZWFucyB0aGVyZSBhcmUgZGV2aWNlIGRlcGVuZGVuY2llcy4gRXZlbiBpZiBJIGNvdWxkIHNvbWVob3cgaW5zdGFudGlhdGUgdGhlIGRldmljZSwgaXQgc3RpbGwgY29tbXVuaWNhdGVzIHdpdGggdGhlIGhhcmR3YXJlIHZpYSBNRElPLgoKVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHgsIGEgKnNwZWNpZmljKiBoYXJkd2FyZSBzd2l0Y2guIERvZXMgUUVNVSBldmVuIGVtdWxhdGUgdGhpcz8gTm8sIGl0IGRvZXNuJiMzOTt0LiBBbmQgdGhhdCYjMzk7cyB0aGUga2lja2VyLiBTaW5jZSBJIGNhbiYjMzk7dCBlbXVsYXRlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB0aGUgY29yZSBjb2RlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGJ5IFN5emthbGxlci4KClRoZXJlZm9yZSwgZm9yIG15IHB1cnBvc2VzLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJiMzOTt0IHRoZXJlLgoKSG93ZXZlciwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjazsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIHNlZSBjaGFuZ2VzIGluIGBuZXQvZHNhL2RldmxpbmsuY2AgdGhhdCByZWxhdGUgdG8gYGRldmxpbmtfZmxhc2hfdXBkYXRlYCwgYW5kIHRoYXQmIzM5O3MgZ2VuZXJpYyBEU0EgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBjaGFuZ2VkIHRoZXJlLiBMZXQgbWUgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhL2RldmxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RldmxpbmsuYz0xMT1zdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbi0tXG5uZXQvZHNhL2RldmxpbmsuYy0yMi1cbm5ldC9kc2EvZGV2bGluay5jOjIzOnN0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcbm5ldC9kc2EvZGV2bGluay5jLTI0LVx0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbi0tXG5uZXQvZHNhL2RldmxpbmsuYz0yMDE9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7XG5uZXQvZHNhL2RldmxpbmsuYy0yMDItXHREU0FfREVWTElOS19PUFNcbm5ldC9kc2EvZGV2bGluay5jOjIwMzpcdC5mbGFzaF91cGRhdGVcdFx0XHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbm5ldC9kc2EvZGV2bGluay5jLTIwNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgUGF0Y2ggZm9yIERTQSBEZXZsaW5rIEZsYXNoIFVwZGF0ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGFkZHMgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgdG8gYG5ldC9kc2EvZGV2bGluay5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQsIGFzIGFsd2F5cywgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3QuIElzIHRoaXMgYSBjb21tb24gb3BlcmF0aW9uIHdpdGhpbiB0aGUgRFNBIHdvcmxkLCBvciBpcyB0aGlzIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBzd2l0Y2ggb3IgZmFtaWx5IG9mIHN3aXRjaGVzPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBhbnkgb3RoZXIgRFNBIHN3aXRjaGVzIGN1cnJlbnRseSB1dGlsaXplIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBuZXcgYWRkaXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCB3aXRoaW4gYHN0cnVjdCBkc2Ffc3dpdGNoX29wc2AgYWNyb3NzIG90aGVyIGRyaXZlcnMuIFRoYXQmIzM5O2xsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBmb2xsb3dzIGFuIGVzdGFibGlzaGVkIHBhdHRlcm4gb3IgaW50cm9kdWNlcyBhIG5vdmVsIGFwcHJvYWNoLiBUaGlzIGluaXRpYWwgYW5hbHlzaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2UmIzM5O3MgaW1wbGljYXRpb25zIGZvciB0aGUgYnJvYWRlciBEU0EgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfZmxhc2hfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYz0yMDU9c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTIwNy17XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzoyMDg6XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTIwOS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM9NzczPWludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYy04MzAtXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzo4MzE6aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jOjgzMjpcdFx0XHRcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtODMzLVx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3Lmg9MTM9aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oLTE1LVx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaDoxNjppbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3Lmg6MTc6XHRcdFx0XHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oLTE4LVx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTIxNzM9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIyMDUtXHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoyMjA2Olx0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMjA3LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwMDkKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIFBsdW1iaW5nOiBObyBGdXp6aW5nIE5lZWRlZCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB3aGVyZSB3ZSYjMzk7cmUgYXQuIFRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpbiBgbmV0L2RzYS9kZXZsaW5rLmNgIGlzIG1pbm9yLCBqdXN0IGEgc2luZ2xlIGZ1bmN0aW9uIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLiBJdCBlc3NlbnRpYWxseSBzZXJ2ZXMgYXMgYSBicmlkZ2UsIGNhbGxpbmcgYSBkcml2ZXItc3BlY2lmaWMgZnVuY3Rpb24gYGRzLSZndDtvcHMtJmd0O2RldmxpbmtfZmxhc2hfdXBkYXRlYC4gVGhlIHByb2JsZW0/IE9ubHkgdGhlIGBteGw4NjJ4eGAgZHJpdmVyIGFjdHVhbGx5ICppbXBsZW1lbnRzKiB0aGF0IGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2suCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0NvdWxkIGEgbW9yZSBhY2Nlc3NpYmxlIGRyaXZlciwgbGlrZSBgZHNhX2xvb3BgLCBgZHNhX21vY2tgLCBvciBldmVuIGBtdjg4ZTZ4eHhgLCBzb21laG93IGxldmVyYWdlIHRoaXM/JiMzNDsgQnV0IGEgcXVpY2sgY2hlY2sgY29uZmlybXM6IE5vLCBvbmx5IGBteGw4NjJ4eGAgaXMgdXNpbmcgaXQuIEFuZCBgbXhsODYyeHhgIGlzIGEgKmhhcmR3YXJlKiBzd2l0Y2gsIHdoaWNoIG1lYW5zIGl0IGNhbiYjMzk7dCBiZSBwcm9iZWQgb3IgdXNlZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBRRU1VIHNldHVwLgoKU28sIHRoaXMgcGF0Y2ggaXMgYmFzaWNhbGx5IGEgbmljaGUgZmVhdHVyZSBhZGRpdGlvbiBmb3Igb25lIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlci4gVGhlIGNvcmUgRFNBIHBsdW1iaW5nIGl0IHRvdWNoZXMgaXMgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIGluIGFueSBlbXVsYXRlZCBlbnZpcm9ubWVudC4gVGhlcmUmIzM5O3Mgbm8gcG9zc2libGUgd2F5IHRvIHRyaWdnZXIgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgaW4gYSBmdXp6YWJsZSBlbnZpcm9ubWVudC4gSSBkb3VibGUtY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIGEgZHJpdmVyICpkaWRuJiMzOTt0KiBwcm92aWRlIHRoYXQgY2FsbGJhY2ssIHRoZSBkZWZhdWx0IHBhdGggd291bGRuJiMzOTt0IHNvbWVob3cgbGVhZCB1cyB0aGVyZS4gSXQmIzM5O3MgYWxsIGxvY2tlZCBiZWhpbmQgdGhhdCBgZGV2bGlua19mbGFzaF91cGRhdGVgIHBvaW50ZXIsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXIuCgpUaGVyZWZvcmUsIG5vLCB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIGFueXRoaW5nIGludGVyZXN0aW5nIHdpdGggdGhlIGdpdmVuIHNldHVwIGlzIGVmZmVjdGl2ZWx5IHplcm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIG1pbm9yIHBsdW1iaW5nIGFkZGVkIHRvIHRoZSBnZW5lcmljIERTQSBkZXZsaW5rIGNvcmUgaXMgb25seSByZWFjaGFibGUgaWYgYSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBjYWxsYmFjaywgd2hpY2ggY3VycmVudGx5IG9ubHkgdGhlIHVucmVhY2hhYmxlIGBteGw4NjJ4eGAgZHJpdmVyIGRvZXMuIFRodXMsIHRoZSBuZXcgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBwcmltYXJpbHkgYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBzdXBwb3J0IHRvIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGUgbWlub3IgcGx1bWJpbmcgYWRkZWQgdG8gdGhlIGdlbmVyaWMgRFNBIGRldmxpbmsgY29yZSBpcyBvbmx5IHJlYWNoYWJsZSBpZiBhIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBgZGV2bGlua19mbGFzaF91cGRhdGVgIGNhbGxiYWNrLCB3aGljaCBjdXJyZW50bHkgb25seSB0aGUgdW5yZWFjaGFibGUgYG14bDg2Mnh4YCBkcml2ZXIgZG9lcy4gVGh1cywgdGhlIG5ldyBjb2RlIGNhbm5vdCBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NToxMi45NzE5NDM5NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIwNDQxNjM4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIG1pbm9yIHBsdW1iaW5nIGFkZGVkIHRvIHRoZSBnZW5lcmljIERTQSBkZXZsaW5rIGNvcmUgaXMgb25seSByZWFjaGFibGUgaWYgYSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBjYWxsYmFjaywgd2hpY2ggY3VycmVudGx5IG9ubHkgdGhlIHVucmVhY2hhYmxlIGBteGw4NjJ4eGAgZHJpdmVyIGRvZXMuIFRodXMsIHRoZSBuZXcgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NToxMi45NzE5NDk0NjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODY1MTczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkOTBlMGRmNDcyZWQ1ZWU4YjYzYTBjYjNjYThmM2YxYTQ4NWM1NjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6NDU6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuaW5kZXggNDc0NTE0OGZlY2Y0ZmUuLjA1ODk5OWQwZGM1NmYyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxcbkBAIC05NCw2ICs5NCw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy5cXG4gICAgbWx4NVxcbiAgICBtbHhzd1xcbiAgICBtdjg4ZTZ4eHhcXG4rICAgbXhsODYyeHhcXG4gICAgbmV0ZGV2c2ltXFxuICAgIG5mcFxcbiAgICBvY3Rlb250eDJcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjNlOWY3ZDRkNDk2OWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XFxuQEAgLTAsMCArMSw2MyBAQFxcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rPT09PT09PT09PT09PT09PT09PT09PT09XFxuK214bDg2Mnh4IGRldmxpbmsgc3VwcG9ydFxcbis9PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZVxcbitgYG14bDg2Mnh4YGAgZGV2aWNlIGRyaXZlci5cXG4rXFxuK0luZm8gdmVyc2lvbnNcXG4rPT09PT09PT09PT09PVxcbitcXG4rVGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXFxuK1xcbisuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkXFxuKyAgIDp3aWR0aHM6IDUgNSA1IDg1XFxuK1xcbisgICAqIC0gTmFtZVxcbisgICAgIC0gVHlwZVxcbisgICAgIC0gRXhhbXBsZVxcbisgICAgIC0gRGVzY3JpcHRpb25cXG4rICAgKiAtIGBgYXNpYy5pZGBgXFxuKyAgICAgLSBmaXhlZFxcbisgICAgIC0gODYyOFxcbisgICAgIC0gVGhlIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90XFxuKyAgICAgICByZXBvcnRlZCBmb3IgYSBzd2l0Y2ggc2l0dGluZyBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGFzIHRoZVxcbisgICAgICAgcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2l0aCBhIHJ1bm5pbmcgZmlybXdhcmUuXFxuKyAgICogLSBgYGFzaWMucmV2YGBcXG4rICAgICAtIGZpeGVkXFxuKyAgICAgLSAwXFxuKyAgICAgLSBUaGUgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdCByZXBvcnRlZFxcbisgICAgICAgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBlaXRoZXIuXFxuKyAgICogLSBgYGZ3YGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gMS4wLjcwXFxuKyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBzd2l0Y2gsIHJlcG9ydGVkIGFzIGJvdGhcXG4rICAgICAgIHJ1bm5pbmcgYW5kIHN0b3JlZCBzaW5jZSB0aGUgc3dpdGNoIGJvb3RzIGl0IGZyb20gaXRzIG93biBmbGFzaC5cXG4rICAgICAgIEluIE1DVWJvb3QgcmVzY3VlIG1vZGUgbm90aGluZyBpcyByZXBvcnRlZCB3aGlsZSBhbiBpbnRlcnJ1cHRlZFxcbisgICAgICAgZG93bmxvYWQgaXMgc3RpbGwgYmVpbmcgcmVjb3ZlcmVkIGluIHRoZSBiYWNrZ3JvdW5kOyBvbmNlIHRoZVxcbisgICAgICAgbG9hZGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBpbWFnZSB0aGUgdmVyc2lvbiBpcyByZXBvcnRlZCAoYXNcXG4rICAgICAgIGJvdGggcnVubmluZyBhbmQgc3RvcmVkKSwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IGEgZmxhc2ggd2lsbCBiZVxcbisgICAgICAgYWNjZXB0ZWQuIEl0IHJlYWRzIFxcXCIwLjAuMFxcXCIgd2hlbiB0aGUgc3dpdGNoIGNhbWUgdXAgc3RyYWlnaHQgaW50b1xcbisgICAgICAgTUNVYm9vdCB3aXRob3V0IGV2ZXIgcnVubmluZyBmaXJtd2FyZS5cXG4rXFxuK0ZsYXNoIHVwZGF0ZVxcbis9PT09PT09PT09PT1cXG4rXFxuK1RoZSBgYG14bDg2Mnh4YGAgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgYGBkZXZsaW5rIGRldiBmbGFzaGBgLlxcbitUaGUgc2lnbmVkIGZpcm13YXJlIGltYWdlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBzd2l0Y2ggb3ZlciB0aGUgc2FtZVxcbitNRElPIGJ1cyB3aGljaCBpcyBhbHNvIHVzZWQgdG8gbWFuYWdlIHRoZSBzd2l0Y2gsIHRoZW4gdmVyaWZpZWQgYW5kXFxuK2luc3RhbGxlZCBieSB0aGUgTUNVYm9vdCBib290bG9hZGVyIHJ1bm5pbmcgb24gdGhlIHN3aXRjaC4gQWxsIHBvcnRzXFxuK29mIHRoZSBzd2l0Y2ggYXJlIGNsb3NlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1cGRhdGUgYW5kIHRoZSBkcml2ZXJcXG4rcmVwcm9iZXMgdGhlIHN3aXRjaCBhZnRlciBpdCBoYXMgcmVib290ZWQgaW50byB0aGUgbmV3IGZpcm13YXJlLiBBXFxuK2NvbXBsZXRlIGZsYXNoIGFuZCByZXByb2JlIGN5Y2xlIHRha2VzIGFib3V0IG9uZSBtaW51dGUuXFxuK1xcbitBIHN3aXRjaCBzdHVjayBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCBlLmcuIGFmdGVyIGFuIGludGVycnVwdGVkXFxuK3VwZGF0ZSwgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IHVzZXIgcG9ydHMuIElmIHRoZSBwcmV2aW91cyBkb3dubG9hZCB3YXNcXG4raW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIHRoZSBsb2FkZXIgaXMgd2VkZ2VkOyB0aGUgZHJpdmVyIGRyYWlucyBpdFxcbitiYWNrIHRvIGEgY2xlYW4gcmVhZHkgc3RhdGUgaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGNhbiBlYXNpbHkgdGFrZVxcbittb3JlIHRoYW4gMTAgbWludXRlcy4gRHVyaW5nIHRoYXQgcmVjb3ZlcnkgYGBkZXZsaW5rIGRldiBpbmZvYGAgcmVwb3J0c1xcbitubyBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBgYGRldmxpbmsgZGV2IGZsYXNoYGAgcmV0dXJucyBgYC1FQlVTWWBgLlxcbitPbmNlIHRoZSBsb2FkZXIgaXMgcmVhZHkgdGhlIGZpcm13YXJlIHZlcnNpb24gYXBwZWFycyBhbmQgZmxhc2hpbmcgYVxcbitmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIHRoZSByZWd1bGFyIHVwZGF0ZSBmbG93IHJlY292ZXJzIHRoZSBzd2l0Y2guXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA2MGNmZjAwOTUzZGNiZS4uM2E1NWVkMmJhZDljYmEgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNjEwNyw2ICsxNjEwNyw3IEBAIE06XFx0RGFuaWVsIEdvbGxlIFxcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcXHUwMDNlXFxuIEw6XFx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xcbiBTOlxcdE1haW50YWluZWRcXG4gRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tYXhsaW5lYXIsbXhsODYyeHgueWFtbFxcbitGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdFxcbiBGOlxcdGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cXG4gRjpcXHRuZXQvZHNhL3RhZ19teGw4NjJ4eC5jXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcXG5pbmRleCBhN2JlMGU2NjY5ZGZhNS4uYmNjYWMwZDBmNzAzZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXFxuQEAgLTEsMyArMSwzIEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSArPSBteGw4NjJ4eF9kc2Eub1xcbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cXG4rbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXFxuaW5kZXggYTE4MGE1ZGVjZmZjMDEuLjZmNzcxODk1OTg0Y2IzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxcbkBAIC0xMjI0LDYgKzEyMjQsMTYgQEAgc3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHtcXG4gXFx0X19sZTMyIGl2X2J1aWxkX251bTtcXG4gfSBfX3BhY2tlZDtcXG4gXFxuKy8qKlxcbisgKiBzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyAtIFN5c3RlbSByZWdpc3RlciByZWFkL3dyaXRlXFxuKyAqIEBhZGRyOiAzMi1iaXQgcmVnaXN0ZXIgYWRkcmVzc1xcbisgKiBAdmFsOiByZWdpc3RlciB2YWx1ZVxcbisgKi9cXG4rc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncge1xcbitcXHRfX2xlMzIgYWRkcjtcXG4rXFx0X19sZTMyIHZhbDtcXG4rfSBfX3BhY2tlZDtcXG4rXFxuIC8qKlxcbiAgKiBlbnVtIG14bDg2Mnh4X3BvcnRfdHlwZSAtIFBvcnQgVHlwZVxcbiAgKiBATVhMODYyWFhfTE9HSUNBTF9QT1JUOiBMb2dpY2FsIFBvcnRcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmE4NjU0MjVhYTYxZTFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxcbkBAIC03MCw3ICs3MCw5IEBAXFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFxcdFxcdFxcdChHUFlfR1BZMlhYX01BR0lDICsgMHgxKVxcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXFx0XFx0XFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDIpXFxuIFxcbisjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVxcdFxcdChTWVNfTUlTQ19NQUdJQyArIDB4MSlcXG4gI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OXFx0XFx0KFNZU19NSVNDX01BR0lDICsgMHgyKVxcbisjZGVmaW5lIFNZU19NSVNDX1JFR19SRFxcdFxcdFxcdChTWVNfTUlTQ19NQUdJQyArIDB4OClcXG4gXFxuICNkZWZpbmUgTVhMODYyWFhfWFBDU19QQ1NfQ09ORklHXFx0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgKyAweDEpXFxuICNkZWZpbmUgTVhMODYyWFhfWFBDU19QQ1NfR0VUX1NUQVRFXFx0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgKyAweDIpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41NGIzNTU0NTM0YzJhZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xcbkBAIC0wLDAgKzEsOTQ5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIEZpcm13YXJlIGZsYXNoIGFuZCBkZXZsaW5rIHN1cHBvcnQgZm9yIE1heExpbmVhciBNeEw4NjJ4eFxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlIFxcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcXHUwMDNlXFxuKyAqXFxuKyAqIFNCIFBESSAtIGZpcm13YXJlIGRvd25sb2FkIGludGVyZmFjZSBvdmVyIGNsYXVzZS0yMiBTTURJT1xcbisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rICpcXG4rICogVGhlIE14TDg2Mnh4IE1DVWJvb3QgbG9hZGVyIGFjY2VwdHMgYSBmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIGZvdXIgXFxcIlNCIFBESVxcXCJcXG4rICogcmVnaXN0ZXJzIGluIHRoZSBzd2l0Y2ggU01ESU8gcmVnaXN0ZXIgc3BhY2UuIEl0IHJ1bnMgd2hlbmV2ZXIgbm8gV1NQXFxuKyAqIGZpcm13YXJlIGlzIGFjdGl2ZTogdGhlIG5vcm1hbCBmaXJtd2FyZSB1cGRhdGUgZW50ZXJzIGl0IGRlbGliZXJhdGVseSAtIHRoZVxcbisgKiBTWVNfTUlTQ19GV19VUERBVEUgQVBJIGNvbW1hbmQgc2V0cyBhIHN0aWNreSByZXNjdWUgYml0IGFuZCByZWJvb3RzIGludG9cXG4rICogTUNVYm9vdCAtIGFuZCB0aGUgbG9hZGVyIGFsc28gc3RheXMgaGVyZSB3aGVuIHRoZSBzdG9yZWQgV1NQIGZpcm13YXJlIGZhaWxzXFxuKyAqIGl0cyBib290LXRpbWUgaW50ZWdyaXR5IGNoZWNrLiBUaGlzIGRyaXZlciBkcml2ZXMgdGhlIGxvYWRlcidzIDB4YzU1Y1xcbisgKiBcXFwiY29uc29sZVxcXCIgZG93bmxvYWQgcGF0aC5cXG4rICpcXG4rICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKTpcXG4rICogICBNSUkgcmVnIDB4MWYgOj0gXFx1MDAzY3NiX3BkaV9yZWdcXHUwMDNlICAgICAgOyBhZGRyZXNzL3BhZ2UgbGF0Y2hcXG4rICogICBNSUkgcmVnIDB4MDAgOj0gLyA9XFx1MDAzZSBcXHUwMDNjdTE2IGRhdGFcXHUwMDNlICAgOyBkYXRhIHdpbmRvd1xcbisgKlxcbisgKiBTQiBQREkgcmVnaXN0ZXJzIChob3N0IG5hbWUvYWRkciAgLVxcdTAwM2UgIE1DVSBtYWlsYm94KTpcXG4rICogICBDVFJMIDB4ZTEwMCAtXFx1MDAzZSAweGMwOTM4NDAwICAgbW9kZTogUlNUPTB4MDAgIFJEPTB4MDEgIFdSPTB4MDJcXG4rICogICBBRERSIDB4ZTEwMSAtXFx1MDAzZSAweGMwOTM4NDA0ICAgU0IgdGFyZ2V0IHdvcmQgYWRkcmVzcyAoU0IxIGJhbmsgPSAweDc4MDApXFxuKyAqICAgREFUQSAweGUxMDIgLVxcdTAwM2UgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZFxcbisgKiAgIFNUQVQgMHhlMTAzIC1cXHUwMDNlIDB4YzA5Mzg0MGMgICBoYW5kc2hha2U6IGEgbWFnaWMgKGJlbG93KSBvciBhIGJ5dGUgY291bnRcXG4rICpcXG4rICogU1RBVCBtYWdpY3M6XFxuKyAqICAgUkVBRFkgIDB4YzU1YyAgIGxvYWRlciBpZGxlIGluIHRoZSBjb25zb2xlIGxvb3AgICAgICAgICh0aGlzIGRyaXZlcilcXG4rICogICBETF9SRFkgMHhjMzNjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGZsYXNobGVzcyBsb29wXFxuKyAqICAgU1RBUlQgIDB4ZjQ4ZiAgIGhvc3QgICAtXFx1MDAzZSBiZWdpbiBkb3dubG9hZCBzZXNzaW9uXFxuKyAqICAgQUNLICAgIDB4ZjQ5MCAgIGxvYWRlciAtXFx1MDAzZSBTVEFSVCBhY2tub3dsZWRnZWQgKFNUQVJUICsgMSlcXG4rICogICBFTkQgICAgMHgzY2MzICAgaG9zdCAgIC1cXHUwMDNlIGVuZCBvZiB0cmFuc2ZlciAvIGZpbmFsaXNlXFxuKyAqICAgUkRSRUcgIDB4ZTJjMCAgIGhvc3QgICAtXFx1MDAzZSByZWdpc3Rlci1yZWFkIGNvbW1hbmQgKHwgaW5kZXgpLCBzZWUgYmVsb3dcXG4rICpcXG4rICogQ29uc29sZSBmbGFzaCBwYXRoIChTVEFUPTB4YzU1YykgLSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZSgpOlxcbisgKlxcbisgKiAgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlclxcbisgKiAgIC0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLVxcbisgKiAgIHJlc2V0IChDVFJMPUFERFI9REFUQT0wKVxcbisgKiAgIHJlYWQgU1RBVCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDB4YzU1YyAgIChSRUFEWSwgaWRsZSlcXG4rICogICBTVEFUIDo9IFNUQVJUKDB4ZjQ4ZikgIC0tLS0tLS0tLS0tLS0tXFx1MDAzZVxcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzYy0tLS0tLS0tLS0tLS0tIFNUQVQgPSAweGY0OTAgKEFDSylcXG4rICogICBDVFJMIDo9IFdSXFxuKyAqICAgREFUQSA6PSBoZHJbMC4uOV0gICgyMC1ieXRlIGhlYWRlcjogdHlwZSxzaXplMSxjcmMxLHNpemUyLGNyYzIpXFxuKyAqICAgcmVzZXQ7IFNUQVQgOj0gMjAgKGhlYWRlciBsZW4pICAtLS0tLVxcdTAwM2UgcGFyc2UgaGRyOyByX3JlbWFpbj1zaXplMStzaXplMjtcXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkFTRSB0YXJnZXQgcmVnaW9uKHMpXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcXHUwMDNjLS0tLS0tLS0tLS0tLS0gU1RBVD0yMSAobGVuKzEpLCB0aGVuIFNUQVQ9MFxcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpXFxuKyAqICAgLS0gcGF5bG9hZCwgc3RyZWFtZWQgaW4gc2xpY2VzOiAtLVxcbisgKiAgIENUUkwgOj0gV1JcXG4rICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLlxcbisgKiAgICAgYXQgd29yZCAxNjM4NDogcmVzZXQ7IEFERFI6PTB4NzgwMDsgQ1RSTDo9V1IgICAoaGFsZi1iYW5rIC1cXHUwMDNlIFNCMSlcXG4rICogICAgIGF0IHdvcmQgMzI3NjA6IGZsdXNoIHNsaWNlOlxcbisgKiAgICAgICAgcmVzZXQ7IFNUQVQgOj0gXFx1MDAzY2J5dGVzX3RoaXNfc2xpY2VcXHUwMDNlIC0tLVxcdTAwM2Ugcl9yZW1haW4gLT0gYnl0ZXM7IHByb2dyYW1cXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2MtLS0tLS0tLS0tLS0tLS0tLS0tIFNUQVQ9MCAgKHJlYWR5IGZvciBuZXh0IHNsaWNlKVxcbisgKiAgIC4uLiByZXBlYXQgdW50aWwgdGhlIHdob2xlIHBheWxvYWQgaXMgc2VudCAuLi5cXG4rICogICBTVEFUIDo9IEVORCgweDNjYzMpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHUwMDNlIGZpbmFsaXNlXFxuKyAqXFxuKyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKTpcXG4rICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyXFxuKyAqICAgZG9lcyByX3JlbWFpbiAtPSBjb3VudCBhbmQgc3RheXMgaW4gdGhlIHJlY2VpdmUgbG9vcCB3aGlsZSByX3JlbWFpbiAhPSAwLlxcbisgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0c1xcbisgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHNcXG4rICogICBFWEFDVExZIDAuIEEgY291bnQgbGFyZ2VyIHRoYW4gcl9yZW1haW4gdW5kZXJmbG93cyB0aGUgMzItYml0IGNvdW50ZXIgYW5kXFxuKyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6XFxuKyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nO1xcbisgKiAgICAgLSBpbnRlcnJ1cHRlZC1kb3dubG9hZCByZWNvdmVyeSBmZWVkcyAxIGJ5dGUgYXQgYSB0aW1lIChzZWUgYmVsb3cpLlxcbisgKlxcbisgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKTpcXG4rICogICBBIGhvc3QgdGhhdCBkaWVzIG1pZC1wYXlsb2FkIGxlYXZlcyB0aGUgbG9hZGVyIHNwaW5uaW5nIGluIHRoZSBzbGljZSBsb29wXFxuKyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCArXFxuKyAqICAgU1RBVD0xKSB1bnRpbCByX3JlbWFpbiByZWFjaGVzIDAsIHRoZW4gU1RBVD1FTkQ7IHRoZSBsb2FkZXIgZmluYWxpc2VzIHRoZVxcbisgKiAgIChub3cgY29ycnVwdCkgaW1hZ2UgYW5kIHJlLWFybXMgUkVBRFkgZm9yIGEgY2xlYW4gcmVmbGFzaC5cXG4rICpcXG4rICogUmVnaXN0ZXItcmVhZCBjaGFsbGVuZ2UgKG5vbi1kZXN0cnVjdGl2ZSBsaXZlbmVzcyBwcm9vZik6XFxuKyAqICAgREFUQSA6PSAweDdjMjMgKG1hcmtlcik7IFNUQVQgOj0gMHhlMmMwfGlkeFxcbisgKiAgICAgLVxcdTAwM2UgbG9hZGVyIHJldHVybnMgYSBydW50aW1lIHdvcmQgaW4gREFUQSBhbmQgcmUtYXJtcyBTVEFUPTB4YzU1Yy5cXG4rICogICBUaGUgcmVwbHkgc291cmNlIGlzIGxvYWRlciBCU1MsIG5vdCBhIGNoaXAgaWQ7IHVzZWQgb25seSB0byBwcm92ZSBhIGxpdmVcXG4rICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLlxcbisgKlxcbisgKiBUaGUgb3RoZXIgU1RBVCByZWFkeSBtYWdpYywgMHhjMzNjLCBtYXJrcyB0aGUgbG9hZGVyJ3MgZmxhc2hsZXNzXFxuKyAqIGNoaXAtdG8tY2hpcCBkb3dubG9hZCBtb2RlIChNeEw4NjI4MVMgMTYtcG9ydCB0aWVyKTsgdGhpcyBkcml2ZXIgZG9lcyBub3RcXG4rICogdXNlIGl0LlxcbisgKlxcbisgKiBSZXNjdWUgbGlmZWN5Y2xlIChkZXZsaW5rKTogcHJvYmUgcnVucyBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKTsgYSB3ZWRnZWRcXG4rICogbG9hZGVyIGlzIGRyYWluZWQgYmFjayB0byBSRUFEWSBieSBhIGJhY2tncm91bmQgc2VsZi1oZWFsIChyZXNjdWVfaGVhbF93b3JrKSBzb1xcbisgKiB0aGUgbXVsdGktbWludXRlIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suIGRldmxpbmsgZGV2IGluZm9cXG4rICogZXhwb3NlcyB0aGUgZncgdmVyc2lvbiAodGhlIFxcXCJmbGFzaGFibGVcXFwiIHNpZ25hbCkgb25seSBvbmNlIGF0IFJFQURZO1xcbisgKiBmbGFzaF91cGRhdGUgcmV0dXJucyAtRUJVU1kgdW50aWwgdGhlbiwgYW5kIHJlcHJvYmVzIHRvIFdTUCBmaXJtd2FyZSBvbiBzdWNjZXNzLlxcbisgKlxcbisgKiBOb3RlczpcXG4rICogICAtIENoaXAgaWQvcmV2aXNpb24gKDB4YzBkMjg4ODQvODgpIGFyZSBOT1QgcmVhY2hhYmxlIG9uIHRoaXMgY2hhbm5lbDsgdGhleVxcbisgKiAgICAgbmVlZCB0aGUgY2xhdXNlLTQ1IE1NRCBmaXJtd2FyZSBtYWlsYm94LCB3aGljaCBpcyBkZWFkIHVuZGVyIE1DVWJvb3QuXFxuKyAqICAgICBSZXNjdWUgaWRlbnRpdHkgaXMgYnkgU0IgUERJIGJlaGF2aW91ciBvbmx5IChteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QpLlxcbisgKiAgIC0gVGhlIFNNRElPIFBIWSBhZGRyZXNzIGFuZCB0aGUgMHhlMXh4IG9mZnNldHMgYXJlIE9UUC1jb25maWd1cmFibGU7IGRlcml2ZVxcbisgKiAgICAgdGhlbSBmcm9tIHRoZSBEVCBiaW5kaW5nLCBkbyBub3QgYXNzdW1lIGZpeGVkIHZhbHVlcy5cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JjMzIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva3RocmVhZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L292ZXJmbG93LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3N3aXRjaGRldi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1hcGkuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4rXFxuKy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXFx0XFx0MHhlMTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0FERFJcXHRcXHQweGUxMDFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfREFUQVxcdFxcdDB4ZTEwMlxcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXFx0XFx0MHhlMTAzXFxuK1xcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVFxcdDB4MDBcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlxcdFxcdDB4MDJcXG4rXFxuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKHB1Ymxpc2hlZC9jb25zdW1lZCB2aWEgU1RBVCkgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFlcXHRcXHQweGM1NWNcXHQvKiBsb2FkZXIgaWRsZSwgY29uc29sZSBsb29wICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RMX1JFQURZXFx0MHhjMzNjXFx0LyogbG9hZGVyIGlkbGUsIGZsYXNobGVzcyBsb29wICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUXFx0XFx0MHhmNDhmXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0VORFxcdFxcdDB4M2NjM1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR1xcdFxcdDB4ZTJjMFxcdC8qIHJlZ2lzdGVyLXJlYWQgY21kICh8IGluZGV4KSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLXFx0MHg3YzIzXFx0LyogbWFya2VyIHBsYWNlZCBpbiBEQVRBIGZvciBSRFJFRyAqL1xcbitcXG4rLyogQmVoYXZpb3VyYWwgcHJlc2VuY2UgcHJvYmU6IHR3byBkaXN0aW5jdCAxNi1iaXQgbGF0Y2hlcyBvbiBBRERSL0RBVEEuICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0FcXHRcXHQweDVhNWFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRFxcdFxcdDB4YTVhNVxcbitcXG4rLyogRmlybXdhcmUgdHJhbnNmZXIgZ2VvbWV0cnkgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19IRFJfU0laRVxcdFxcdDIwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19IQUxGXFx0XFx0MTYzODRcXHQvKiB3b3JkcyBwZXIgaGFsZi1iYW5rICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRVxcdFxcdDMyNzYwXFx0Lyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlxcdFxcdDB4NzgwMFxcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cXG4rXFxuKy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1xcdDMwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXFx0MzAwMDAwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1xcdDEyMDAwMFxcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TXFx0NTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMFxcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0XFx0ICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGV4cGVjdGVkLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcXG4re1xcbitcXHRpbnQgcmV0LCB2YWw7XFxuK1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsXFxuK1xcdFxcdFxcdFxcdHZhbCBcXHUwMDNjIDAgfHwgKHUxNil2YWwgPT0gZXhwZWN0ZWQsXFxuK1xcdFxcdFxcdFxcdDEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiB2YWw7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTMyIGRhdGFfd3JpdHRlbilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBkb25lLCB1MzIgdG90YWwpXFxuK3tcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XFxuK31cXG4rXFxuKy8qIFBvc3QtZmxhc2ggcmVwcm9iZS4gZGV2aWNlX3JlcHJvYmUoKSAtXFx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIHJ1bnNcXG4rICogZGV0YWNoZWQgZnJvbSBwcml2LCBvbiBvbmx5IHRoZSBoZWxkIGRldmljZSByZWZlcmVuY2UuIEl0IHJ1bnMgYXMgYSBrdGhyZWFkXFxuKyAqIHNvIHRoZSBtb2R1bGUgcmVmZXJlbmNlIGNhbiBiZSBkcm9wcGVkIHdpdGggbW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KCksXFxuKyAqIGZyb20gY29yZS1rZXJuZWwgY29kZSAtLSBhIHdvcmsgaXRlbSdzIHRyYWlsaW5nIG1vZHVsZV9wdXQoKSBjb3VsZCByZXR1cm5cXG4rICogaW50byBtb2R1bGUgdGV4dCBhIHJhY2luZyBybW1vZCBoYXMgYWxyZWFkeSBmcmVlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4odm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xcbitcXG4rXFx0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVMpO1xcbitcXHRpZiAoZGV2aWNlX3JlcHJvYmUoZGV2KSlcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJyZXByb2JlIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdHB1dF9kZXZpY2UoZGV2KTtcXG4rXFx0bW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KDApO1xcbit9XFxuK1xcbitzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmIHtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rfTtcXG4rXFxuKy8qIFNwYXduIHRoZSByZXByb2JlIGt0aHJlYWQgZnJvbSB3b3JrcXVldWUgY29udGV4dCwgd2hlcmUga3RocmVhZF9jcmVhdGUoKVxcbisgKiBjYW5ub3QgcmV0dXJuIC1FSU5UUiBhcyBpdCBjYW4gZnJvbSB0aGUgZGV2bGluayBjYWxsZXIncyBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbyA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmLCB3b3JrKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0ga28tXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbitcXG4rXFx0a2ZyZWUoa28pO1xcbitcXHR0YXNrID0ga3RocmVhZF9ydW4obXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4sIGRldiwgXFxcIm14bDg2Mnh4LXJlcHJvYmVcXFwiKTtcXG4rXFx0aWYgKElTX0VSUih0YXNrKSkge1xcbitcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFxcInJlcHJvYmUga3RocmVhZCBmYWlsZWQgKCVwZSk7IHJlbG9hZCB0aGUgZHJpdmVyIHRvIHJlc3RvcmUgb3BlcmF0aW9uXFxcXG5cXFwiLFxcbitcXHRcXHRcXHR0YXNrKTtcXG4rXFx0XFx0cHV0X2RldmljZShkZXYpO1xcbitcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuXFxuKyAqIGFsbG9jYXRpb24gZmFpbHVyZSBhYm9ydHMgY2xlYW5seS4gVGhlIGNhbGxlciBob2xkcyBhIG1vZHVsZSBhbmQgYSBkZXZpY2VcXG4rICogcmVmZXJlbmNlOyBvbmNlIHRoZSBraWNrb2ZmIGlzIHNjaGVkdWxlZCB0aGUgcmVwcm9iZSBrdGhyZWFkIHJlbGVhc2VzIGJvdGguXFxuKyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLlxcbisgKi9cXG4rc3RhdGljIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKm14bDg2Mnh4X3JlcHJvYmVfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKmtvO1xcbitcXG4rXFx0a28gPSBremFsbG9jX29iaigqa28pO1xcbitcXHRpZiAoIWtvKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0a28tXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZrby1cXHUwMDNld29yaywgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmX2ZuKTtcXG4rXFx0cmV0dXJuIGtvO1xcbit9XFxuK1xcbisvKiBCeXRlLWNvdW50IG9mIGVhY2ggY2h1bmsgZmVkIHRvIHRoZSBsb2FkZXIgZHVyaW5nIGRyYWluLiBJdCBNVVNUIGJlIDE6IHRoZVxcbisgKiBsb2FkZXIgb25seSBsZXRzIHVzIG9ic2VydmUgXFxcImNvdW50ZXIgPT0gMFxcXCIsIG5ldmVyIFxcXCJjb3VudGVyIFxcdTAwM2Mgc3RlcFxcXCIsIHNvIGFueVxcbisgKiBzdGVwIFxcdTAwM2UgMSBjYW4gc3VidHJhY3QgcGFzdCB6ZXJvLCB1bmRlcmZsb3cgdGhlIDMyLWJpdCBjb3VudGVyIGFuZCB3ZWRnZSB0aGVcXG4rICogbG9hZGVyIGZvciB+Ml4zMiBtb3JlIGJ5dGVzIChhIHN0YXRlIG9ubHkgYSBwb3dlciBjeWNsZSBjbGVhcnMpLiBTdGVwcGluZyBieVxcbisgKiAxIHdhbGtzIHRoZSBjb3VudGVyIHRocm91Z2ggZXZlcnkgdmFsdWUgYW5kIGlzIGd1YXJhbnRlZWQgdG8gbGFuZCBvbiB6ZXJvXFxuKyAqIHdoYXRldmVyIGl0cyAocG9zc2libHkgb2RkKSBzdGFydC4gQSAxLWJ5dGUgY2h1bmsgaXMgYSBwYXRoIHRoZSBsb2FkZXJcXG4rICogYWxyZWFkeSBoYW5kbGVzOiB0aGUgbm9ybWFsIHRyYW5zZmVyIGVuZHMgd2l0aCBhIHNpbmdsZSB0cmFpbGluZyBieXRlIGZvclxcbisgKiBvZGQtc2l6ZWQgaW1hZ2VzIChzZWUgU3RlcCA2KS5cXG4rICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVNcXHQxXFxuK1xcbisvKiBQb2xsIFNUQVQgd2hpbGUgZHJhaW5pbmcgYSBzdHVjayBkb3dubG9hZDogMCBtZWFucyBcXFwiZmVlZCB0aGUgbmV4dCBjaHVua1xcXCIsXFxuKyAqIFJFQURZIG1lYW5zIHRoZSBsb2FkZXIgbGVmdCB0aGUgcmVjZWl2ZSBsb29wIGFuZCByZS1hcm1lZCBpdHMgY29tbWFuZCBsb29wLFxcbisgKiBhbnl0aGluZyBlbHNlIGlzIGEgdHJhbnNpZW50ICh0aGUgY291bnQgYmVpbmcgY29uc3VtZWQpIC0gQlVTWSBwYXN0IHRoZVxcbisgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuXFxuKyAqL1xcbitlbnVtIHsgTVhMODYyWFhfRFJBSU5fRkVFRCwgTVhMODYyWFhfRFJBSU5fUkVBRFksIE1YTDg2MlhYX0RSQUlOX0JVU1kgfTtcXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxcbit7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyZWFkX3BvbGxfdGltZW91dChteGw4NjJ4eF9zbWRpb19yZWFkLCB2YWwsXFxuK1xcdFxcdFxcdCAgdmFsIFxcdTAwM2MgMCB8fCAodTE2KXZhbCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkgfHxcXG4rXFx0XFx0XFx0ICAodTE2KXZhbCA9PSAwLFxcbitcXHRcXHRcXHQgIDUwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXFxuK1xcdFxcdFxcdCAgcHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHZhbDtcXG4rXFx0aWYgKCh1MTYpdmFsID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSlcXG4rXFx0XFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX1JFQURZO1xcbitcXHRpZiAoKHUxNil2YWwgPT0gMClcXG4rXFx0XFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX0ZFRUQ7XFxuK1xcdHJldHVybiBNWEw4NjJYWF9EUkFJTl9CVVNZO1xcbit9XFxuK1xcbisvKiBSZWNvdmVyIGEgc3dpdGNoIHdob3NlIFNCIFBESSBkb3dubG9hZCB3YXMgaW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIC0gdGhlXFxuKyAqIGhvc3QgZGllZCBhZnRlciBNQ1Vib290IGJlZ2FuIGVyYXNpbmcgZmxhc2gsIHdoZXRoZXIgaXQgYWJvcnRlZCBtaWQgZXJhc2Ugb3JcXG4rICogbWlkIGltYWdlLXdyaXRlLCBib3RoIGVuZCB1cCBpbiB0aGUgc2FtZSBwbGFjZTogdGhlIHBheWxvYWQgcmVjZWl2ZSBsb29wLlxcbisgKiBUaGVyZSB0aGUgbG9hZGVyIHB1Ymxpc2hlcyBTVEFUPTAsIHdhaXRzIGZvciB0aGUgaG9zdCB0byB3cml0ZSBhIGJ5dGUtY291bnRcXG4rICogdG8gU1RBVCwgRE1BcyB0aGF0IG1hbnkgYnl0ZXMgYW5kIHN1YnRyYWN0cyB0aGUgY291bnQgZnJvbSBhIHJlbWFpbmluZy1ieXRlc1xcbisgKiBjb3VudGVyLCBsZWF2aW5nIHRoZSBsb29wIG9ubHkgd2hlbiB0aGUgY291bnRlciByZWFjaGVzIGV4YWN0bHkgemVyby4gVGhlXFxuKyAqIGltYWdlIHNpemUgZGllZCB3aXRoIHRoZSBob3N0LCBzbyB3ZSBmZWVkIHNpbmdsZS1ieXRlIGNodW5rcyAoc2VlXFxuKyAqIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKSB0byB3YWxrIHRoZSBjb3VudGVyIHRvIHplcm8gd2l0aG91dCB1bmRlcmZsb3csXFxuKyAqIHRoZW4gc2VuZCBFTkQuIFRoZSBsb2FkZXIgdmFsaWRhdGVzIHRoZSAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zXFxuKyAqIFJFQURZLCBvciBib290cyBhIHZhbGlkIGltYWdlIHRoYXQgaGFwcGVuZWQgdG8gc3Vydml2ZSBpbiBmbGFzaC4gVGhpcyBvbmx5XFxuKyAqIGZpbmFsaXNlcyB0aGUgdHJhbnNmZXI7IHRoZSBjYWxsZXIncyByZXByb2JlIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlXFxuKyAqIHJlc3VsdHMuIFJldHVybnMgMCBvbmNlIGZpbmFsaXNlZCwgXFx1MDAzYzAgb24gZXJyb3IuIERvZXMgTk9UIHJlY292ZXIgYSBjb3VudGVyXFxuKyAqIGFscmVhZHkgdW5kZXJmbG93ZWQgYnkgYW4gZWFybGllciBvdmVyc2l6ZWQtY2h1bmsgYXR0ZW1wdCAtIHRoYXQgbmVlZHMgYVxcbisgKiBwb3dlciBjeWNsZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfcmVzY3VlX2RyYWluKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXY7XFxuK1xcdC8qIEJvdW5kOiB0d2ljZSB0aGUgbG9hZGVyJ3MgMTYgTWlCIGltYWdlIGNhcCwgb25lIGJ5dGUgcGVyIGNodW5rLiAqL1xcbitcXHR1MzIgbWF4X2NodW5rcyA9IDJ1ICogKDE2dSBcXHUwMDNjXFx1MDAzYyAyMCkgLyBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUztcXG4rXFx0dTMyIGNodW5rID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldl93YXJuKGRldiwgXFxcImZsYXNoOiBkcmFpbmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZFxcXFxuXFxcIik7XFxuK1xcbitcXHR3aGlsZSAoY2h1bmsgXFx1MDAzYyBtYXhfY2h1bmtzKSB7XFxuK1xcdFxcdC8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovXFxuK1xcdFxcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XFxuK1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihwcml2LCAyMDAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fUkVBRFkpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX0JVU1kpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogRmVlZCBvbmUgemVybyBieXRlOyByZXNldCBjbGVhcmVkIHRoZSB3cml0ZSBsYXRjaC4gKi9cXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGNodW5rKys7XFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY2h1bmsgXFx1MDAzZT0gbWF4X2NodW5rcykge1xcbitcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFxcImZsYXNoOiBpbnRlcnJ1cHRlZCBkb3dubG9hZCBkaWQgbm90IGRyYWluIGFmdGVyICV1IGNodW5rc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0Y2h1bmspO1xcbitcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIExldCB0aGUgbG9hZGVyIHZhbGlkYXRlIGFuZCByZS1hcm0gUkVBRFksIG9yIGJvb3QgYSBzdXJ2aXZpbmcgaW1hZ2U7XFxuK1xcdCAqIHRoZSBjYWxsZXIncyByZXByb2JlIHRoZW4gY2xhc3NpZmllcyB3aGljaGV2ZXIgc3RhdGUgcmVzdWx0cy5cXG4rXFx0ICovXFxuK1xcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogQmFja2dyb3VuZCBzZWxmLWhlYWw6IGRyYWluIGEgd2VkZ2VkIGRvd25sb2FkIG9mZiB0aGUgZGV2bGluayBmbGFzaCBwYXRoLCBzb1xcbisgKiB0aGUgbWludXRlcy1sb25nIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suIFNjaGVkdWxlZCBmcm9tIHByb2JlO1xcbisgKiByZXByb2JlcyBvbiBzdWNjZXNzIHNvIHRoZSBwcm9iZS10aW1lIGRldGVjdGlvbiByZS1jbGFzc2lmaWVzIHRoZSBzd2l0Y2guXFxuKyAqL1xcbit2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9wcml2LCByZXNjdWVfaGVhbF93b3JrKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkZXZfaW5mbyhkZXYsIFxcXCJyZWNvdmVyaW5nIGludGVycnVwdGVkIGRvd25sb2FkIGluIGJhY2tncm91bmRcXFxcblxcXCIpO1xcbitcXHRyZXQgPSBteGw4NjJ4eF9yZXNjdWVfZHJhaW4ocHJpdik7XFxuK1xcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBUaGUgaW50ZXJydXB0ZWQgdHJhbnNmZXIgaXMgZmluYWxpc2VkOyByZXByb2JlIHNvIHRoZSBwcm9iZS10aW1lXFxuK1xcdCAqIGRldGVjdGlvbiBicmluZ3MgdGhlIGRyaXZlciB1cCAtLSBmbGFzaGFibGUgaW4gcmVzY3VlIG1vZGUgaWYgdGhlXFxuK1xcdCAqIGxvYWRlciBpcyBhdCBSRUFEWSwgb3Igbm9ybWFsbHkgaWYgYSB2YWxpZCBpbWFnZSBib290ZWQuIFRoZSByZWZzXFxuK1xcdCAqIGFyZSByZWxlYXNlZCBieSB0aGUgcmVwcm9iZSBvbmNlIGl0IGNvbXBsZXRlcy5cXG4rXFx0ICovXFxuK1xcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGdldF9kZXZpY2UoZGV2KTtcXG4rXFx0a28gPSBteGw4NjJ4eF9yZXByb2JlX2FsbG9jKGRldik7XFxuK1xcdGlmICgha28pIHtcXG4rXFx0XFx0cHV0X2RldmljZShkZXYpO1xcbitcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmtvLVxcdTAwM2V3b3JrKTtcXG4rfVxcbitcXG4rLyogRGV0ZWN0IE1DVWJvb3QgcmVzY3VlIG1vZGUgb3ZlciBjbGF1c2UtMjIgU01ESU8gYWxvbmUsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1bGVcXG4rICogdGhlIGxvYWRlciBvdXQgYmVmb3JlIGFueSBDNDUgQVBJIHJlcXVlc3QgKHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBubyBXU1BcXG4rICogZmlybXdhcmUgYW5zd2VycykuIEEgc2NyYXRjaCB3cml0ZSB0byBBRERSL0RBVEEgbXVzdCBsYXRjaCBvciB0aGUgY2hpcCBpc1xcbisgKiBhYnNlbnQgKC1FTk9ERVYpOyBTVEFUIHRoZW4gY2xhc3NpZmllcyB0aGUgc3RhdGUsIHBva2VkIGRlc3RydWN0aXZlbHkgb25seVxcbisgKiB3aGVuIDAsIHRoZSBvbmUgdmFsdWUgYSBydW5uaW5nIGZpcm13YXJlIG5ldmVyIGhvbGRzOlxcbisgKlxcbisgKiAgLSAweGMzM2M6IGZsYXNobGVzcyBsb29wLCByZWFkeS5cXG4rICogIC0gMHhjNTVjOiBjb25zb2xlIGxvb3AsIGlmIHRoZSByZWdpc3Rlci1yZWFkIGNoYWxsZW5nZSBpcyBzZXJ2aWNlZC5cXG4rICogIC0gb3RoZXIgbm9uLXplcm86IHJ1bm5pbmcgZmlybXdhcmUsIGxlZnQgdW5wb2tlZC5cXG4rICogIC0gMDogd2VkZ2VkIHJlY2VpdmUgbG9vcCwgaWYgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBkcmFpbnMgYmFjayB0byAwLlxcbisgKlxcbisgKiBSZXR1cm46IE1YTDg2MlhYX0lOX1JFU0NVRSwgTVhMODYyWFhfTk9UX1JFU0NVRSwgb3IgbmVnYXRpdmUgKC1FTk9ERVYvU01ESU8pLlxcbisgKi9cXG4raW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgc3RhdCwgZGF0LCByZXQsIHJiLCBhLCBkO1xcbitcXG4rXFx0LyogcmVzY3VlX3JlYWR5IGdhdGVzIGZsYXNoaW5nOyBhIHdlZGdlZCBsb2FkZXIgbmVlZHMgdGhlIGRyYWluIGZpcnN0LiAqL1xcbitcXHRwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIFByZXNlbmNlOiBhIGxpdmUgY2hpcCBsYXRjaGVzIHRoZSBzY3JhdGNoIHdyaXRlLCBhbiBhYnNlbnQgb25lIGZsb2F0cy4gKi9cXG4rXFx0YSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbitcXHRcXHRcXHRcXHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0EpO1xcbitcXHRpZiAoYSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBhO1xcbitcXHRkID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXFxuK1xcdFxcdFxcdFxcdCBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCk7XFxuK1xcdGlmIChkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGQ7XFxuK1xcdGEgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSKTtcXG4rXFx0aWYgKGEgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gYTtcXG4rXFx0ZCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xcbitcXHRpZiAoZCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBkO1xcbitcXHRpZiAoKHUxNilhICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BIHx8XFxuK1xcdCAgICAodTE2KWQgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0QpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHN0YXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTtcXG4rXFx0aWYgKHN0YXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gc3RhdDtcXG4rXFxuK1xcdC8qIEZsYXNobGVzcy1kb3dubG9hZCBsb29wIChNeEw4NjI4MVMgdGllcik6IHRoaXMgZHJpdmVyIGRvZXMgbm90XFxuK1xcdCAqIHN1cHBvcnQgaXQgLS0gdGhlIGNvbnNvbGUgZmxhc2ggcGF0aCBleHBlY3RzIFJFQURZLiBUcmVhdCBpdCBhcyBhblxcbitcXHQgKiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLCBsaWtlIGFueSBvdGhlciB1bnN1cHBvcnRlZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX0RMX1JFQURZKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdC8qIENvbnNvbGUgbG9vcCBhdCBSRUFEWTogY29uZmlybSB0aGUgbGl2ZSBtYWlsYm94IHdpdGggdGhlIHJlZ2lzdGVyLXJlYWRcXG4rXFx0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXFxuK1xcdCAqL1xcbitcXHRpZiAoKHUxNilzdGF0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSkge1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9SRFJFRyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xcbitcXHRcXHRkYXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBKTtcXG4rXFx0XFx0aWYgKGRhdCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiBkYXQ7XFxuK1xcdFxcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4rXFx0XFx0aWYgKCFyYiBcXHUwMDI2XFx1MDAyNiAodTE2KWRhdCAhPSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSykge1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkgPSB0cnVlO1xcbitcXHRcXHRcXHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBbnkgb3RoZXIgbm9uLXplcm8gdmFsdWUgaXMgYSBydW5uaW5nIGZpcm13YXJlLCBub3QgYSBsb2FkZXIuICovXFxuK1xcdGlmIChzdGF0KVxcbitcXHRcXHRyZXR1cm4gTVhMODYyWFhfTk9UX1JFU0NVRTtcXG4rXFxuK1xcdC8qIFNUQVQgPT0gMDogYSB3ZWRnZWQgcmVjZWl2ZSBsb29wIGNvbnN1bWVzIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgYmFja1xcbitcXHQgKiB0byAwIChmZWVkIG9uZSBEQVRBIHdvcmQgZmlyc3QsIGxpa2UgYSBkcmFpbiBjaHVuaykuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIDB4MDAwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAoIXJiKVxcbitcXHRcXHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xcbitcXG4rXFx0cmV0dXJuIC1FTk9ERVY7XFxuK31cXG4rXFxuKy8qIE1DVWJvb3QgZmlybXdhcmUgaW1hZ2UgaGVhZGVyICovXFxuK3N0cnVjdCBteGw4NjJ4eF9md19oZHIge1xcbitcXHRfX2xlMzIgaW1hZ2VfdHlwZTtcXG4rXFx0X19sZTMyIGltYWdlX3NpemVfMTtcXG4rXFx0X19sZTMyIGltYWdlX2NoZWNrc3VtXzE7XFxuK1xcdF9fbGUzMiBpbWFnZV9zaXplXzI7XFxuK1xcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xcbit9IF9fcGFja2VkO1xcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyICpwYXlsb2FkX3NpemUpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xcbitcXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcXG4rXFx0Y29uc3QgdTggKnBheWxvYWQ7XFxuK1xcdHUzMiBjcmM7XFxuK1xcbitcXHRpZiAoZnctXFx1MDAzZXNpemUgXFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVxcdTAwM2VkYXRhO1xcbitcXHRwYXlsb2FkID0gZnctXFx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcXG4rXFx0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX3NpemVfMSk7XFxuK1xcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9zaXplXzIpO1xcbitcXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhzaXplMSwgc2l6ZTIsIFxcdTAwMjZ0b3RhbCkgfHxcXG4rXFx0ICAgIHRvdGFsIFxcdTAwM2UgZnctXFx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0b3RhbCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNpemUxKSB7XFxuK1xcdFxcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcXG4rXFx0XFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoc2l6ZTIpIHtcXG4rXFx0XFx0Y3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCArIHNpemUxLCBzaXplMik7XFxuK1xcdFxcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzIpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0KnBheWxvYWRfc2l6ZSA9IHRvdGFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcXG4re1xcbitcXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVxcdTAwM2VkYXRhICsgTVhMODYyWFhfRldfSERSX1NJWkU7XFxuK1xcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbmV4dF9ub3RpZnkgPSBqaWZmaWVzIC0gMTtcXG4rXFx0dTE2IHdvcmQsIGZkYXRhO1xcbitcXHRpbnQgcmV0LCBpO1xcbitcXG4rXFx0LyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqL1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKSB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ZmFsc2UsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJmbGFzaDogRldfVVBEQVRFIGNvbW1hbmQgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogU3RlcCAyOiB3YWl0IGZvciBib290bG9hZGVyIHJlYWR5ICovXFxuK1xcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXFxcIldhaXRpbmcgZm9yIGJvb3Rsb2FkZXJcXFwiLCAwLCAwKTtcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcbitcXHQvKiBGYWlsdXJlcyBmcm9tIGhlcmUgb24gbXVzdCBnbyB0aHJvdWdoIGVuZF9tYWdpYyBzbyBNQ1Vib290XFxuK1xcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcXG4rXFx0XFx0XFx0XFx0XFx0TVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdGdvdG8gZW5kX21hZ2ljO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX1NUQVJUKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBUlQgKyAxLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxcXFxuXFxcIiwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNDogdHJhbnNmZXIgaW1hZ2UgaGVhZGVyICovXFxuK1xcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXFxcIkVyYXNpbmcgZmxhc2hcXFwiLCAwLCAwKTtcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSsrKSB7XFxuK1xcdFxcdHdvcmQgPSBmdy1cXHUwMDNlZGF0YVtpICogMl0gfFxcbitcXHRcXHQgICAgICAgKCh1MTYpZnctXFx1MDAzZWRhdGFbaSAqIDIgKyAxXSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0LyogdGhlIGJ5dGUgY291bnQgaW4gU1RBVCB0cmlnZ2VycyB0aGUgZXJhc2UgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0LyogQUNLIGlzIGJ5dGUgY291bnQgKyAxICovXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgKyAxLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdGdvdG8gZW5kX21hZ2ljO1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0TVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGVyYXNlIHRpbWVvdXQ6ICVwZVxcXFxuXFxcIiwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0Z290byBlbmRfbWFnaWM7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqL1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcbitcXHR3aGlsZSAoaWR4IFxcdTAwM2MgcGF5bG9hZF9zaXplKSB7XFxuK1xcdFxcdGlmIChpZHggKyAxIFxcdTAwM2MgcGF5bG9hZF9zaXplKSB7XFxuK1xcdFxcdFxcdGZkYXRhID0gcGF5bG9hZFtpZHhdIHxcXG4rXFx0XFx0XFx0XFx0KCh1MTYpcGF5bG9hZFtpZHggKyAxXSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0XFx0aWR4ICs9IDI7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbiArPSAyO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRmZGF0YSA9IHBheWxvYWRbaWR4XTtcXG4rXFx0XFx0XFx0aWR4Kys7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbisrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgZmRhdGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcdFxcdHdvcmRfaWR4Kys7XFxuK1xcbitcXHRcXHRpZiAoaWR4IFxcdTAwM2U9IHBheWxvYWRfc2l6ZSkge1xcbitcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEhhbGYtYmFuayBib3VuZGFyeTogc3dpdGNoIHRvIFNCMSBhZGRyZXNzICovXFxuK1xcdFxcdGlmICh3b3JkX2lkeCA9PSBNWEw4NjJYWF9GV19CQU5LX0hBTEYpIHtcXG4rXFx0XFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9GV19TQjFfQUREUik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFx0XFx0fSBlbHNlIGlmICh3b3JkX2lkeCBcXHUwMDNlPSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFKSB7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcImZsYXNoOiB3cml0ZSB0aW1lb3V0IGF0ICV1LyV1OiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHR3b3JkX2lkeCA9IDA7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbiA9IDA7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkge1xcbitcXHRcXHRcXHRcXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFxcXCJGbGFzaGluZ1xcXCIsIGlkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGF5bG9hZF9zaXplKTtcXG4rXFx0XFx0XFx0XFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiRmxhc2hpbmdcXFwiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XFxuK1xcdGdvdG8gZW5kX21hZ2ljO1xcbitcXG4rd3JpdGVfZXJyOlxcbitcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCJmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdEVSUl9QVFIocmV0KSk7XFxuK2VuZF9tYWdpYzpcXG4rXFx0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcXG4rXFx0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRjaGFyIGJ1ZlsxNl07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBObyBjaGlwLWlkL3JldmlzaW9uIGluIE1DVWJvb3QgKG5lZWRzIHRoZSBmaXJtd2FyZSBNTUQgbWFpbGJveCkuIFRoZVxcbitcXHQgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlIFxcXCJyZWFkeSB0byBmbGFzaFxcXCIgc2lnbmFsOiByZXBvcnQgaXQgb25seVxcbitcXHQgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldS4ldS4ldVxcXCIsXFxuK1xcdFxcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxcbitcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XFxuK1xcdFxcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXFxcImZ3XFxcIiwgYnVmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcXFwiZndcXFwiLCBidWYpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBBIDAgcGFydCBudW1iZXIgbWVhbnMgdGhlIENISVAgSUQgcmVhZCBmYWlsZWQgb3IgdGhlIHBhcnQgaXNcXG4rXFx0ICogdW5mdXNlZDsgb21pdCBpdCByYXRoZXIgdGhhbiBwdWJsaXNoIGEgYm9ndXMgXFxcIjAwMDBcXFwiIHRoYXQgZnd1cGRcXG4rXFx0ICogd291bGQgbWF0Y2ggZmlybXdhcmUgYWdhaW5zdCAtLSBpdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIGRyaXZlclxcbitcXHQgKiBuYW1lLlxcbitcXHQgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZWFzaWNfaWQpIHtcXG4rXFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiUwNFhcXFwiLCBwcml2LVxcdTAwM2Vhc2ljX2lkKTtcXG4rXFx0XFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgYnVmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldVxcXCIsIHByaXYtXFx1MDAzZWFzaWNfcmV2KTtcXG4rXFx0XFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfUkVWLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGJ1Zik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldS4ldS4ldVxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XFxuK1xcbitcXHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFxcXCJmd1xcXCIsIGJ1Zik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi9cXG4rXFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcXFwiZndcXFwiLCBidWYpO1xcbit9XFxuK1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZiAqa287XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBwYXlsb2FkX3NpemU7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVxcdTAwM2VmdywgXFx1MDAyNnBheWxvYWRfc2l6ZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImZpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJlZnVzZSB0byBmbGFzaCB3aGlsZSB0aGUgYmFja2dyb3VuZCBzZWxmLWhlYWwgaXMgc3RpbGwgZHJhaW5pbmcuICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSBcXHUwMDI2XFx1MDAyNiAhUkVBRF9PTkNFKHByaXYtXFx1MDAzZXJlc2N1ZV9yZWFkeSkpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcInN3aXRjaCBpcyByZWNvdmVyaW5nIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZXRyeSBzaG9ydGx5XFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSByZWZlcmVuY2VzIHRoZSByZXByb2JlIHdvcmsgbmVlZHMgdG8gcmVzdG9yZSBub3JtYWwgb3BlcmF0aW9uXFxuK1xcdCAqIG11c3QgYmUgaGVsZCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQ7IHRoZSB3b3JrIGl0c2VsZiBpc1xcbitcXHQgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0Z2V0X2RldmljZShkcy1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdC8qIEFsbG9jYXRlIHRoZSByZXByb2JlIGtpY2tvZmYgYmVmb3JlIGRpc3R1cmJpbmcgdGhlIHN3aXRjaCwgc28gYW5cXG4rXFx0ICogLUVOT01FTSBoZXJlIGNhbm5vdCBzdHJhbmQgaXQgZmxhc2hlZCBidXQgbmV2ZXIgcmVwcm9iZWQuXFxuK1xcdCAqL1xcbitcXHRrbyA9IG14bDg2Mnh4X3JlcHJvYmVfYWxsb2MoZHMtXFx1MDAzZWRldik7XFxuK1xcdGlmICgha28pIHtcXG4rXFx0XFx0cHV0X2RldmljZShkcy1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdGRldl9pbmZvKGRzLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiZmxhc2g6IGZsYXNoaW5nIHN3aXRjaCB2aWEgTUNVYm9vdCByZXNjdWUgbW9kZVxcXFxuXFxcIik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZGV2X2luZm8oZHMtXFx1MDAzZWRldiwgXFxcImZsYXNoOiBydW5uaW5nIGZpcm13YXJlICV1LiV1LiV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5taW5vcixcXG4rXFx0XFx0XFx0IHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xcbitcXG4rXFx0LyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0FcXG4rXFx0ICogY29yZSdzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzXFxuK1xcdCAqIHNvIHVzZXJzcGFjZSBjYW5ub3QgcmVvcGVuIHRoZW0gZHVyaW5nIHRoZSBmbGFzaC4gVGhlXFxuK1xcdCAqIGNvbmR1aXQgYmVsb25ncyB0byB0aGUgTUFDIGRyaXZlciBhbmQgaXMgb25seSBjbG9zZWQuXFxuK1xcdCAqL1xcbitcXHRydG5sX2xvY2soKTtcXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XFxuK1xcdFxcdGlmIChkcC1cXHUwMDNldXNlcikge1xcbitcXHRcXHRcXHRkZXZfY2xvc2UoZHAtXFx1MDAzZXVzZXIpO1xcbitcXHRcXHRcXHRuZXRpZl9kZXZpY2VfZGV0YWNoKGRwLVxcdTAwM2V1c2VyKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoZHAsIGRzKVxcbitcXHRcXHRkZXZfY2xvc2UoZHAtXFx1MDAzZWNvbmR1aXQpO1xcbitcXHQvKiBUaGUgYnJpZGdlIGRlZmVycyB0aGUgU1RQIHN0YXRlIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IGNsb3NpbmdcXG4rXFx0ICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuXFxuK1xcdCAqL1xcbitcXHRzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2VzcygpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XFxuK1xcdHByaXYtXFx1MDAzZWJsb2NrX2hvc3QgPSB0cnVlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdHNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFxcdTAwMjZwcml2LVxcdTAwM2VmbGFncyk7XFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdHNfd29yayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yayk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkcy1cXHUwMDNlbnVtX3BvcnRzOyBpKyspXFxuK1xcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayk7XFxuK1xcbitcXHRyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtXFx1MDAzZWZ3LCBwYXlsb2FkX3NpemUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGRzLVxcdTAwM2VkZXZsaW5rKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImZpcm13YXJlIHRyYW5zZmVyIGZhaWxlZFxcXCIpO1xcbitcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrLFxcbitcXHRcXHRcXHRcXHQgIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlYmxvY2tfaG9zdCA9IGZhbHNlO1xcbitcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdFxcdC8qIFJlZnJlc2ggdGhlIGNhY2hlZCB2ZXJzaW9ucyBzbyB0aGUgZmxhc2ggdXBkYXRlIG9ubHlcXG4rXFx0XFx0ICogY29tcGxldGVzIG9uY2UgdGhlIG5ldyBmaXJtd2FyZSBpcyBjb25maXJtZWQgcnVubmluZyBhbmRcXG4rXFx0XFx0ICogZGV2bGluayBkZXYgaW5mbyByZXBvcnRzIGl0LiBNdXN0IGhhcHBlbiBiZWZvcmUgc2V0dGluZ1xcbitcXHRcXHQgKiBza2lwX3RlYXJkb3duLCB3aGljaCBkaXNjYXJkcyBhbGwgZmlybXdhcmUgQVBJIHJlYWRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJuZXcgZmlybXdhcmUgZGlkIG5vdCBiZWNvbWUgcmVhZHlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9ja19uZXN0ZWQoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XFxuK1xcdHByaXYtXFx1MDAzZXNraXBfdGVhcmRvd24gPSB0cnVlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFxuK1xcdC8qIEtpY2sgb2ZmIHRoZSByZXByb2JlIGxhc3Q7IHRoZSBraWNrb2ZmIHdhcyBhbGxvY2F0ZWQgdXAgZnJvbnQgYW5kXFxuK1xcdCAqIGl0cyBtb2R1bGUgYW5kIGRldmljZSByZWZlcmVuY2VzIGFyZSBhbHJlYWR5IGhlbGQuXFxuK1xcdCAqL1xcbitcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZrby1cXHUwMDNld29yayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxcbkBAIC0wLDAgKzEsMjAgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rXFxuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXFxuKyNkZWZpbmUgX19NWEw4NjJYWF9GV19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbitcXG4rc3RydWN0IG14bDg2Mnh4X3ByaXY7XFxuK3N0cnVjdCB3b3JrX3N0cnVjdDtcXG4rXFxuK2ludCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xcbit2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitcXG4rI2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuY1xcbmluZGV4IDRhY2QyMTZmN2NjMDA5Li4yZGJkMDc0YzBmZTI2YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuY1xcbkBAIC0xNSw2ICsxNSw4IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1jbWQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWZ3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC1ob3N0LmhcXFwiXFxuIFxcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXFx0XFx0XFx0QklUKDE1KVxcbkBAIC0zNDAsNiArMzQyLDIxIEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqX2RhdGEsXFxuIFxcbiBcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4gXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vza2lwX3RlYXJkb3duKSB7XFxuK1xcdFxcdHJldCA9IHJlYWQgPyAtRU5PREVWIDogMDtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWJsb2NrX2hvc3QgXFx1MDAyNlxcdTAwMjYgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkge1xcbitcXHRcXHRyZXQgPSAtRUJVU1k7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbiBcXHRtYXggPSAoc2l6ZSArIDEpIC8gMjtcXG4gXFxuIFxcdHJldCA9IG14bDg2Mnh4X2J1c3lfd2FpdChwcml2KTtcXG5AQCAtNDk1LDEyICs1MTIsNDkgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHXFx0XFx0MHgxZlxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1xcdDB4ZmZmMFxcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXFx0XFx0MHgwMDBmXFxuK1xcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXFxuK3tcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0aW50IHBoeSA9IHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXFxuK1xcdFxcdFxcdCAgICAgIGFkZHIgXFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuK1xcdFxcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgcGh5ID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgYWRkciBcXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fT0ZGX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIHZhbCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yaywgbXhsODYyeHhfY3JjX2Vycl93b3JrX2ZuKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VyZXNjdWVfaGVhbF93b3JrLCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKTtcXG4gfVxcbiBcXG4gdm9pZCBteGw4NjJ4eF9ob3N0X3NodXRkb3duKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZWNyY19lcnJfd29yayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oXFxuQEAgLTE4LDUgKzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSxcXG4gXFx0bXhsODYyeHhfYXBpX3dyYXAoZGV2LCBjbWQsIFxcdTAwMjYoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKVxcbiBcXG4gaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KTtcXG4raW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKTtcXG4raW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbCk7XFxuIFxcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmNcXG5pbmRleCBiNjg5NjUyYWE5YjkyMC4uYTViNjk0MGI1NTJlOWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmNcXG5AQCAtNDA2LDYgKzQwNiw4IEBAIG14bDg2Mnh4X3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuIFxcbiBcXHRzd2l0Y2ggKHBvcnQpIHtcXG4gXFx0Y2FzZSA5IC4uLiAxNjpcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xcbiBcXHRcXHRcXHRkZXZfd2Fybl9vbmNlKGRwLVxcdTAwM2Vkcy1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBcXFwiU2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXFxcXG5cXFwiKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xcbmluZGV4IDQ1ZDIzN2IzYTQwZjEwLi44ZDIxNzQ3Y2RmMTVlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJteGw4NjJ4eC1hcGkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LXBoeWxpbmsuaFxcXCJcXG4gXFxuQEAgLTcxLDYgKzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXhsODYyeHhfcm1vbl9yYW5nZXNbXSA9IHtcXG4gI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9USU1FT1VUX01TXFx0MTAwMDBcXG4gI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9QT0xMX01TXFx0XFx0MTAwXFxuIFxcbisvKiBDaGlwIElEIHJlZ2lzdGVycywgcmVhZCB2aWEgU1lTX01JU0NfUkVHX1JEICovXFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX0xcXHRcXHQweGMwZDI4ODg0XFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01cXHRcXHQweGMwZDI4ODg4XFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX0xfUE5VTUxcXHRcXHRHRU5NQVNLKDE1LCAxMilcXG4rI2RlZmluZSBNWEw4NjJYWF9DSElQSURfTV9QTlVNTVxcdFxcdEdFTk1BU0soMTEsIDApXFxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTlxcdEdFTk1BU0soMTQsIDEyKVxcbitcXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fSU5TVF9TRUxcXHRcXHQweGUwMFxcbiAjZGVmaW5lIE1YTDg2MlhYX1RDTV9DQlNcXHRcXHQweGUxMlxcbiAjZGVmaW5lIE1YTDg2MlhYX1RDTV9FQlNcXHRcXHQweGUxM1xcbkBAIC0yMjIsNyArMjMwLDQ2IEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcGh5X3dyaXRlX2M0NV9taWlfYnVzKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLFxcbiBcXHRyZXR1cm4gbXhsODYyeHhfcGh5X3dyaXRlX21tZChidXMtXFx1MDAzZXByaXYsIGFkZHIsIGRldmFkZCwgcmVnbnVtLCB2YWwpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbisvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElEXFxuKyAqIHJlZ2lzdGVycy4gT25seSBwb3NzaWJsZSB3aXRoIGEgcnVubmluZyBmaXJtd2FyZSwgc28gdGhlIHZhbHVlcyBhcmVcXG4rICogY2FjaGVkIGF0IHNldHVwIGFuZCBsZWZ0IHplcm8gd2hlbiB0aGUgc3dpdGNoIGlzIGluIHJlc2N1ZSBtb2RlLlxcbisgKi9cXG4rc3RhdGljIGludCBteGw4NjJ4eF9yZWFkX2NoaXBfaWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgcmVnID0ge307XFxuK1xcdHUxNiBjaGlwaWRfbCwgY2hpcGlkX207XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9MKTtcXG4rXFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRjaGlwaWRfbCA9IGxlMzJfdG9fY3B1KHJlZy52YWwpO1xcbitcXG4rXFx0cmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTSk7XFxuK1xcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0Y2hpcGlkX20gPSBsZTMyX3RvX2NwdShyZWcudmFsKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWFzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8XFxuK1xcdFxcdFxcdEZJRUxEX0dFVChNWEw4NjJYWF9DSElQSURfTV9QTlVNTSwgY2hpcGlkX20pIFxcdTAwM2NcXHUwMDNjIDQ7XFxuK1xcdHByaXYtXFx1MDAzZWFzaWNfcmV2ID0gRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT04sIGNoaXBpZF9tKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogbXhsODYyeHhfd2FpdF9yZWFkeSAtIHdhaXQgZm9yIHRoZSBzd2l0Y2ggZmlybXdhcmUgdG8gYmVjb21lIG9wZXJhdGlvbmFsXFxuKyAqIEBkczogRFNBIHN3aXRjaCBpbnN0YW5jZVxcbisgKlxcbisgKiBQb2xsIHRoZSBmaXJtd2FyZSB1bnRpbCBpdCByZXBvcnRzIGl0cyB2ZXJzaW9uIGFuZCBhY2NlcHRzXFxuKyAqIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMsIHRoZW4gY2FjaGUgdGhlIGZpcm13YXJlIHZlcnNpb24gYW5kIGNoaXAgSUQuXFxuKyAqIFRha2VzIGF0IGxlYXN0IHR3byBzZWNvbmRzLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuXFxuKyAqL1xcbitpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9O1xcbiBcXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcywgdGltZW91dDtcXG5AQCAtMjU0LDYgKzMwMSwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yID0gdmVyLml2X21ham9yO1xcbiBcXHRcXHRwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yID0gdmVyLml2X21pbm9yO1xcbiBcXHRcXHRwcml2LVxcdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uID0gbGUxNl90b19jcHUodmVyLml2X3JldmlzaW9uKTtcXG4rXFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChwcml2KTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZHMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byByZWFkIGNoaXAgSUQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IEVSUl9QVFIocmV0KSk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gbm90X3JlYWR5X3lldDpcXG5AQCAtNjIyLDE1ICs2NzQsNDkgQEAgc3RhdGljIGludCBteGw4NjJ4eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGludCBuX3VzZXJfcG9ydHMgPSAwLCBtYXhfdmxhbnM7XFxuIFxcdGludCBpbmdyZXNzX2ZpbmFscywgdmlkX3J1bGVzO1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbi1cXHRpbnQgcmV0LCBpO1xcbitcXHRpbnQgcmV0LCBpLCByZXNjdWU7XFxuIFxcbi1cXHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogRGV0ZWN0IHRoZSBsb2FkZXIgb3ZlciBTQiBQREkgZmlyc3Q6IGl0IG5lZWRzIG5vIGZpcm13YXJlLCB1bmxpa2UgdGhlXFxuK1xcdCAqIEM0NSBBUEkgKG14bDg2Mnh4X3Jlc2V0L3dhaXRfcmVhZHkpIHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBub25lXFxuK1xcdCAqIGFuc3dlcnMuIFRvdWNoIEM0NSBvbmx5IG9uY2UgcmVzY3VlIGlzIHJ1bGVkIG91dC5cXG4rXFx0ICovXFxuK1xcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcXG4rXFx0aWYgKHJlc2N1ZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXNjdWU7XFxuIFxcbi1cXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKSB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7XFxuK1xcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0LyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqL1xcbitcXHRcXHRcXHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XFxuK1xcdFxcdFxcdGlmIChyZXNjdWUgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmVzY3VlO1xcbitcXHRcXHRcXHRpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cHJpdi1cXHUwMDNlcmVzY3VlX21vZGUgPSByZXNjdWU7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4rXFx0XFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9yZWFkeSkge1xcbitcXHRcXHRcXHRkZXZfd2Fybihkcy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgXFxcInN3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXFxcblxcXCIpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHQvKiBEcmFpbiB0aGUgd2VkZ2VkIGRvd25sb2FkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIGl0XFxuK1xcdFxcdFxcdCAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZVxcbitcXHRcXHRcXHQgKiBhdmFpbGFibGUgb25jZSByZWFkeS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGRldl93YXJuKGRzLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwic3dpdGNoIGluIE1DVWJvb3Qgd2l0aCBhbiBpbnRlcnJ1cHRlZCBkb3dubG9hZCwgcmVjb3ZlcmluZyBpbiBiYWNrZ3JvdW5kXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNnByaXYtXFx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuIFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzZXJkZXNfbG9jayk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXNlcmRlc19wb3J0cyk7IGkrKylcXG5AQCAtNzE1LDExICs4MDEsMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRyZXR1cm4gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgdHJ1ZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdGlmIChteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSkpXFxuIFxcdFxcdGRldl9lcnIoZHMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbiB9XFxuQEAgLTEzMzcsNiArMTQzMywxMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4gXFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHQvKiBEU0EgcmVpbml0cyBmYWlsZWQgdXNlciBwb3J0cyBhcyB1bnVzZWQ7IHNoYXJlZCBwb3J0cyBtdXN0XFxuK1xcdCAqIHN1Y2NlZWQgZm9yIHRoZSB0cmVlIHRvIHJlZ2lzdGVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcXG4rXFxuIFxcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtMTU3Miw2ICsxNjc0LDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdGV0aGVyX2FkZHJfY29weShxcGFyYW0ubWFjLCBtZGItXFx1MDAzZWFkZHIpO1xcbiBcXG4gXFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgTVhMODYyWFhfTUFDX1RBQkxFRU5UUllRVUVSWSwgcXBhcmFtKTtcXG4rXFx0LyogLUVOT0RFVjogdGhlIGZpcm13YXJlIGFuZCBpdHMgTUFDIHRhYmxlIGFyZSBnb25lLCBub3RoaW5nIGxlZnRcXG4rXFx0ICogdG8gZGVsZXRlXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0ID09IC1FTk9ERVYpXFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMTYyOCw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4gXFx0Y2FzZSBCUl9TVEFURV9ESVNBQkxFRDpcXG4gXFx0XFx0cGFyYW0ucG9ydF9zdGF0ZSA9IGNwdV90b19sZTMyKE1YTDg2MlhYX1NUUF9QT1JUX1NUQVRFX0RJU0FCTEUpO1xcbkBAIC0yMDE1LDYgKzIxMjUsMTIgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc3RhdHNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IHByaXYtXFx1MDAzZWRzO1xcbiBcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbiBcXG4rXFx0LyogQSBnZXRfc3RhdHM2NCgpIHJlLWFybSBjYW4gcmFjZSB0aGUgZmxhc2ggdGVhcmRvd24ncyBXT1JLX1NUT1BQRURcXG4rXFx0ICogc2V0IGFuZCBjYW5jZWw7IGJhaWwgaGVyZSBzbyBhIHN0cmF5IHBvbGwgbmV2ZXIgcnVucyBkdXJpbmcgYSBmbGFzaC5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9hdmFpbGFibGVfcG9ydChkcCwgZHMpXFxuIFxcdFxcdG14bDg2Mnh4X3N0YXRzX3BvbGwoZHMsIGRwLVxcdTAwM2VpbmRleCk7XFxuIFxcbkBAIC0yMDg2LDYgKzIyMDIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHMgPSBteGw4NjJ4eF9nZXRfcGF1c2Vfc3RhdHMsXFxuIFxcdC5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLFxcbiBcXHQuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCxcXG4rXFx0LmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LFxcbitcXHQuZGV2bGlua19mbGFzaF91cGRhdGUgPSBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXFxuaW5kZXggNDMyYTVmM2YyZTA4ZTYuLjEyOTk4NWYyYmJmM2RlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcXG5AQCAtMTQsNiArMTQsMTAgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXY7XFxuICNkZWZpbmUgTVhMODYyWFhfRklSU1RfU0VSREVTX1BPUlRcXHQ5XFxuICNkZWZpbmUgTVhMODYyWFhfU0VSREVTX1NMT1RTXFx0XFx0NFxcbiBcXG4rLyogbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCkgcmV0dXJuIGNvZGVzIChuZWdhdGl2ZSB2YWx1ZXMgYXJlIGVycm9ycykgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFXFx0XFx0MFxcbisjZGVmaW5lIE1YTDg2MlhYX0lOX1JFU0NVRVxcdFxcdDFcXG4rXFxuICNkZWZpbmUgTVhMODYyWFhfREVGQVVMVF9CUklER0VcXHRcXHQwXFxuICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRVNcXHRcXHQ0OFxcbiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VfUE9SVFNcXHQxMjhcXG5AQCAtMzAzLDYgKzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7XFxuICAqICAgICAgICAgICAgICAgICAgICAgIGZsb29kaW5nKVxcbiAgKiBAZndfdmVyc2lvbjogICAgICAgICBjYWNoZWQgZmlybXdhcmUgdmVyc2lvbiwgcG9wdWxhdGVkIGF0IHByb2JlIGFuZFxcbiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKVxcbisgKiBAYXNpY19pZDogICAgICAgICAgICBjaGlwIHBhcnQgbnVtYmVyIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rIFxcXCJhc2ljLmlkXFxcIiBmaXhlZCB2ZXJzaW9uXFxuKyAqIEBhc2ljX3JldjogICAgICAgICAgIGNoaXAgdmVyc2lvbiByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLFxcbisgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayBcXFwiYXNpYy5yZXZcXFwiIGZpeGVkIHZlcnNpb25cXG4gICogQHNlcmRlc19wb3J0czogICAgICAgU2VyRGVzIGludGVyZmFjZXMgaW5jbC4gc3ViLWludGVyZmFjZXMgaW4gY2FzZSBvZlxcbiAgKiAgICAgICAgICAgICAgICAgICAgICAxMEdfUVhHTUlJIG9yIFFTR01JSVxcbiAgKiBAc2VyZGVzX3JlZmNvdW50OiAgICBwZXItWFBDUyBjb3VudCBvZiBzdWItcG9ydHMgZW5hYmxlZCBieSBwaHlsaW5rO1xcbkBAIC0zMTksNiArMzI3LDE1IEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcXG4gICogQGV2bGFuX2luZ3Jlc3Nfc2l6ZTogcGVyLXBvcnQgaW5ncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcXG4gICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxcbiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplXFxuKyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoXFxuKyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd25cXG4rICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmVcXG4rICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kcyBmYWlsIGZhc3QsXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzXFxuKyAqIEByZXNjdWVfcmVhZHk6ICAgICAgIChyZXNjdWVfbW9kZSkgbG9hZGVyIGlzIGF0IGEgY2xlYW4gUkVBRFkgYW5kIHdpbGwgYWNjZXB0XFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGEgZmxhc2g7IGZhbHNlIHdoaWxlIHJlc2N1ZV9oZWFsX3dvcmsgaXMgZHJhaW5pbmdcXG4rICogQHJlc2N1ZV9oZWFsX3dvcms6ICAgYmFja2dyb3VuZCBzZWxmLWhlYWwgZHJhaW5pbmcgYSB3ZWRnZWQgZG93bmxvYWQgdG8gUkVBRFlcXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xcbiAgKi9cXG5AQCAtMzI2LDkgKzM0MywxMiBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XFxuIFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4gXFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3JjX2Vycl93b3JrO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzY3VlX2hlYWxfd29yaztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0dTE2IGRyb3BfbWV0ZXI7XFxuIFxcdHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIGZ3X3ZlcnNpb247XFxuK1xcdHUxNiBhc2ljX2lkO1xcbitcXHR1OCBhc2ljX3JldjtcXG4gXFx0c3RydWN0IG14bDg2Mnh4X3BjcyBzZXJkZXNfcG9ydHNbOF07XFxuIFxcdGludCBzZXJkZXNfcmVmY291bnRbMl07XFxuIFxcdHN0cnVjdCBtdXRleCBzZXJkZXNfbG9jaztcXG5AQCAtMzM3LDcgKzM1NywxMyBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XFxuIFxcdHUxNiBldmxhbl9pbmdyZXNzX3NpemU7XFxuIFxcdHUxNiBldmxhbl9lZ3Jlc3Nfc2l6ZTtcXG4gXFx0dTE2IHZmX2Jsb2NrX3NpemU7XFxuK1xcdGJvb2wgYmxvY2tfaG9zdDtcXG4rXFx0Ym9vbCBza2lwX3RlYXJkb3duO1xcbitcXHRib29sIHJlc2N1ZV9tb2RlO1xcbitcXHRib29sIHJlc2N1ZV9yZWFkeTtcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xcbiB9O1xcbiBcXG4raW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4rXFxuICNlbmRpZiAvKiBfX01YTDg2MlhYX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxcbmluZGV4IDhjMTZlZjIzY2MxMDJhLi5jOWUxOTM0OGRlNjE5MyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTExNzAsNiArMTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XFxuIFxcdGludFxcdCgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4gXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK1xcdGludFxcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbiBcXHRpbnRcXHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbyk7XFxuZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmNcXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uZDYwMjIyNjdhODM5Y2QgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS9kZXZsaW5rLmNcXG4rKysgYi9uZXQvZHNhL2RldmxpbmsuY1xcbkBAIC0yMCw2ICsyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xcbitcXG4rXFx0cmV0dXJuIGRzLVxcdTAwM2VvcHMtXFx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQoc3RydWN0IGRldmxpbmsgKmRsLFxcbiBcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbylcXG5AQCAtMTY3LDE4ICsxNzYsMzEgQEAgZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGxwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHRwX21heCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xcbi1cXHQuaW5mb19nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LFxcbi1cXHQuc2JfcG9vbF9nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxcbi1cXHQuc2JfcG9vbF9zZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxcbi1cXHQuc2JfcG9ydF9wb29sX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX2dldCxcXG4tXFx0LnNiX3BvcnRfcG9vbF9zZXRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXFxuLVxcdC5zYl90Y19wb29sX2JpbmRfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LFxcbi1cXHQuc2JfdGNfcG9vbF9iaW5kX3NldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCxcXG4tXFx0LnNiX29jY19zbmFwc2hvdFxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFxcbi1cXHQuc2Jfb2NjX21heF9jbGVhclxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcXG4tXFx0LnNiX29jY19wb3J0X3Bvb2xfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCxcXG4rLyogVGhlIGRldmxpbmsgY29yZSByZWplY3RzIGZsYXNoIHJlcXVlc3RzIHVwIGZyb250IHdoZW4gdGhlIGZsYXNoX3VwZGF0ZVxcbisgKiBvcCBpcyBhYnNlbnQsIGJlZm9yZSBmZXRjaGluZyB0aGUgZmlybXdhcmUgZmlsZSBmcm9tIHVzZXJzcGFjZS4gT25seVxcbisgKiBpbnN0YWxsIHRoZSBvcCBmb3Igc3dpdGNoZXMgd2hvc2UgZHJpdmVyIGltcGxlbWVudHMgaXQsIHNvIHRoYXRcXG4rICogdW5zdXBwb3J0ZWQgcmVxdWVzdHMga2VlcCBmYWlsaW5nIGVhcmx5LlxcbisgKi9cXG4rI2RlZmluZSBEU0FfREVWTElOS19PUFNcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC5pbmZvX2dldFxcdFxcdFxcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXFx0XFx0XFxcXFxcbitcXHQuc2JfcG9vbF9nZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxcdFxcXFxcXG4rXFx0LnNiX3Bvb2xfc2V0XFx0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcXHRcXFxcXFxuK1xcdC5zYl9wb3J0X3Bvb2xfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxcdFxcXFxcXG4rXFx0LnNiX3BvcnRfcG9vbF9zZXRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXFx0XFxcXFxcbitcXHQuc2JfdGNfcG9vbF9iaW5kX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXFxcXFxcbitcXHQuc2JfdGNfcG9vbF9iaW5kX3NldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCwgXFxcXFxcbitcXHQuc2Jfb2NjX3NuYXBzaG90XFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsXFx0XFxcXFxcbitcXHQuc2Jfb2NjX21heF9jbGVhclxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcXHRcXFxcXFxuK1xcdC5zYl9vY2NfcG9ydF9wb29sX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsIFxcXFxcXG4gXFx0LnNiX29jY190Y19wb3J0X2JpbmRfZ2V0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldCxcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xcbitcXHREU0FfREVWTElOS19PUFNcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2RldmxpbmtfZmxhc2hfb3BzID0ge1xcbitcXHREU0FfREVWTElOS19PUFNcXG4rXFx0LmZsYXNoX3VwZGF0ZVxcdFxcdFxcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxcbiB9O1xcbiBcXG4gaW50IGRzYV9kZXZsaW5rX3BhcmFtX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcXG5AQCAtMzc4LDEyICs0MDAsMTYgQEAgdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIGludCBkc2Ffc3dpdGNoX2RldmxpbmtfYWxsb2Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBkc2FfZGV2bGlua19wcml2ICpkbF9wcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcztcXG4gXFx0c3RydWN0IGRldmxpbmsgKmRsO1xcbiBcXG4rXFx0b3BzID0gZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUgPyBcXHUwMDI2ZHNhX2RldmxpbmtfZmxhc2hfb3BzXFxuK1xcdFxcdFxcdFxcdFxcdCAgICA6IFxcdTAwMjZkc2FfZGV2bGlua19vcHM7XFxuK1xcbiBcXHQvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhblxcbiBcXHQgKiBhZGQgZHBpcGUgdGFibGVzXFxuIFxcdCAqL1xcbi1cXHRkbCA9IGRldmxpbmtfYWxsb2MoXFx1MDAyNmRzYV9kZXZsaW5rX29wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtXFx1MDAzZWRldik7XFxuK1xcdGRsID0gZGV2bGlua19hbGxvYyhvcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAoIWRsKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjQ1OjEzLjg5MTQ2NjU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzMyODQ4ODg0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGQ5MGUwZGY0NzJlZDVlZThiNjNhMGNiM2NhOGYzZjFhNDg1YzU2MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEyOjQ1OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5pbmRleCA0NzQ1MTQ4ZmVjZjRmZS4uMDU4OTk5ZDBkYzU2ZjIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuQEAgLTk0LDYgKzk0LDcgQEAgcGFyYW1ldGVycywgaW5mbyB2ZXJzaW9ucywgYW5kIG90aGVyIGZlYXR1cmVzIGl0IHN1cHBvcnRzLlxuICAgIG1seDVcbiAgICBtbHhzd1xuICAgIG12ODhlNnh4eFxuKyAgIG14bDg2Mnh4XG4gICAgbmV0ZGV2c2ltXG4gICAgbmZwXG4gICAgb2N0ZW9udHgyXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIzZTlmN2Q0ZDQ5NjllXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9teGw4NjJ4eC5yc3RcbkBAIC0wLDAgKzEsNjMgQEBcbisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK1xuKz09PT09PT09PT09PT09PT09PT09PT09PVxuK214bDg2Mnh4IGRldmxpbmsgc3VwcG9ydFxuKz09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZVxuK2BgbXhsODYyeHhgYCBkZXZpY2UgZHJpdmVyLlxuK1xuK0luZm8gdmVyc2lvbnNcbis9PT09PT09PT09PT09XG4rXG4rVGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBpbXBsZW1lbnRlZFxuKyAgIDp3aWR0aHM6IDUgNSA1IDg1XG4rXG4rICAgKiAtIE5hbWVcbisgICAgIC0gVHlwZVxuKyAgICAgLSBFeGFtcGxlXG4rICAgICAtIERlc2NyaXB0aW9uXG4rICAgKiAtIGBgYXNpYy5pZGBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIDg2MjhcbisgICAgIC0gVGhlIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90XG4rICAgICAgIHJlcG9ydGVkIGZvciBhIHN3aXRjaCBzaXR0aW5nIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUgYXMgdGhlXG4rICAgICAgIHJlZ2lzdGVycyBhcmUgb25seSBhY2Nlc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLlxuKyAgICogLSBgYGFzaWMucmV2YGBcbisgICAgIC0gZml4ZWRcbisgICAgIC0gMFxuKyAgICAgLSBUaGUgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdCByZXBvcnRlZFxuKyAgICAgICBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGVpdGhlci5cbisgICAqIC0gYGBmd2BgXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuKyAgICAgLSAxLjAuNzBcbisgICAgIC0gVmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgcnVubmluZyBvbiB0aGUgc3dpdGNoLCByZXBvcnRlZCBhcyBib3RoXG4rICAgICAgIHJ1bm5pbmcgYW5kIHN0b3JlZCBzaW5jZSB0aGUgc3dpdGNoIGJvb3RzIGl0IGZyb20gaXRzIG93biBmbGFzaC5cbisgICAgICAgSW4gTUNVYm9vdCByZXNjdWUgbW9kZSBub3RoaW5nIGlzIHJlcG9ydGVkIHdoaWxlIGFuIGludGVycnVwdGVkXG4rICAgICAgIGRvd25sb2FkIGlzIHN0aWxsIGJlaW5nIHJlY292ZXJlZCBpbiB0aGUgYmFja2dyb3VuZDsgb25jZSB0aGVcbisgICAgICAgbG9hZGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBpbWFnZSB0aGUgdmVyc2lvbiBpcyByZXBvcnRlZCAoYXNcbisgICAgICAgYm90aCBydW5uaW5nIGFuZCBzdG9yZWQpLCB3aGljaCBpcyB0aGUgc2lnbmFsIHRoYXQgYSBmbGFzaCB3aWxsIGJlXG4rICAgICAgIGFjY2VwdGVkLiBJdCByZWFkcyBcIjAuMC4wXCIgd2hlbiB0aGUgc3dpdGNoIGNhbWUgdXAgc3RyYWlnaHQgaW50b1xuKyAgICAgICBNQ1Vib290IHdpdGhvdXQgZXZlciBydW5uaW5nIGZpcm13YXJlLlxuK1xuK0ZsYXNoIHVwZGF0ZVxuKz09PT09PT09PT09PVxuK1xuK1RoZSBgYG14bDg2Mnh4YGAgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgYGBkZXZsaW5rIGRldiBmbGFzaGBgLlxuK1RoZSBzaWduZWQgZmlybXdhcmUgaW1hZ2UgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHN3aXRjaCBvdmVyIHRoZSBzYW1lXG4rTURJTyBidXMgd2hpY2ggaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgc3dpdGNoLCB0aGVuIHZlcmlmaWVkIGFuZFxuK2luc3RhbGxlZCBieSB0aGUgTUNVYm9vdCBib290bG9hZGVyIHJ1bm5pbmcgb24gdGhlIHN3aXRjaC4gQWxsIHBvcnRzXG4rb2YgdGhlIHN3aXRjaCBhcmUgY2xvc2VkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHVwZGF0ZSBhbmQgdGhlIGRyaXZlclxuK3JlcHJvYmVzIHRoZSBzd2l0Y2ggYWZ0ZXIgaXQgaGFzIHJlYm9vdGVkIGludG8gdGhlIG5ldyBmaXJtd2FyZS4gQVxuK2NvbXBsZXRlIGZsYXNoIGFuZCByZXByb2JlIGN5Y2xlIHRha2VzIGFib3V0IG9uZSBtaW51dGUuXG4rXG4rQSBzd2l0Y2ggc3R1Y2sgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSwgZS5nLiBhZnRlciBhbiBpbnRlcnJ1cHRlZFxuK3VwZGF0ZSwgaXMgcmVnaXN0ZXJlZCB3aXRob3V0IHVzZXIgcG9ydHMuIElmIHRoZSBwcmV2aW91cyBkb3dubG9hZCB3YXNcbitpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgdGhlIGxvYWRlciBpcyB3ZWRnZWQ7IHRoZSBkcml2ZXIgZHJhaW5zIGl0XG4rYmFjayB0byBhIGNsZWFuIHJlYWR5IHN0YXRlIGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBjYW4gZWFzaWx5IHRha2Vcbittb3JlIHRoYW4gMTAgbWludXRlcy4gRHVyaW5nIHRoYXQgcmVjb3ZlcnkgYGBkZXZsaW5rIGRldiBpbmZvYGAgcmVwb3J0c1xuK25vIGZpcm13YXJlIHZlcnNpb24gYW5kIGBgZGV2bGluayBkZXYgZmxhc2hgYCByZXR1cm5zIGBgLUVCVVNZYGAuXG4rT25jZSB0aGUgbG9hZGVyIGlzIHJlYWR5IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFwcGVhcnMgYW5kIGZsYXNoaW5nIGFcbitmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIHRoZSByZWd1bGFyIHVwZGF0ZSBmbG93IHJlY292ZXJzIHRoZSBzd2l0Y2guXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNjBjZmYwMDk1M2RjYmUuLjNhNTVlZDJiYWQ5Y2JhIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTYxMDcsNiArMTYxMDcsNyBAQCBNOlx0RGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWF4bGluZWFyLG14bDg2Mnh4LnlhbWxcbitGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG4gRjpcdGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cbiBGOlx0bmV0L2RzYS90YWdfbXhsODYyeHguY1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbkBAIC0xLDMgKzEsMyBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBvYmotJChDT05GSUdfTkVUX0RTQV9NWEw4NjIpICs9IG14bDg2Mnh4X2RzYS5vXG4tbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vXG4rbXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmhcbmluZGV4IGExODBhNWRlY2ZmYzAxLi42Zjc3MTg5NTk4NGNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXG5AQCAtMTIyNCw2ICsxMjI0LDE2IEBAIHN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB7XG4gXHRfX2xlMzIgaXZfYnVpbGRfbnVtO1xuIH0gX19wYWNrZWQ7XG4gXG4rLyoqXG4rICogc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgLSBTeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZVxuKyAqIEBhZGRyOiAzMi1iaXQgcmVnaXN0ZXIgYWRkcmVzc1xuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbHVlXG4rICovXG4rc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncge1xuK1x0X19sZTMyIGFkZHI7XG4rXHRfX2xlMzIgdmFsO1xuK30gX19wYWNrZWQ7XG4rXG4gLyoqXG4gICogZW51bSBteGw4NjJ4eF9wb3J0X3R5cGUgLSBQb3J0IFR5cGVcbiAgKiBATVhMODYyWFhfTE9HSUNBTF9QT1JUOiBMb2dpY2FsIFBvcnRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbmluZGV4IGM4N2E5NTVjMTNjNDhlLi5hODY1NDI1YWE2MWUxZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG5AQCAtNzAsNyArNzAsOSBAQFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFx0XHRcdChHUFlfR1BZMlhYX01BR0lDICsgMHgxKVxuICNkZWZpbmUgSU5UX0dQSFlfV1JJVEVcdFx0XHQoR1BZX0dQWTJYWF9NQUdJQyArIDB4MilcbiBcbisjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVx0XHQoU1lTX01JU0NfTUFHSUMgKyAweDEpXG4gI2RlZmluZSBTWVNfTUlTQ19GV19WRVJTSU9OXHRcdChTWVNfTUlTQ19NQUdJQyArIDB4MilcbisjZGVmaW5lIFNZU19NSVNDX1JFR19SRFx0XHRcdChTWVNfTUlTQ19NQUdJQyArIDB4OClcbiBcbiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0NPTkZJR1x0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgKyAweDEpXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19HRVRfU1RBVEVcdChNWEw4NjJYWF9YUENTX01BR0lDICsgMHgyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNTRiMzU1NDUzNGMyYWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5AQCAtMCwwICsxLDk0OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBGaXJtd2FyZSBmbGFzaCBhbmQgZGV2bGluayBzdXBwb3J0IGZvciBNYXhMaW5lYXIgTXhMODYyeHhcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4rICpcbisgKiBTQiBQREkgLSBmaXJtd2FyZSBkb3dubG9hZCBpbnRlcmZhY2Ugb3ZlciBjbGF1c2UtMjIgU01ESU9cbisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbisgKlxuKyAqIFRoZSBNeEw4NjJ4eCBNQ1Vib290IGxvYWRlciBhY2NlcHRzIGEgZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCBmb3VyIFwiU0IgUERJXCJcbisgKiByZWdpc3RlcnMgaW4gdGhlIHN3aXRjaCBTTURJTyByZWdpc3RlciBzcGFjZS4gSXQgcnVucyB3aGVuZXZlciBubyBXU1BcbisgKiBmaXJtd2FyZSBpcyBhY3RpdmU6IHRoZSBub3JtYWwgZmlybXdhcmUgdXBkYXRlIGVudGVycyBpdCBkZWxpYmVyYXRlbHkgLSB0aGVcbisgKiBTWVNfTUlTQ19GV19VUERBVEUgQVBJIGNvbW1hbmQgc2V0cyBhIHN0aWNreSByZXNjdWUgYml0IGFuZCByZWJvb3RzIGludG9cbisgKiBNQ1Vib290IC0gYW5kIHRoZSBsb2FkZXIgYWxzbyBzdGF5cyBoZXJlIHdoZW4gdGhlIHN0b3JlZCBXU1AgZmlybXdhcmUgZmFpbHNcbisgKiBpdHMgYm9vdC10aW1lIGludGVncml0eSBjaGVjay4gVGhpcyBkcml2ZXIgZHJpdmVzIHRoZSBsb2FkZXIncyAweGM1NWNcbisgKiBcImNvbnNvbGVcIiBkb3dubG9hZCBwYXRoLlxuKyAqXG4rICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKTpcbisgKiAgIE1JSSByZWcgMHgxZiA6PSBcdTAwM2NzYl9wZGlfcmVnXHUwMDNlICAgICAgOyBhZGRyZXNzL3BhZ2UgbGF0Y2hcbisgKiAgIE1JSSByZWcgMHgwMCA6PSAvID1cdTAwM2UgXHUwMDNjdTE2IGRhdGFcdTAwM2UgICA7IGRhdGEgd2luZG93XG4rICpcbisgKiBTQiBQREkgcmVnaXN0ZXJzIChob3N0IG5hbWUvYWRkciAgLVx1MDAzZSAgTUNVIG1haWxib3gpOlxuKyAqICAgQ1RSTCAweGUxMDAgLVx1MDAzZSAweGMwOTM4NDAwICAgbW9kZTogUlNUPTB4MDAgIFJEPTB4MDEgIFdSPTB4MDJcbisgKiAgIEFERFIgMHhlMTAxIC1cdTAwM2UgMHhjMDkzODQwNCAgIFNCIHRhcmdldCB3b3JkIGFkZHJlc3MgKFNCMSBiYW5rID0gMHg3ODAwKVxuKyAqICAgREFUQSAweGUxMDIgLVx1MDAzZSAweGMwOTM4NDA4ICAgMTYtYml0IGRhdGEgLyByZXBseSB3b3JkXG4rICogICBTVEFUIDB4ZTEwMyAtXHUwMDNlIDB4YzA5Mzg0MGMgICBoYW5kc2hha2U6IGEgbWFnaWMgKGJlbG93KSBvciBhIGJ5dGUgY291bnRcbisgKlxuKyAqIFNUQVQgbWFnaWNzOlxuKyAqICAgUkVBRFkgIDB4YzU1YyAgIGxvYWRlciBpZGxlIGluIHRoZSBjb25zb2xlIGxvb3AgICAgICAgICh0aGlzIGRyaXZlcilcbisgKiAgIERMX1JEWSAweGMzM2MgICBsb2FkZXIgaWRsZSBpbiB0aGUgZmxhc2hsZXNzIGxvb3BcbisgKiAgIFNUQVJUICAweGY0OGYgICBob3N0ICAgLVx1MDAzZSBiZWdpbiBkb3dubG9hZCBzZXNzaW9uXG4rICogICBBQ0sgICAgMHhmNDkwICAgbG9hZGVyIC1cdTAwM2UgU1RBUlQgYWNrbm93bGVkZ2VkIChTVEFSVCArIDEpXG4rICogICBFTkQgICAgMHgzY2MzICAgaG9zdCAgIC1cdTAwM2UgZW5kIG9mIHRyYW5zZmVyIC8gZmluYWxpc2VcbisgKiAgIFJEUkVHICAweGUyYzAgICBob3N0ICAgLVx1MDAzZSByZWdpc3Rlci1yZWFkIGNvbW1hbmQgKHwgaW5kZXgpLCBzZWUgYmVsb3dcbisgKlxuKyAqIENvbnNvbGUgZmxhc2ggcGF0aCAoU1RBVD0weGM1NWMpIC0gbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoKTpcbisgKlxuKyAqICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyXG4rICogICAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS1cbisgKiAgIHJlc2V0IChDVFJMPUFERFI9REFUQT0wKVxuKyAqICAgcmVhZCBTVEFUIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHhjNTVjICAgKFJFQURZLCBpZGxlKVxuKyAqICAgU1RBVCA6PSBTVEFSVCgweGY0OGYpICAtLS0tLS0tLS0tLS0tLVx1MDAzZVxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MtLS0tLS0tLS0tLS0tLSBTVEFUID0gMHhmNDkwIChBQ0spXG4rICogICBDVFJMIDo9IFdSXG4rICogICBEQVRBIDo9IGhkclswLi45XSAgKDIwLWJ5dGUgaGVhZGVyOiB0eXBlLHNpemUxLGNyYzEsc2l6ZTIsY3JjMilcbisgKiAgIHJlc2V0OyBTVEFUIDo9IDIwIChoZWFkZXIgbGVuKSAgLS0tLS1cdTAwM2UgcGFyc2UgaGRyOyByX3JlbWFpbj1zaXplMStzaXplMjtcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSQVNFIHRhcmdldCByZWdpb24ocylcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjLS0tLS0tLS0tLS0tLS0gU1RBVD0yMSAobGVuKzEpLCB0aGVuIFNUQVQ9MFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVyYXNlZClcbisgKiAgIC0tIHBheWxvYWQsIHN0cmVhbWVkIGluIHNsaWNlczogLS1cbisgKiAgIENUUkwgOj0gV1JcbisgKiAgIERBVEEgOj0gd29yZCB4IE4gLi4uXG4rICogICAgIGF0IHdvcmQgMTYzODQ6IHJlc2V0OyBBRERSOj0weDc4MDA7IENUUkw6PVdSICAgKGhhbGYtYmFuayAtXHUwMDNlIFNCMSlcbisgKiAgICAgYXQgd29yZCAzMjc2MDogZmx1c2ggc2xpY2U6XG4rICogICAgICAgIHJlc2V0OyBTVEFUIDo9IFx1MDAzY2J5dGVzX3RoaXNfc2xpY2VcdTAwM2UgLS0tXHUwMDNlIHJfcmVtYWluIC09IGJ5dGVzOyBwcm9ncmFtXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0gU1RBVD0wICAocmVhZHkgZm9yIG5leHQgc2xpY2UpXG4rICogICAuLi4gcmVwZWF0IHVudGlsIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHNlbnQgLi4uXG4rICogICBTVEFUIDo9IEVORCgweDNjYzMpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cdTAwM2UgZmluYWxpc2VcbisgKlxuKyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKTpcbisgKiAgIEV2ZXJ5IGhvc3QgU1RBVCB3cml0ZSBpbiB0aGUgcGF5bG9hZCBwaGFzZSBpcyBhIGJ5dGUgY291bnQ7IHRoZSBsb2FkZXJcbisgKiAgIGRvZXMgcl9yZW1haW4gLT0gY291bnQgYW5kIHN0YXlzIGluIHRoZSByZWNlaXZlIGxvb3Agd2hpbGUgcl9yZW1haW4gIT0gMC5cbisgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0c1xuKyAqICAgcmVzY3VlLWVuYWJsZSBiaXQgc28gYm9vdF9nbyBib290cyB0aGUgbmV3IGltYWdlLCBPTkxZIHdoZW4gcl9yZW1haW4gaGl0c1xuKyAqICAgRVhBQ1RMWSAwLiBBIGNvdW50IGxhcmdlciB0aGFuIHJfcmVtYWluIHVuZGVyZmxvd3MgdGhlIDMyLWJpdCBjb3VudGVyIGFuZFxuKyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6XG4rICogICAgIC0gbmV2ZXIgc2VuZCBhIHNsaWNlL2NodW5rIGNvdW50IGxhcmdlciB0aGFuIHdoYXQgaXMgb3V0c3RhbmRpbmc7XG4rICogICAgIC0gaW50ZXJydXB0ZWQtZG93bmxvYWQgcmVjb3ZlcnkgZmVlZHMgMSBieXRlIGF0IGEgdGltZSAoc2VlIGJlbG93KS5cbisgKlxuKyAqIEludGVycnVwdGVkLWZsYXNoIHJlY292ZXJ5IChteGw4NjJ4eF9yZXNjdWVfZHJhaW4pOlxuKyAqICAgQSBob3N0IHRoYXQgZGllcyBtaWQtcGF5bG9hZCBsZWF2ZXMgdGhlIGxvYWRlciBzcGlubmluZyBpbiB0aGUgc2xpY2UgbG9vcFxuKyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCArXG4rICogICBTVEFUPTEpIHVudGlsIHJfcmVtYWluIHJlYWNoZXMgMCwgdGhlbiBTVEFUPUVORDsgdGhlIGxvYWRlciBmaW5hbGlzZXMgdGhlXG4rICogICAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zIFJFQURZIGZvciBhIGNsZWFuIHJlZmxhc2guXG4rICpcbisgKiBSZWdpc3Rlci1yZWFkIGNoYWxsZW5nZSAobm9uLWRlc3RydWN0aXZlIGxpdmVuZXNzIHByb29mKTpcbisgKiAgIERBVEEgOj0gMHg3YzIzIChtYXJrZXIpOyBTVEFUIDo9IDB4ZTJjMHxpZHhcbisgKiAgICAgLVx1MDAzZSBsb2FkZXIgcmV0dXJucyBhIHJ1bnRpbWUgd29yZCBpbiBEQVRBIGFuZCByZS1hcm1zIFNUQVQ9MHhjNTVjLlxuKyAqICAgVGhlIHJlcGx5IHNvdXJjZSBpcyBsb2FkZXIgQlNTLCBub3QgYSBjaGlwIGlkOyB1c2VkIG9ubHkgdG8gcHJvdmUgYSBsaXZlXG4rICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLlxuKyAqXG4rICogVGhlIG90aGVyIFNUQVQgcmVhZHkgbWFnaWMsIDB4YzMzYywgbWFya3MgdGhlIGxvYWRlcidzIGZsYXNobGVzc1xuKyAqIGNoaXAtdG8tY2hpcCBkb3dubG9hZCBtb2RlIChNeEw4NjI4MVMgMTYtcG9ydCB0aWVyKTsgdGhpcyBkcml2ZXIgZG9lcyBub3RcbisgKiB1c2UgaXQuXG4rICpcbisgKiBSZXNjdWUgbGlmZWN5Y2xlIChkZXZsaW5rKTogcHJvYmUgcnVucyBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKTsgYSB3ZWRnZWRcbisgKiBsb2FkZXIgaXMgZHJhaW5lZCBiYWNrIHRvIFJFQURZIGJ5IGEgYmFja2dyb3VuZCBzZWxmLWhlYWwgKHJlc2N1ZV9oZWFsX3dvcmspIHNvXG4rICogdGhlIG11bHRpLW1pbnV0ZSByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBkZXZsaW5rIGRldiBpbmZvXG4rICogZXhwb3NlcyB0aGUgZncgdmVyc2lvbiAodGhlIFwiZmxhc2hhYmxlXCIgc2lnbmFsKSBvbmx5IG9uY2UgYXQgUkVBRFk7XG4rICogZmxhc2hfdXBkYXRlIHJldHVybnMgLUVCVVNZIHVudGlsIHRoZW4sIGFuZCByZXByb2JlcyB0byBXU1AgZmlybXdhcmUgb24gc3VjY2Vzcy5cbisgKlxuKyAqIE5vdGVzOlxuKyAqICAgLSBDaGlwIGlkL3JldmlzaW9uICgweGMwZDI4ODg0Lzg4KSBhcmUgTk9UIHJlYWNoYWJsZSBvbiB0aGlzIGNoYW5uZWw7IHRoZXlcbisgKiAgICAgbmVlZCB0aGUgY2xhdXNlLTQ1IE1NRCBmaXJtd2FyZSBtYWlsYm94LCB3aGljaCBpcyBkZWFkIHVuZGVyIE1DVWJvb3QuXG4rICogICAgIFJlc2N1ZSBpZGVudGl0eSBpcyBieSBTQiBQREkgYmVoYXZpb3VyIG9ubHkgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkuXG4rICogICAtIFRoZSBTTURJTyBQSFkgYWRkcmVzcyBhbmQgdGhlIDB4ZTF4eCBvZmZzZXRzIGFyZSBPVFAtY29uZmlndXJhYmxlOyBkZXJpdmVcbisgKiAgICAgdGhlbSBmcm9tIHRoZSBEVCBiaW5kaW5nLCBkbyBub3QgYXNzdW1lIGZpeGVkIHZhbHVlcy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb3ZlcmZsb3cuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvc3dpdGNoZGV2LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcIm14bDg2Mnh4LmhcIlxuKyNpbmNsdWRlIFwibXhsODYyeHgtYXBpLmhcIlxuKyNpbmNsdWRlIFwibXhsODYyeHgtY21kLmhcIlxuKyNpbmNsdWRlIFwibXhsODYyeHgtZncuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1ob3N0LmhcIlxuK1xuKy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxcdFx0MHhlMTAwXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQUREUlx0XHQweGUxMDFcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBXHRcdDB4ZTEwMlxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVRcdFx0MHhlMTAzXG4rXG4rLyogU0IgUERJIENUUkwgbW9kZXMgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVFx0MHgwMFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfV1JcdFx0MHgwMlxuK1xuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKHB1Ymxpc2hlZC9jb25zdW1lZCB2aWEgU1RBVCkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRUFEWVx0XHQweGM1NWNcdC8qIGxvYWRlciBpZGxlLCBjb25zb2xlIGxvb3AgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9ETF9SRUFEWVx0MHhjMzNjXHQvKiBsb2FkZXIgaWRsZSwgZmxhc2hsZXNzIGxvb3AgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFSVFx0XHQweGY0OGZcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkRcdFx0MHgzY2MzXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkRSRUdcdFx0MHhlMmMwXHQvKiByZWdpc3Rlci1yZWFkIGNtZCAofCBpbmRleCkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLXHQweDdjMjNcdC8qIG1hcmtlciBwbGFjZWQgaW4gREFUQSBmb3IgUkRSRUcgKi9cbitcbisvKiBCZWhhdmlvdXJhbCBwcmVzZW5jZSBwcm9iZTogdHdvIGRpc3RpbmN0IDE2LWJpdCBsYXRjaGVzIG9uIEFERFIvREFUQS4gKi9cbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BXHRcdDB4NWE1YVxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0RcdFx0MHhhNWE1XG4rXG4rLyogRmlybXdhcmUgdHJhbnNmZXIgZ2VvbWV0cnkgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0hEUl9TSVpFXHRcdDIwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcdFx0MTYzODRcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0VcdFx0MzI3NjBcdC8qIHdvcmRzIHBlciBmdWxsIHNsaWNlICovXG4rI2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlx0XHQweDc4MDBcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cbitcbisvKiBUaW1lb3V0cyAoZ2VuZXJvdXMgdXBwZXIgYm91bmRzKSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1x0MzAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVNcdDUwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVNcdDMwMDAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1x0MTIwMDAwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVNcdDUwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVNcdDUwMFxuKyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMFxuK1xuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4rXHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbitcdFx0XHRcdCAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xuK31cbitcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBleHBlY3RlZCxcbitcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuK3tcbitcdGludCByZXQsIHZhbDtcbitcbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KG14bDg2Mnh4X3NtZGlvX3JlYWQsIHZhbCxcbitcdFx0XHRcdHZhbCBcdTAwM2MgMCB8fCAodTE2KXZhbCA9PSBleHBlY3RlZCxcbitcdFx0XHRcdDEwMDAwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4rXHRcdFx0XHRwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2Uoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4rXHRcdFx0XHQgICAgICAgdTMyIGRhdGFfd3JpdHRlbilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCBkYXRhX3dyaXR0ZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuK1x0XHRcdFx0ICB1MzIgZG9uZSwgdTMyIHRvdGFsKVxuK3tcbitcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuK31cbitcbisvKiBQb3N0LWZsYXNoIHJlcHJvYmUuIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIHJ1bnNcbisgKiBkZXRhY2hlZCBmcm9tIHByaXYsIG9uIG9ubHkgdGhlIGhlbGQgZGV2aWNlIHJlZmVyZW5jZS4gSXQgcnVucyBhcyBhIGt0aHJlYWRcbisgKiBzbyB0aGUgbW9kdWxlIHJlZmVyZW5jZSBjYW4gYmUgZHJvcHBlZCB3aXRoIG1vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdCgpLFxuKyAqIGZyb20gY29yZS1rZXJuZWwgY29kZSAtLSBhIHdvcmsgaXRlbSdzIHRyYWlsaW5nIG1vZHVsZV9wdXQoKSBjb3VsZCByZXR1cm5cbisgKiBpbnRvIG1vZHVsZSB0ZXh0IGEgcmFjaW5nIHJtbW9kIGhhcyBhbHJlYWR5IGZyZWVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgbXhsODYyeHhfcmVwcm9iZV90aHJlYWRfZm4odm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xuK1xuK1x0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVMpO1xuK1x0aWYgKGRldmljZV9yZXByb2JlKGRldikpXG4rXHRcdGRldl9lcnIoZGV2LCBcInJlcHJvYmUgZmFpbGVkXFxuXCIpO1xuK1x0cHV0X2RldmljZShkZXYpO1xuK1x0bW9kdWxlX3B1dF9hbmRfa3RocmVhZF9leGl0KDApO1xuK31cbitcbitzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmIHtcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuK1x0c3RydWN0IGRldmljZSAqZGV2O1xuK307XG4rXG4rLyogU3Bhd24gdGhlIHJlcHJvYmUga3RocmVhZCBmcm9tIHdvcmtxdWV1ZSBjb250ZXh0LCB3aGVyZSBrdGhyZWFkX2NyZWF0ZSgpXG4rICogY2Fubm90IHJldHVybiAtRUlOVFIgYXMgaXQgY2FuIGZyb20gdGhlIGRldmxpbmsgY2FsbGVyJ3MgY29udGV4dC5cbisgKi9cbitzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmZfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYgKmtvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX2tpY2tvZmYsIHdvcmspO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0ga28tXHUwMDNlZGV2O1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuK1xuK1x0a2ZyZWUoa28pO1xuK1x0dGFzayA9IGt0aHJlYWRfcnVuKG14bDg2Mnh4X3JlcHJvYmVfdGhyZWFkX2ZuLCBkZXYsIFwibXhsODYyeHgtcmVwcm9iZVwiKTtcbitcdGlmIChJU19FUlIodGFzaykpIHtcbitcdFx0ZGV2X2VycihkZXYsXG4rXHRcdFx0XCJyZXByb2JlIGt0aHJlYWQgZmFpbGVkICglcGUpOyByZWxvYWQgdGhlIGRyaXZlciB0byByZXN0b3JlIG9wZXJhdGlvblxcblwiLFxuK1x0XHRcdHRhc2spO1xuK1x0XHRwdXRfZGV2aWNlKGRldik7XG4rXHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuK1x0fVxuK31cbitcbisvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIHVwIGZyb250LCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQsIHNvIGFuXG4rICogYWxsb2NhdGlvbiBmYWlsdXJlIGFib3J0cyBjbGVhbmx5LiBUaGUgY2FsbGVyIGhvbGRzIGEgbW9kdWxlIGFuZCBhIGRldmljZVxuKyAqIHJlZmVyZW5jZTsgb25jZSB0aGUga2lja29mZiBpcyBzY2hlZHVsZWQgdGhlIHJlcHJvYmUga3RocmVhZCByZWxlYXNlcyBib3RoLlxuKyAqIFJldHVybnMgTlVMTCBvbiAtRU5PTUVNLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICpteGw4NjJ4eF9yZXByb2JlX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbitcbitcdGtvID0ga3phbGxvY19vYmooKmtvKTtcbitcdGlmICgha28pXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0a28tXHUwMDNlZGV2ID0gZGV2O1xuK1x0SU5JVF9XT1JLKFx1MDAyNmtvLVx1MDAzZXdvcmssIG14bDg2Mnh4X3JlcHJvYmVfa2lja29mZl9mbik7XG4rXHRyZXR1cm4ga287XG4rfVxuK1xuKy8qIEJ5dGUtY291bnQgb2YgZWFjaCBjaHVuayBmZWQgdG8gdGhlIGxvYWRlciBkdXJpbmcgZHJhaW4uIEl0IE1VU1QgYmUgMTogdGhlXG4rICogbG9hZGVyIG9ubHkgbGV0cyB1cyBvYnNlcnZlIFwiY291bnRlciA9PSAwXCIsIG5ldmVyIFwiY291bnRlciBcdTAwM2Mgc3RlcFwiLCBzbyBhbnlcbisgKiBzdGVwIFx1MDAzZSAxIGNhbiBzdWJ0cmFjdCBwYXN0IHplcm8sIHVuZGVyZmxvdyB0aGUgMzItYml0IGNvdW50ZXIgYW5kIHdlZGdlIHRoZVxuKyAqIGxvYWRlciBmb3IgfjJeMzIgbW9yZSBieXRlcyAoYSBzdGF0ZSBvbmx5IGEgcG93ZXIgY3ljbGUgY2xlYXJzKS4gU3RlcHBpbmcgYnlcbisgKiAxIHdhbGtzIHRoZSBjb3VudGVyIHRocm91Z2ggZXZlcnkgdmFsdWUgYW5kIGlzIGd1YXJhbnRlZWQgdG8gbGFuZCBvbiB6ZXJvXG4rICogd2hhdGV2ZXIgaXRzIChwb3NzaWJseSBvZGQpIHN0YXJ0LiBBIDEtYnl0ZSBjaHVuayBpcyBhIHBhdGggdGhlIGxvYWRlclxuKyAqIGFscmVhZHkgaGFuZGxlczogdGhlIG5vcm1hbCB0cmFuc2ZlciBlbmRzIHdpdGggYSBzaW5nbGUgdHJhaWxpbmcgYnl0ZSBmb3JcbisgKiBvZGQtc2l6ZWQgaW1hZ2VzIChzZWUgU3RlcCA2KS5cbisgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTXHQxXG4rXG4rLyogUG9sbCBTVEFUIHdoaWxlIGRyYWluaW5nIGEgc3R1Y2sgZG93bmxvYWQ6IDAgbWVhbnMgXCJmZWVkIHRoZSBuZXh0IGNodW5rXCIsXG4rICogUkVBRFkgbWVhbnMgdGhlIGxvYWRlciBsZWZ0IHRoZSByZWNlaXZlIGxvb3AgYW5kIHJlLWFybWVkIGl0cyBjb21tYW5kIGxvb3AsXG4rICogYW55dGhpbmcgZWxzZSBpcyBhIHRyYW5zaWVudCAodGhlIGNvdW50IGJlaW5nIGNvbnN1bWVkKSAtIEJVU1kgcGFzdCB0aGVcbisgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuXG4rICovXG4rZW51bSB7IE1YTDg2MlhYX0RSQUlOX0ZFRUQsIE1YTDg2MlhYX0RSQUlOX1JFQURZLCBNWEw4NjJYWF9EUkFJTl9CVVNZIH07XG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcbit7XG4rXHRpbnQgdmFsO1xuK1xuK1x0cmVhZF9wb2xsX3RpbWVvdXQobXhsODYyeHhfc21kaW9fcmVhZCwgdmFsLFxuK1x0XHRcdCAgdmFsIFx1MDAzYyAwIHx8ICh1MTYpdmFsID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSB8fFxuK1x0XHRcdCAgKHUxNil2YWwgPT0gMCxcbitcdFx0XHQgIDUwLCB0aW1lb3V0X21zICogMTAwMCwgZmFsc2UsXG4rXHRcdFx0ICBwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4rXHRpZiAodmFsIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gdmFsO1xuK1x0aWYgKCh1MTYpdmFsID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSlcbitcdFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX1JFQURZO1xuK1x0aWYgKCh1MTYpdmFsID09IDApXG4rXHRcdHJldHVybiBNWEw4NjJYWF9EUkFJTl9GRUVEO1xuK1x0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX0JVU1k7XG4rfVxuK1xuKy8qIFJlY292ZXIgYSBzd2l0Y2ggd2hvc2UgU0IgUERJIGRvd25sb2FkIHdhcyBpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgLSB0aGVcbisgKiBob3N0IGRpZWQgYWZ0ZXIgTUNVYm9vdCBiZWdhbiBlcmFzaW5nIGZsYXNoLCB3aGV0aGVyIGl0IGFib3J0ZWQgbWlkIGVyYXNlIG9yXG4rICogbWlkIGltYWdlLXdyaXRlLCBib3RoIGVuZCB1cCBpbiB0aGUgc2FtZSBwbGFjZTogdGhlIHBheWxvYWQgcmVjZWl2ZSBsb29wLlxuKyAqIFRoZXJlIHRoZSBsb2FkZXIgcHVibGlzaGVzIFNUQVQ9MCwgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHdyaXRlIGEgYnl0ZS1jb3VudFxuKyAqIHRvIFNUQVQsIERNQXMgdGhhdCBtYW55IGJ5dGVzIGFuZCBzdWJ0cmFjdHMgdGhlIGNvdW50IGZyb20gYSByZW1haW5pbmctYnl0ZXNcbisgKiBjb3VudGVyLCBsZWF2aW5nIHRoZSBsb29wIG9ubHkgd2hlbiB0aGUgY291bnRlciByZWFjaGVzIGV4YWN0bHkgemVyby4gVGhlXG4rICogaW1hZ2Ugc2l6ZSBkaWVkIHdpdGggdGhlIGhvc3QsIHNvIHdlIGZlZWQgc2luZ2xlLWJ5dGUgY2h1bmtzIChzZWVcbisgKiBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUykgdG8gd2FsayB0aGUgY291bnRlciB0byB6ZXJvIHdpdGhvdXQgdW5kZXJmbG93LFxuKyAqIHRoZW4gc2VuZCBFTkQuIFRoZSBsb2FkZXIgdmFsaWRhdGVzIHRoZSAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zXG4rICogUkVBRFksIG9yIGJvb3RzIGEgdmFsaWQgaW1hZ2UgdGhhdCBoYXBwZW5lZCB0byBzdXJ2aXZlIGluIGZsYXNoLiBUaGlzIG9ubHlcbisgKiBmaW5hbGlzZXMgdGhlIHRyYW5zZmVyOyB0aGUgY2FsbGVyJ3MgcmVwcm9iZSBjbGFzc2lmaWVzIHdoaWNoZXZlciBzdGF0ZVxuKyAqIHJlc3VsdHMuIFJldHVybnMgMCBvbmNlIGZpbmFsaXNlZCwgXHUwMDNjMCBvbiBlcnJvci4gRG9lcyBOT1QgcmVjb3ZlciBhIGNvdW50ZXJcbisgKiBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGFcbisgKiBwb3dlciBjeWNsZS5cbisgKi9cbitzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuK1x0LyogQm91bmQ6IHR3aWNlIHRoZSBsb2FkZXIncyAxNiBNaUIgaW1hZ2UgY2FwLCBvbmUgYnl0ZSBwZXIgY2h1bmsuICovXG4rXHR1MzIgbWF4X2NodW5rcyA9IDJ1ICogKDE2dSBcdTAwM2NcdTAwM2MgMjApIC8gTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVM7XG4rXHR1MzIgY2h1bmsgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdGRldl93YXJuKGRldiwgXCJmbGFzaDogZHJhaW5pbmcgaW50ZXJydXB0ZWQgZG93bmxvYWRcXG5cIik7XG4rXG4rXHR3aGlsZSAoY2h1bmsgXHUwMDNjIG1heF9jaHVua3MpIHtcbitcdFx0LyogVGVhcmRvd24gY2FuIGludGVycnVwdCB0aGlzIG1pbnV0ZXMtbG9uZyBkcmFpbi4gKi9cbitcdFx0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbitcdFx0XHRyZXR1cm4gLUVDQU5DRUxFRDtcbitcbitcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9SRUFEWSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9CVVNZKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBGZWVkIG9uZSB6ZXJvIGJ5dGU7IHJlc2V0IGNsZWFyZWQgdGhlIHdyaXRlIGxhdGNoLiAqL1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHRcdFx0ICAgTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGNodW5rKys7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1xuK1x0aWYgKGNodW5rIFx1MDAzZT0gbWF4X2NodW5rcykge1xuK1x0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcImZsYXNoOiBpbnRlcnJ1cHRlZCBkb3dubG9hZCBkaWQgbm90IGRyYWluIGFmdGVyICV1IGNodW5rc1xcblwiLFxuK1x0XHRcdGNodW5rKTtcbitcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIExldCB0aGUgbG9hZGVyIHZhbGlkYXRlIGFuZCByZS1hcm0gUkVBRFksIG9yIGJvb3QgYSBzdXJ2aXZpbmcgaW1hZ2U7XG4rXHQgKiB0aGUgY2FsbGVyJ3MgcmVwcm9iZSB0aGVuIGNsYXNzaWZpZXMgd2hpY2hldmVyIHN0YXRlIHJlc3VsdHMuXG4rXHQgKi9cbitcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBvZmYgdGhlIGRldmxpbmsgZmxhc2ggcGF0aCwgc29cbisgKiB0aGUgbWludXRlcy1sb25nIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suIFNjaGVkdWxlZCBmcm9tIHByb2JlO1xuKyAqIHJlcHJvYmVzIG9uIHN1Y2Nlc3Mgc28gdGhlIHByb2JlLXRpbWUgZGV0ZWN0aW9uIHJlLWNsYXNzaWZpZXMgdGhlIHN3aXRjaC5cbisgKi9cbit2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9wcml2LCByZXNjdWVfaGVhbF93b3JrKTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbitcdGludCByZXQ7XG4rXG4rXHRkZXZfaW5mbyhkZXYsIFwicmVjb3ZlcmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZCBpbiBiYWNrZ3JvdW5kXFxuXCIpO1xuK1x0cmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpO1xuK1x0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogVGhlIGludGVycnVwdGVkIHRyYW5zZmVyIGlzIGZpbmFsaXNlZDsgcmVwcm9iZSBzbyB0aGUgcHJvYmUtdGltZVxuK1x0ICogZGV0ZWN0aW9uIGJyaW5ncyB0aGUgZHJpdmVyIHVwIC0tIGZsYXNoYWJsZSBpbiByZXNjdWUgbW9kZSBpZiB0aGVcbitcdCAqIGxvYWRlciBpcyBhdCBSRUFEWSwgb3Igbm9ybWFsbHkgaWYgYSB2YWxpZCBpbWFnZSBib290ZWQuIFRoZSByZWZzXG4rXHQgKiBhcmUgcmVsZWFzZWQgYnkgdGhlIHJlcHJvYmUgb25jZSBpdCBjb21wbGV0ZXMuXG4rXHQgKi9cbitcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuK1x0XHRyZXR1cm47XG4rXHRnZXRfZGV2aWNlKGRldik7XG4rXHRrbyA9IG14bDg2Mnh4X3JlcHJvYmVfYWxsb2MoZGV2KTtcbitcdGlmICgha28pIHtcbitcdFx0cHV0X2RldmljZShkZXYpO1xuK1x0XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0c2NoZWR1bGVfd29yayhcdTAwMjZrby1cdTAwM2V3b3JrKTtcbit9XG4rXG4rLyogRGV0ZWN0IE1DVWJvb3QgcmVzY3VlIG1vZGUgb3ZlciBjbGF1c2UtMjIgU01ESU8gYWxvbmUsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1bGVcbisgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUFxuKyAqIGZpcm13YXJlIGFuc3dlcnMpLiBBIHNjcmF0Y2ggd3JpdGUgdG8gQUREUi9EQVRBIG11c3QgbGF0Y2ggb3IgdGhlIGNoaXAgaXNcbisgKiBhYnNlbnQgKC1FTk9ERVYpOyBTVEFUIHRoZW4gY2xhc3NpZmllcyB0aGUgc3RhdGUsIHBva2VkIGRlc3RydWN0aXZlbHkgb25seVxuKyAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6XG4rICpcbisgKiAgLSAweGMzM2M6IGZsYXNobGVzcyBsb29wLCByZWFkeS5cbisgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLlxuKyAqICAtIG90aGVyIG5vbi16ZXJvOiBydW5uaW5nIGZpcm13YXJlLCBsZWZ0IHVucG9rZWQuXG4rICogIC0gMDogd2VkZ2VkIHJlY2VpdmUgbG9vcCwgaWYgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBkcmFpbnMgYmFjayB0byAwLlxuKyAqXG4rICogUmV0dXJuOiBNWEw4NjJYWF9JTl9SRVNDVUUsIE1YTDg2MlhYX05PVF9SRVNDVUUsIG9yIG5lZ2F0aXZlICgtRU5PREVWL1NNRElPKS5cbisgKi9cbitpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuK3tcbitcdGludCBzdGF0LCBkYXQsIHJldCwgcmIsIGEsIGQ7XG4rXG4rXHQvKiByZXNjdWVfcmVhZHkgZ2F0ZXMgZmxhc2hpbmc7IGEgd2VkZ2VkIGxvYWRlciBuZWVkcyB0aGUgZHJhaW4gZmlyc3QuICovXG4rXHRwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSA9IGZhbHNlO1xuK1xuK1x0LyogUHJlc2VuY2U6IGEgbGl2ZSBjaGlwIGxhdGNoZXMgdGhlIHNjcmF0Y2ggd3JpdGUsIGFuIGFic2VudCBvbmUgZmxvYXRzLiAqL1xuK1x0YSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuK1x0XHRcdFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTtcbitcdGlmIChhIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gYTtcbitcdGQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbitcdFx0XHRcdCBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCk7XG4rXHRpZiAoZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGQ7XG4rXHRhID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUik7XG4rXHRpZiAoYSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGE7XG4rXHRkID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XG4rXHRpZiAoZCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGQ7XG4rXHRpZiAoKHUxNilhICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BIHx8XG4rXHQgICAgKHUxNilkICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzdGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4rXHRpZiAoc3RhdCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHN0YXQ7XG4rXG4rXHQvKiBGbGFzaGxlc3MtZG93bmxvYWQgbG9vcCAoTXhMODYyODFTIHRpZXIpOiB0aGlzIGRyaXZlciBkb2VzIG5vdFxuK1x0ICogc3VwcG9ydCBpdCAtLSB0aGUgY29uc29sZSBmbGFzaCBwYXRoIGV4cGVjdHMgUkVBRFkuIFRyZWF0IGl0IGFzIGFuXG4rXHQgKiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLCBsaWtlIGFueSBvdGhlciB1bnN1cHBvcnRlZCBzdGF0ZS5cbitcdCAqL1xuK1x0aWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFkpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0LyogQ29uc29sZSBsb29wIGF0IFJFQURZOiBjb25maXJtIHRoZSBsaXZlIG1haWxib3ggd2l0aCB0aGUgcmVnaXN0ZXItcmVhZFxuK1x0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXG4rXHQgKi9cbitcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKSB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuK1x0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9SRFJFRyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcbitcdFx0XHRcdFx0ICAgICAgIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbitcdFx0ZGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XG4rXHRcdGlmIChkYXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIGRhdDtcbitcdFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuK1x0XHRpZiAoIXJiIFx1MDAyNlx1MDAyNiAodTE2KWRhdCAhPSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSykge1xuK1x0XHRcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gdHJ1ZTtcbitcdFx0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuK1x0XHR9XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0LyogQW55IG90aGVyIG5vbi16ZXJvIHZhbHVlIGlzIGEgcnVubmluZyBmaXJtd2FyZSwgbm90IGEgbG9hZGVyLiAqL1xuK1x0aWYgKHN0YXQpXG4rXHRcdHJldHVybiBNWEw4NjJYWF9OT1RfUkVTQ1VFO1xuK1xuK1x0LyogU1RBVCA9PSAwOiBhIHdlZGdlZCByZWNlaXZlIGxvb3AgY29uc3VtZXMgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBiYWNrXG4rXHQgKiB0byAwIChmZWVkIG9uZSBEQVRBIHdvcmQgZmlyc3QsIGxpa2UgYSBkcmFpbiBjaHVuaykuXG4rXHQgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbitcdGlmICghcmIpXG4rXHRcdHJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7XG4rXG4rXHRyZXR1cm4gLUVOT0RFVjtcbit9XG4rXG4rLyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbitzdHJ1Y3QgbXhsODYyeHhfZndfaGRyIHtcbitcdF9fbGUzMiBpbWFnZV90eXBlO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMTtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8xO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMjtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4rXHRcdFx0XHQgICB1MzIgKnBheWxvYWRfc2l6ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7XG4rXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcbitcdGNvbnN0IHU4ICpwYXlsb2FkO1xuK1x0dTMyIGNyYztcbitcbitcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4rXHRwYXlsb2FkID0gZnctXHUwMDNlZGF0YSArIE1YTDg2MlhYX0ZXX0hEUl9TSVpFO1xuK1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbitcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX3NpemVfMik7XG4rXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4rXHQgICAgdG90YWwgXHUwMDNlIGZ3LVx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCF0b3RhbCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHNpemUxKSB7XG4rXHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChzaXplMikge1xuK1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICsgc2l6ZTEsIHNpemUyKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAyIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbitcdFx0XHRcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcbit7XG4rXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcbitcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gamlmZmllcyAtIDE7XG4rXHR1MTYgd29yZCwgZmRhdGE7XG4rXHRpbnQgcmV0LCBpO1xuK1xuK1x0LyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqL1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcbitcdFx0XHRcdFx0ZmFsc2UsIGZhbHNlKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFwiZmxhc2g6IEZXX1VQREFURSBjb21tYW5kIGZhaWxlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIldhaXRpbmcgZm9yIGJvb3Rsb2FkZXJcIiwgMCwgMCk7XG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdC8qIEZhaWx1cmVzIGZyb20gaGVyZSBvbiBtdXN0IGdvIHRocm91Z2ggZW5kX21hZ2ljIHNvIE1DVWJvb3RcbitcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4rXHQgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDM6IHN0YXJ0IGhhbmRzaGFrZSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfU1RBUlQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFSVCArIDEsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IHN0YXJ0IGhhbmRzaGFrZSBmYWlsZWQ6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRnb3RvIGVuZF9tYWdpYztcbitcdH1cbitcbitcdC8qIFN0ZXAgNDogdHJhbnNmZXIgaW1hZ2UgaGVhZGVyICovXG4rXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFwiRXJhc2luZyBmbGFzaFwiLCAwLCAwKTtcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkrKykge1xuK1x0XHR3b3JkID0gZnctXHUwMDNlZGF0YVtpICogMl0gfFxuK1x0XHQgICAgICAgKCh1MTYpZnctXHUwMDNlZGF0YVtpICogMiArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHQvKiB0aGUgYnl0ZSBjb3VudCBpbiBTVEFUIHRyaWdnZXJzIHRoZSBlcmFzZSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHQgICBNWEw4NjJYWF9GV19IRFJfU0laRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdC8qIEFDSyBpcyBieXRlIGNvdW50ICsgMSAqL1xuK1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9GV19IRFJfU0laRSArIDEsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0Z290byBlbmRfbWFnaWM7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0fVxuK1xuK1x0LyogU3RlcCA2OiB0cmFuc2ZlciBwYXlsb2FkICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0d2hpbGUgKGlkeCBcdTAwM2MgcGF5bG9hZF9zaXplKSB7XG4rXHRcdGlmIChpZHggKyAxIFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcbitcdFx0XHRmZGF0YSA9IHBheWxvYWRbaWR4XSB8XG4rXHRcdFx0XHQoKHUxNilwYXlsb2FkW2lkeCArIDFdIFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0XHRpZHggKz0gMjtcbitcdFx0XHRkYXRhX3dyaXR0ZW4gKz0gMjtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRmZGF0YSA9IHBheWxvYWRbaWR4XTtcbitcdFx0XHRpZHgrKztcbitcdFx0XHRkYXRhX3dyaXR0ZW4rKztcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgZmRhdGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1x0XHR3b3JkX2lkeCsrO1xuK1xuK1x0XHRpZiAoaWR4IFx1MDAzZT0gcGF5bG9hZF9zaXplKSB7XG4rXHRcdFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0LyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi9cbitcdFx0aWYgKHdvcmRfaWR4ID09IE1YTDg2MlhYX0ZXX0JBTktfSEFMRikge1xuK1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuK1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX0ZXX1NCMV9BRERSKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIHdyaXRlX2VycjtcbitcdFx0fSBlbHNlIGlmICh3b3JkX2lkeCBcdTAwM2U9IE1YTDg2MlhYX0ZXX0JBTktfU0xJQ0UpIHtcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbitcdFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFwiZmxhc2g6IHdyaXRlIHRpbWVvdXQgYXQgJXUvJXU6ICVwZVxcblwiLFxuK1x0XHRcdFx0XHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcbitcdFx0XHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0XHRcdH1cbitcdFx0XHR3b3JkX2lkeCA9IDA7XG4rXHRcdFx0ZGF0YV93cml0dGVuID0gMDtcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0XHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkge1xuK1x0XHRcdFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIkZsYXNoaW5nXCIsIGlkeCxcbitcdFx0XHRcdFx0XHQgICAgICBwYXlsb2FkX3NpemUpO1xuK1x0XHRcdFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdGdvdG8gZW5kX21hZ2ljO1xuK1x0fVxuK1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIkZsYXNoaW5nXCIsIHBheWxvYWRfc2l6ZSwgcGF5bG9hZF9zaXplKTtcbitcdGdvdG8gZW5kX21hZ2ljO1xuK1xuK3dyaXRlX2VycjpcbitcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldiwgXCJmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcXG5cIixcbitcdFx0RVJSX1BUUihyZXQpKTtcbitlbmRfbWFnaWM6XG4rXHQvKiByZWJvb3QgTUNVYm9vdCBldmVuIGFmdGVyIGEgZmFpbGVkIHRyYW5zZmVyICovXG4rXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHQgICAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xuK1x0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0ICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1x0Y2hhciBidWZbMTZdO1xuK1x0aW50IHJldDtcbitcbitcdC8qIE5vIGNoaXAtaWQvcmV2aXNpb24gaW4gTUNVYm9vdCAobmVlZHMgdGhlIGZpcm13YXJlIE1NRCBtYWlsYm94KS4gVGhlXG4rXHQgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlIFwicmVhZHkgdG8gZmxhc2hcIiBzaWduYWw6IHJlcG9ydCBpdCBvbmx5XG4rXHQgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbitcdFx0aWYgKCFSRUFEX09OQ0UocHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkpKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiV1LiV1LiV1XCIsXG4rXHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuK1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwiZndcIiwgYnVmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dChyZXEsIFwiZndcIiwgYnVmKTtcbitcdH1cbitcbitcdC8qIEEgMCBwYXJ0IG51bWJlciBtZWFucyB0aGUgQ0hJUCBJRCByZWFkIGZhaWxlZCBvciB0aGUgcGFydCBpc1xuK1x0ICogdW5mdXNlZDsgb21pdCBpdCByYXRoZXIgdGhhbiBwdWJsaXNoIGEgYm9ndXMgXCIwMDAwXCIgdGhhdCBmd3VwZFxuK1x0ICogd291bGQgbWF0Y2ggZmlybXdhcmUgYWdhaW5zdCAtLSBpdCB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlIGRyaXZlclxuK1x0ICogbmFtZS5cbitcdCAqL1xuK1x0aWYgKHByaXYtXHUwMDNlYXNpY19pZCkge1xuK1x0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiUwNFhcIiwgcHJpdi1cdTAwM2Vhc2ljX2lkKTtcbitcdFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcbitcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbitcdFx0XHRcdFx0XHQgICAgIGJ1Zik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldVwiLCBwcml2LVx1MDAzZWFzaWNfcmV2KTtcbitcdFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcbitcdFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19SRVYsXG4rXHRcdFx0XHRcdFx0ICAgICBidWYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiV1LiV1LiV1XCIsXG4rXHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbitcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4rXG4rXHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwiZndcIiwgYnVmKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi9cbitcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0KHJlcSwgXCJmd1wiLCBidWYpO1xuK31cbitcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV9raWNrb2ZmICprbztcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1MzIgcGF5bG9hZF9zaXplO1xuK1x0aW50IHJldCwgaTtcbitcbitcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiY29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHByaXYsIHBhcmFtcy1cdTAwM2VmdywgXHUwMDI2cGF5bG9hZF9zaXplKTtcbitcdGlmIChyZXQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJmaXJtd2FyZSBpbWFnZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdC8qIFJlZnVzZSB0byBmbGFzaCB3aGlsZSB0aGUgYmFja2dyb3VuZCBzZWxmLWhlYWwgaXMgc3RpbGwgZHJhaW5pbmcuICovXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSBcdTAwMjZcdTAwMjYgIVJFQURfT05DRShwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwic3dpdGNoIGlzIHJlY292ZXJpbmcgYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJldHJ5IHNob3J0bHlcIik7XG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXHR9XG4rXG4rXHQvKiBUaGUgcmVmZXJlbmNlcyB0aGUgcmVwcm9iZSB3b3JrIG5lZWRzIHRvIHJlc3RvcmUgbm9ybWFsIG9wZXJhdGlvblxuK1x0ICogbXVzdCBiZSBoZWxkIGJlZm9yZSB0aGUgc3dpdGNoIGlzIGRpc3R1cmJlZDsgdGhlIHdvcmsgaXRzZWxmIGlzXG4rXHQgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLlxuK1x0ICovXG4rXHRpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRnZXRfZGV2aWNlKGRzLVx1MDAzZWRldik7XG4rXG4rXHQvKiBBbGxvY2F0ZSB0aGUgcmVwcm9iZSBraWNrb2ZmIGJlZm9yZSBkaXN0dXJiaW5nIHRoZSBzd2l0Y2gsIHNvIGFuXG4rXHQgKiAtRU5PTUVNIGhlcmUgY2Fubm90IHN0cmFuZCBpdCBmbGFzaGVkIGJ1dCBuZXZlciByZXByb2JlZC5cbitcdCAqL1xuK1x0a28gPSBteGw4NjJ4eF9yZXByb2JlX2FsbG9jKGRzLVx1MDAzZWRldik7XG4rXHRpZiAoIWtvKSB7XG4rXHRcdHB1dF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbitcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldixcbitcdFx0XHQgXCJmbGFzaDogZmxhc2hpbmcgc3dpdGNoIHZpYSBNQ1Vib290IHJlc2N1ZSBtb2RlXFxuXCIpO1xuK1x0ZWxzZVxuK1x0XHRkZXZfaW5mbyhkcy1cdTAwM2VkZXYsIFwiZmxhc2g6IHJ1bm5pbmcgZmlybXdhcmUgJXUuJXUuJXVcXG5cIixcbitcdFx0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWlub3IsXG4rXHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4rXG4rXHQvKiBDbG9zZSBwb3J0cyB3aGlsZSB0aGUgZmlybXdhcmUgaXMgc3RpbGwgYWxpdmUgc28gdGhlIERTQVxuK1x0ICogY29yZSdzIE1EQi9GREIgdHJhY2tpbmcgaXMgZHJhaW5lZCwgYW5kIGRldGFjaCB1c2VyIHBvcnRzXG4rXHQgKiBzbyB1c2Vyc3BhY2UgY2Fubm90IHJlb3BlbiB0aGVtIGR1cmluZyB0aGUgZmxhc2guIFRoZVxuK1x0ICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC5cbitcdCAqL1xuK1x0cnRubF9sb2NrKCk7XG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbitcdFx0aWYgKGRwLVx1MDAzZXVzZXIpIHtcbitcdFx0XHRkZXZfY2xvc2UoZHAtXHUwMDNldXNlcik7XG4rXHRcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChkcC1cdTAwM2V1c2VyKTtcbitcdFx0fVxuK1x0fVxuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpXG4rXHRcdGRldl9jbG9zZShkcC1cdTAwM2Vjb25kdWl0KTtcbitcdC8qIFRoZSBicmlkZ2UgZGVmZXJzIHRoZSBTVFAgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgY2xvc2luZ1xuK1x0ICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuXG4rXHQgKi9cbitcdHN3aXRjaGRldl9kZWZlcnJlZF9wcm9jZXNzKCk7XG4rXHRydG5sX3VubG9jaygpO1xuK1xuK1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcbitcdHByaXYtXHUwMDNlYmxvY2tfaG9zdCA9IHRydWU7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1xuK1x0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncyk7XG4rXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VzdGF0c193b3JrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmspO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpKyspXG4rXHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspO1xuK1xuK1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfZmlybXdhcmUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBwYXlsb2FkX3NpemUsXG4rXHRcdFx0XHQgICAgICBkcy1cdTAwM2VkZXZsaW5rKTtcbitcdGlmIChyZXQpXG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXCIpO1xuK1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2ssXG4rXHRcdFx0XHQgIE1ESU9fTVVURVhfTkVTVEVEKTtcbitcdFx0cHJpdi1cdTAwM2VibG9ja19ob3N0ID0gZmFsc2U7XG4rXHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBmYWxzZTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdFx0LyogUmVmcmVzaCB0aGUgY2FjaGVkIHZlcnNpb25zIHNvIHRoZSBmbGFzaCB1cGRhdGUgb25seVxuK1x0XHQgKiBjb21wbGV0ZXMgb25jZSB0aGUgbmV3IGZpcm13YXJlIGlzIGNvbmZpcm1lZCBydW5uaW5nIGFuZFxuK1x0XHQgKiBkZXZsaW5rIGRldiBpbmZvIHJlcG9ydHMgaXQuIE11c3QgaGFwcGVuIGJlZm9yZSBzZXR0aW5nXG4rXHRcdCAqIHNraXBfdGVhcmRvd24sIHdoaWNoIGRpc2NhcmRzIGFsbCBmaXJtd2FyZSBBUEkgcmVhZHMuXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICBcIm5ldyBmaXJtd2FyZSBkaWQgbm90IGJlY29tZSByZWFkeVwiKTtcbitcdH1cbitcbitcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4rXHRwcml2LVx1MDAzZXNraXBfdGVhcmRvd24gPSB0cnVlO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdC8qIEtpY2sgb2ZmIHRoZSByZXByb2JlIGxhc3Q7IHRoZSBraWNrb2ZmIHdhcyBhbGxvY2F0ZWQgdXAgZnJvbnQgYW5kXG4rXHQgKiBpdHMgbW9kdWxlIGFuZCBkZXZpY2UgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLlxuK1x0ICovXG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmtvLVx1MDAzZXdvcmspO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgKzEsMjAgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuK1xuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXG4rI2RlZmluZSBfX01YTDg2MlhYX0ZXX0hcbitcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbitcbitzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbitzdHJ1Y3Qgd29ya19zdHJ1Y3Q7XG4rXG4raW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4rdm9pZCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXG4rI2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uMmRiZDA3NGMwZmUyNmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiArMTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWNtZC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWZ3LmhcIlxuICNpbmNsdWRlIFwibXhsODYyeHgtaG9zdC5oXCJcbiBcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXHRcdFx0QklUKDE1KVxuQEAgLTM0MCw2ICszNDIsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSxcbiBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4gXG4rXHRpZiAocHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duKSB7XG4rXHRcdHJldCA9IHJlYWQgPyAtRU5PREVWIDogMDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZWJsb2NrX2hvc3QgXHUwMDI2XHUwMDI2IGNtZCAhPSBTWVNfTUlTQ19GV19VUERBVEUpIHtcbitcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdG1heCA9IChzaXplICsgMSkgLyAyO1xuIFxuIFx0cmV0ID0gbXhsODYyeHhfYnVzeV93YWl0KHByaXYpO1xuQEAgLTQ5NSwxMiArNTEyLDQ5IEBAIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUdcdFx0MHgxZlxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLXHQweGZmZjBcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXHRcdDB4MDAwZlxuK1xuK2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcilcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcbitcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0aW50IHBoeSA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuK1x0XHRcdCAgICAgIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyxcbitcdFx0XHRcdCAgICAgIHZhbCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiB7XG4gXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmssIG14bDg2Mnh4X2NyY19lcnJfd29ya19mbik7XG4rXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VyZXNjdWVfaGVhbF93b3JrLCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKTtcbiB9XG4gXG4gdm9pZCBteGw4NjJ4eF9ob3N0X3NodXRkb3duKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIHtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmspO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgKzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSxcbiBcdG14bDg2Mnh4X2FwaV93cmFwKGRldiwgY21kLCBcdTAwMjYoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKVxuIFxuIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4raW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKTtcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICs0MDYsOCBAQCBteGw4NjJ4eF9waHlsaW5rX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFxuIFx0c3dpdGNoIChwb3J0KSB7XG4gXHRjYXNlIDkgLi4uIDE2OlxuK1x0XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCJTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuaW5kZXggNDVkMjM3YjNhNDBmMTAuLjhkMjE3NDdjZGYxNWUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFwibXhsODYyeHguaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1hcGkuaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1jbWQuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1mdy5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1waHlsaW5rLmhcIlxuIFxuQEAgLTcxLDYgKzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXhsODYyeHhfcm1vbl9yYW5nZXNbXSA9IHtcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1RJTUVPVVRfTVNcdDEwMDAwXG4gI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9QT0xMX01TXHRcdDEwMFxuIFxuKy8qIENoaXAgSUQgcmVnaXN0ZXJzLCByZWFkIHZpYSBTWVNfTUlTQ19SRUdfUkQgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MXHRcdDB4YzBkMjg4ODRcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NXHRcdDB4YzBkMjg4ODhcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MXHRcdEdFTk1BU0soMTUsIDEyKVxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fUE5VTU1cdFx0R0VOTUFTSygxMSwgMClcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT05cdEdFTk1BU0soMTQsIDEyKVxuK1xuICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMXHRcdDB4ZTAwXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTXHRcdDB4ZTEyXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTXHRcdDB4ZTEzXG5AQCAtMjIyLDcgKzIzMCw0NiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BoeV93cml0ZV9jNDVfbWlpX2J1cyhzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcixcbiBcdHJldHVybiBteGw4NjJ4eF9waHlfd3JpdGVfbW1kKGJ1cy1cdTAwM2Vwcml2LCBhZGRyLCBkZXZhZGQsIHJlZ251bSwgdmFsKTtcbiB9XG4gXG4tc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbisvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElEXG4rICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZVxuKyAqIGNhY2hlZCBhdCBzZXR1cCBhbmQgbGVmdCB6ZXJvIHdoZW4gdGhlIHN3aXRjaCBpcyBpbiByZXNjdWUgbW9kZS5cbisgKi9cbitzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyByZWcgPSB7fTtcbitcdHUxNiBjaGlwaWRfbCwgY2hpcGlkX207XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTCk7XG4rXHRyZXQgPSBNWEw4NjJYWF9BUElfUkVBRChwcml2LCBTWVNfTUlTQ19SRUdfUkQsIHJlZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0Y2hpcGlkX2wgPSBsZTMyX3RvX2NwdShyZWcudmFsKTtcbitcbitcdHJlZy5hZGRyID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfQ0hJUElEX00pO1xuK1x0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdGNoaXBpZF9tID0gbGUzMl90b19jcHUocmVnLnZhbCk7XG4rXG4rXHRwcml2LVx1MDAzZWFzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8XG4rXHRcdFx0RklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NLCBjaGlwaWRfbSkgXHUwMDNjXHUwMDNjIDQ7XG4rXHRwcml2LVx1MDAzZWFzaWNfcmV2ID0gRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT04sIGNoaXBpZF9tKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBteGw4NjJ4eF93YWl0X3JlYWR5IC0gd2FpdCBmb3IgdGhlIHN3aXRjaCBmaXJtd2FyZSB0byBiZWNvbWUgb3BlcmF0aW9uYWxcbisgKiBAZHM6IERTQSBzd2l0Y2ggaW5zdGFuY2VcbisgKlxuKyAqIFBvbGwgdGhlIGZpcm13YXJlIHVudGlsIGl0IHJlcG9ydHMgaXRzIHZlcnNpb24gYW5kIGFjY2VwdHNcbisgKiBjb25maWd1cmF0aW9uIGNvbW1hbmRzLCB0aGVuIGNhY2hlIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjaGlwIElELlxuKyAqIFRha2VzIGF0IGxlYXN0IHR3byBzZWNvbmRzLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLlxuKyAqL1xuK2ludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gdmVyID0ge307XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcywgdGltZW91dDtcbkBAIC0yNTQsNiArMzAxLDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciA9IHZlci5pdl9tYWpvcjtcbiBcdFx0cHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yID0gdmVyLml2X21pbm9yO1xuIFx0XHRwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24gPSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pO1xuK1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9yZWFkX2NoaXBfaWQocHJpdik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0ZGV2X3dhcm4oZHMtXHUwMDNlZGV2LCBcImZhaWxlZCB0byByZWFkIGNoaXAgSUQ6ICVwZVxcblwiLFxuK1x0XHRcdFx0IEVSUl9QVFIocmV0KSk7XG4gXHRcdHJldHVybiAwO1xuIFxuIG5vdF9yZWFkeV95ZXQ6XG5AQCAtNjIyLDE1ICs2NzQsNDkgQEAgc3RhdGljIGludCBteGw4NjJ4eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRpbnQgbl91c2VyX3BvcnRzID0gMCwgbWF4X3ZsYW5zO1xuIFx0aW50IGluZ3Jlc3NfZmluYWxzLCB2aWRfcnVsZXM7XG4gXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuLVx0aW50IHJldCwgaTtcbitcdGludCByZXQsIGksIHJlc2N1ZTtcbiBcbi1cdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdC8qIERldGVjdCB0aGUgbG9hZGVyIG92ZXIgU0IgUERJIGZpcnN0OiBpdCBuZWVkcyBubyBmaXJtd2FyZSwgdW5saWtlIHRoZVxuK1x0ICogQzQ1IEFQSSAobXhsODYyeHhfcmVzZXQvd2FpdF9yZWFkeSkgd2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vbmVcbitcdCAqIGFuc3dlcnMuIFRvdWNoIEM0NSBvbmx5IG9uY2UgcmVzY3VlIGlzIHJ1bGVkIG91dC5cbitcdCAqL1xuK1x0cmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xuK1x0aWYgKHJlc2N1ZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJlc2N1ZTtcbiBcbi1cdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdGlmIChyZXNjdWUgPT0gTVhMODYyWFhfTk9UX1JFU0NVRSkge1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdC8qIHRoZSByZXNldCBtYXkgb25seSBub3cgaGF2ZSB0cmlnZ2VyZWQgcmVzY3VlIG1vZGUgKi9cbitcdFx0XHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4rXHRcdFx0aWYgKHJlc2N1ZSBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXNjdWU7XG4rXHRcdFx0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IHJlc2N1ZTtcbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSkge1xuK1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbitcdFx0XHRcdCBcInN3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cIik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogRHJhaW4gdGhlIHdlZGdlZCBkb3dubG9hZCBpbiB0aGUgYmFja2dyb3VuZCBzbyBpdFxuK1x0XHRcdCAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZVxuK1x0XHRcdCAqIGF2YWlsYWJsZSBvbmNlIHJlYWR5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbitcdFx0XHRcdCBcInN3aXRjaCBpbiBNQ1Vib290IHdpdGggYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJlY292ZXJpbmcgaW4gYmFja2dyb3VuZFxcblwiKTtcbitcdFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuK1x0XHR9XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNlcmRlc19sb2NrKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpKyspXG5AQCAtNzE1LDExICs4MDEsMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKVxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0cmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4rXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSlcbiBcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAlZFxcblwiLCBwb3J0KTtcbiB9XG5AQCAtMTMzNyw2ICsxNDMzLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIFx0Ym9vbCBpc19jcHVfcG9ydCA9IGRzYV9wb3J0X2lzX2NwdShkcCk7XG4gXHRpbnQgcmV0O1xuIFxuK1x0LyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdFxuK1x0ICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuXG4rXHQgKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDtcbitcbiBcdHJldCA9IG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtMTU3Miw2ICsxNjc0LDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRldGhlcl9hZGRyX2NvcHkocXBhcmFtLm1hYywgbWRiLVx1MDAzZWFkZHIpO1xuIFxuIFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgTVhMODYyWFhfTUFDX1RBQkxFRU5UUllRVUVSWSwgcXBhcmFtKTtcbitcdC8qIC1FTk9ERVY6IHRoZSBmaXJtd2FyZSBhbmQgaXRzIE1BQyB0YWJsZSBhcmUgZ29uZSwgbm90aGluZyBsZWZ0XG4rXHQgKiB0byBkZWxldGVcbitcdCAqL1xuK1x0aWYgKHJldCA9PSAtRU5PREVWKVxuK1x0XHRyZXR1cm4gMDtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMTYyOCw2ICsxNzM1LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybjtcbitcbiBcdHN3aXRjaCAoc3RhdGUpIHtcbiBcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XG4gXHRcdHBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTtcbkBAIC0yMDE1LDYgKzIxMjUsMTIgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfc3RhdHNfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBwcml2LVx1MDAzZWRzO1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiBcbitcdC8qIEEgZ2V0X3N0YXRzNjQoKSByZS1hcm0gY2FuIHJhY2UgdGhlIGZsYXNoIHRlYXJkb3duJ3MgV09SS19TVE9QUEVEXG4rXHQgKiBzZXQgYW5kIGNhbmNlbDsgYmFpbCBoZXJlIHNvIGEgc3RyYXkgcG9sbCBuZXZlciBydW5zIGR1cmluZyBhIGZsYXNoLlxuK1x0ICovXG4rXHRpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2F2YWlsYWJsZV9wb3J0KGRwLCBkcylcbiBcdFx0bXhsODYyeHhfc3RhdHNfcG9sbChkcywgZHAtXHUwMDNlaW5kZXgpO1xuIFxuQEAgLTIwODYsNiArMjIwMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHtcbiBcdC5nZXRfcGF1c2Vfc3RhdHMgPSBteGw4NjJ4eF9nZXRfcGF1c2Vfc3RhdHMsXG4gXHQuZ2V0X3Jtb25fc3RhdHMgPSBteGw4NjJ4eF9nZXRfcm1vbl9zdGF0cyxcbiBcdC5nZXRfc3RhdHM2NCA9IG14bDg2Mnh4X2dldF9zdGF0czY0LFxuK1x0LmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LFxuK1x0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gfTtcbiBcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG5pbmRleCA0MzJhNWYzZjJlMDhlNi4uMTI5OTg1ZjJiYmYzZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbkBAIC0xNCw2ICsxNCwxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbiAjZGVmaW5lIE1YTDg2MlhYX0ZJUlNUX1NFUkRFU19QT1JUXHQ5XG4gI2RlZmluZSBNWEw4NjJYWF9TRVJERVNfU0xPVFNcdFx0NFxuIFxuKy8qIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpIHJldHVybiBjb2RlcyAobmVnYXRpdmUgdmFsdWVzIGFyZSBlcnJvcnMpICovXG4rI2RlZmluZSBNWEw4NjJYWF9OT1RfUkVTQ1VFXHRcdDBcbisjZGVmaW5lIE1YTDg2MlhYX0lOX1JFU0NVRVx0XHQxXG4rXG4gI2RlZmluZSBNWEw4NjJYWF9ERUZBVUxUX0JSSURHRVx0XHQwXG4gI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFU1x0XHQ0OFxuICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRV9QT1JUU1x0MTI4XG5AQCAtMzAzLDYgKzMwNywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7XG4gICogICAgICAgICAgICAgICAgICAgICAgZmxvb2RpbmcpXG4gICogQGZ3X3ZlcnNpb246ICAgICAgICAgY2FjaGVkIGZpcm13YXJlIHZlcnNpb24sIHBvcHVsYXRlZCBhdCBwcm9iZSBhbmRcbiAgKiAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB3aXRoIE1YTDg2MlhYX0ZXX1ZFUl9NSU4oKVxuKyAqIEBhc2ljX2lkOiAgICAgICAgICAgIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycyxcbisgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayBcImFzaWMuaWRcIiBmaXhlZCB2ZXJzaW9uXG4rICogQGFzaWNfcmV2OiAgICAgICAgICAgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXG4rICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgXCJhc2ljLnJldlwiIGZpeGVkIHZlcnNpb25cbiAgKiBAc2VyZGVzX3BvcnRzOiAgICAgICBTZXJEZXMgaW50ZXJmYWNlcyBpbmNsLiBzdWItaW50ZXJmYWNlcyBpbiBjYXNlIG9mXG4gICogICAgICAgICAgICAgICAgICAgICAgMTBHX1FYR01JSSBvciBRU0dNSUlcbiAgKiBAc2VyZGVzX3JlZmNvdW50OiAgICBwZXItWFBDUyBjb3VudCBvZiBzdWItcG9ydHMgZW5hYmxlZCBieSBwaHlsaW5rO1xuQEAgLTMxOSw2ICszMjcsMTUgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xuICAqIEBldmxhbl9pbmdyZXNzX3NpemU6IHBlci1wb3J0IGluZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXG4gICogQGV2bGFuX2VncmVzc19zaXplOiAgcGVyLXBvcnQgZWdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemVcbisgKiBAYmxvY2tfaG9zdDogICAgICAgICByZWplY3QgZmlybXdhcmUgQVBJIGNvbW1hbmRzIChleGNlcHQgRldfVVBEQVRFKVxuKyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoXG4rICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93blxuKyAqICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZCBieSB0aGUgcG9zdC1mbGFzaCByZXByb2JlXG4rICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kcyBmYWlsIGZhc3QsXG4rICogICAgICAgICAgICAgICAgICAgICAgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3NcbisgKiBAcmVzY3VlX3JlYWR5OiAgICAgICAocmVzY3VlX21vZGUpIGxvYWRlciBpcyBhdCBhIGNsZWFuIFJFQURZIGFuZCB3aWxsIGFjY2VwdFxuKyAqICAgICAgICAgICAgICAgICAgICAgIGEgZmxhc2g7IGZhbHNlIHdoaWxlIHJlc2N1ZV9oZWFsX3dvcmsgaXMgZHJhaW5pbmdcbisgKiBAcmVzY3VlX2hlYWxfd29yazogICBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBkcmFpbmluZyBhIHdlZGdlZCBkb3dubG9hZCB0byBSRUFEWVxuICAqIEBzdGF0c193b3JrOiAgICAgICAgIHBlcmlvZGljIHdvcmsgaXRlbSB0aGF0IHBvbGxzIFJNT04gaGFyZHdhcmUgY291bnRlcnNcbiAgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgYWNjdW11bGF0ZXMgdGhlbSBpbnRvIDY0LWJpdCBwZXItcG9ydCBzdGF0c1xuICAqL1xuQEAgLTMyNiw5ICszNDMsMTIgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXYge1xuIFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuIFx0c3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2O1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGNyY19lcnJfd29yaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNjdWVfaGVhbF93b3JrO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHUxNiBkcm9wX21ldGVyO1xuIFx0c3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gZndfdmVyc2lvbjtcbitcdHUxNiBhc2ljX2lkO1xuK1x0dTggYXNpY19yZXY7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfcGNzIHNlcmRlc19wb3J0c1s4XTtcbiBcdGludCBzZXJkZXNfcmVmY291bnRbMl07XG4gXHRzdHJ1Y3QgbXV0ZXggc2VyZGVzX2xvY2s7XG5AQCAtMzM3LDcgKzM1NywxMyBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XG4gXHR1MTYgZXZsYW5faW5ncmVzc19zaXplO1xuIFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xuIFx0dTE2IHZmX2Jsb2NrX3NpemU7XG4rXHRib29sIGJsb2NrX2hvc3Q7XG4rXHRib29sIHNraXBfdGVhcmRvd247XG4rXHRib29sIHJlc2N1ZV9tb2RlO1xuK1x0Ym9vbCByZXNjdWVfcmVhZHk7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7XG4gfTtcbiBcbitpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuK1xuICNlbmRpZiAvKiBfX01YTDg2MlhYX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA4YzE2ZWYyM2NjMTAyYS4uYzllMTkzNDhkZTYxOTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuKysrIGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC0xMTcwLDYgKzExNzAsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuIFx0aW50XHQoKmRldmxpbmtfaW5mb19nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXHRpbnRcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbitcdFx0XHRcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIFx0aW50XHQoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL2RldmxpbmsuYyBiL25ldC9kc2EvZGV2bGluay5jXG5pbmRleCBlZDM0MmYzNDU2OTJiYi4uZDYwMjIyNjdhODM5Y2QgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL2RldmxpbmsuY1xuKysrIGIvbmV0L2RzYS9kZXZsaW5rLmNcbkBAIC0yMCw2ICsyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4rc3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuK1xuK1x0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZShkcywgcGFyYW1zLCBleHRhY2spO1xuK31cbitcbiBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbylcbkBAIC0xNjcsMTggKzE3NiwzMSBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsXG4gXHRcdFx0XHRcdFx0XHRwX21heCk7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xuLVx0LmluZm9fZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcbi1cdC5zYl9wb29sX2dldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXG4tXHQuc2JfcG9vbF9zZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxuLVx0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxuLVx0LnNiX3BvcnRfcG9vbF9zZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfc2V0LFxuLVx0LnNiX3RjX3Bvb2xfYmluZF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LFxuLVx0LnNiX3RjX3Bvb2xfYmluZF9zZXRcdFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LFxuLVx0LnNiX29jY19zbmFwc2hvdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19zbmFwc2hvdCxcbi1cdC5zYl9vY2NfbWF4X2NsZWFyXHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcbi1cdC5zYl9vY2NfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LFxuKy8qIFRoZSBkZXZsaW5rIGNvcmUgcmVqZWN0cyBmbGFzaCByZXF1ZXN0cyB1cCBmcm9udCB3aGVuIHRoZSBmbGFzaF91cGRhdGVcbisgKiBvcCBpcyBhYnNlbnQsIGJlZm9yZSBmZXRjaGluZyB0aGUgZmlybXdhcmUgZmlsZSBmcm9tIHVzZXJzcGFjZS4gT25seVxuKyAqIGluc3RhbGwgdGhlIG9wIGZvciBzd2l0Y2hlcyB3aG9zZSBkcml2ZXIgaW1wbGVtZW50cyBpdCwgc28gdGhhdFxuKyAqIHVuc3VwcG9ydGVkIHJlcXVlc3RzIGtlZXAgZmFpbGluZyBlYXJseS5cbisgKi9cbisjZGVmaW5lIERTQV9ERVZMSU5LX09QU1x0XHRcdFx0XHRcdFx0XFxcbitcdC5pbmZvX2dldFx0XHRcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXHRcdFxcXG4rXHQuc2JfcG9vbF9nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFx0XFxcbitcdC5zYl9wb29sX3NldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9zZXQsXHRcXFxuK1x0LnNiX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFx0XFxcbitcdC5zYl9wb3J0X3Bvb2xfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCxcdFxcXG4rXHQuc2JfdGNfcG9vbF9iaW5kX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9nZXQsIFxcXG4rXHQuc2JfdGNfcG9vbF9iaW5kX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsIFxcXG4rXHQuc2Jfb2NjX3NuYXBzaG90XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFx0XFxcbitcdC5zYl9vY2NfbWF4X2NsZWFyXHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhcixcdFxcXG4rXHQuc2Jfb2NjX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCwgXFxcbiBcdC5zYl9vY2NfdGNfcG9ydF9iaW5kX2dldFx0PSBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldCxcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHtcbitcdERTQV9ERVZMSU5LX09QU1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7XG4rXHREU0FfREVWTElOS19PUFNcbitcdC5mbGFzaF91cGRhdGVcdFx0XHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbiB9O1xuIFxuIGludCBkc2FfZGV2bGlua19wYXJhbV9nZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXG5AQCAtMzc4LDEyICs0MDAsMTYgQEAgdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gaW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcztcbiBcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiBcbitcdG9wcyA9IGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/IFx1MDAyNmRzYV9kZXZsaW5rX2ZsYXNoX29wc1xuK1x0XHRcdFx0XHQgICAgOiBcdTAwMjZkc2FfZGV2bGlua19vcHM7XG4rXG4gXHQvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhblxuIFx0ICogYWRkIGRwaXBlIHRhYmxlc1xuIFx0ICovXG4tXHRkbCA9IGRldmxpbmtfYWxsb2MoXHUwMDI2ZHNhX2Rldmxpbmtfb3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cdTAwM2VkZXYpO1xuK1x0ZGwgPSBkZXZsaW5rX2FsbG9jKG9wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtXHUwMDNlZGV2KTtcbiBcdGlmICghZGwpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MTMuODkxNDY4NzNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE2MjY5MjAwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJIGhhdmUgdGhpcyBwYXRjaCBzZXJpZXMgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggc3dpdGNoIGRyaXZlciwgYWRkaW5nIGZpcm13YXJlIGZsYXNoaW5nIGFuZCBkZXZsaW5rIHN1cHBvcnQuIEl0IHRvdWNoZXMgYSBmZXcgZmlsZXM6IGBteGw4NjJ4eC1mdy5jYCwgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYG14bDg2Mnh4LmNgLCBgbXhsODYyeHgtaG9zdC5jYCwgYG14bDg2Mnh4LXBoeWxpbmsuY2AsIGFuZCBgbmV0L2RzYS9kZXZsaW5rLmNgLiBCZWZvcmUgSSBkaXZlIGludG8gd2hldGhlciB0aGlzIGlzIHdvcnRoIGZ1enppbmcsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZXZlbiAqcG9zc2libGUqIGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBza2lwcGluZyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggY29kZSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLlxuXG5GaXJzdCB0aG91Z2h0OiBpcyB0aGUgYG14bDg2Mnh4YCBhIFBDSWUgc3dpdGNoPyBOb3BlLCBpdCdzIGEgRFNBIHN3aXRjaCwgd2hpY2ggaXMgaW1wb3J0YW50LiBEU0Egc3dpdGNoZXMgYXJlIGNvbm5lY3RlZCB2aWEgYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlIGZyb20gdGhlIFBDSWUgc3dpdGNoZXMgbWVudGlvbmVkIGluIHRoZSBwcm9tcHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIERTQSBzd2l0Y2ggaXMgY29ubmVjdGVkLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCB1c2VzIE1ESU8gKGBzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXZgKS4gTURJTyBpcyBhIHNlcmlhbCBidXMsIHVubGlrZSBQQ0llLlxuXG5Ob3csIHRoZSBNRElPIGRldmljZXMuLi4gYXJlIHRoZXkgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVtdWxhdGVkIG9yIGZ1enplZCB2aWEgc29tZSB2aXJ0dWFsIE1ESU8gYnVzPyBTeXprYWxsZXIgZG9lc24ndCB1c3VhbGx5IGVtdWxhdGUgc3BlY2lmaWMgTURJTyBEU0Egc3dpdGNoZXMgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBkcml2ZXIgb3IgaWYgaXQncyByZWFjaGFibGUgdmlhIHNvbWUgZ2VuZXJpYyBpbnRlcmZhY2UuIFRoZSBwcm9tcHQgY29udGludWVzIHRvIGNhdXRpb24gYWJvdXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cblxuU28sIHRoZSBrZXkgcXVlc3Rpb24gYmVjb21lczogaXMgdGhpcyBgbXhsODYyeHhgIHJlYWNoYWJsZSBpbiBRRU1VPyBDYW4gSSBpbnN0YW50aWF0ZSBpdCBpbiBhIHdheSB0aGF0IHN5emthbGxlciBjYW4gaW50ZXJhY3Qgd2l0aD8gSG93IHdvdWxkIEkgZ2V0IHRoaXMgdG8gd29yaz8gSSBrbm93IEkyQy9NRElPL1NQSSBkZXZpY2VzIGNhbiBzb21ldGltZXMgYmUgaW5zdGFudGlhdGVkIHZpYSBzeXNmcyBvciBuZXRsaW5rIGlmIHRoZXJlJ3MgYSB2aXJ0dWFsIGJ1cywgb3IgdmlhIGRldmljZSB0cmVlIG92ZXJsYXlzLiBTeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIEkyQy9TUEkgZGV2aWNlcywgYnV0IE1ESU8/IE5vdCBzdXJlIGFib3V0IHRoYXQuXG5cblRoZW4sIHRoZXJlJ3MgZGV2bGluay4gRGV2bGluayBjb21tYW5kcyBjYW4gYmUgc2VudCB0byAqYW55KiByZWdpc3RlcmVkIGRldmxpbmsgZGV2aWNlLiBIb3dldmVyLCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgaGFzIHRvICpwcm9iZSogYmVmb3JlIHRoZSBkZXZsaW5rIGRldmljZSBjYW4gYmUgcmVnaXN0ZXJlZCwgcmlnaHQ/IEFuZCB0aGUgZHJpdmVyIHByb2JlcyBvbiBhbiBNRElPIGJ1cy4gT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNgIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgcHJvYmluZyBzZXF1ZW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNDQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NToyNC4wNTQxNjI1NTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NzIxMTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm14bDg2Mnh4X3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjE3Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMjA4LVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIyMDk6c3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjIxMC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMzE4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXhsODYyeHhfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIzMTk6XFx0LnByb2JlICA9IG14bDg2Mnh4X3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIzMjAtXFx0LnJlbW92ZSA9IG14bDg2Mnh4X3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MjQuMTYxODg5ODcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxMDg2NTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBgbXhsODYyeHhgIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1kaW9fZHJpdmVyYCwgc3BlY2lmaWNhbGx5IHRoZSBgbXhsODYyeHhgIG9uZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyIGVmZmVjdGl2ZWx5IHByb2JlIGFuZCBmdXp6IHRoaXMgdGhpbmc/IEkga25vdyBTeXprYWxsZXIgY2FuIGhhbmRsZSBjZXJ0YWluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIGB2aGNpYCBmb3IgVVNCIG9yIGBuZXRkZXZzaW1gIGZvciBuZXR3b3JrIGRldmljZXMsIGFuZCBldmVuIGBtYWM4MDIxMV9od3NpbWAuIEJ1dCBNRElPIGlzIHRyaWNreS4gSXQgbG9va3MgbGlrZSBzb21lIGRyaXZlcnMsIGxpa2UgYG1kaW8tYmNtLXVuaW1hY2AsIG1pZ2h0IGJlIHByb2JlYWJsZSB3aXRoIHNvbWUgZWZmb3J0LCBhbmQgaGFyZHdhcmUgRFNBIHN3aXRjaGVzIHR5cGljYWxseSByZXF1aXJlIGEgZGV2aWNlIHRyZWUsIHdoaWNoIFN5emthbGxlciBkb2Vzbid0IGR5bmFtaWNhbGx5IGhhbmRsZSBmb3IgTURJTyBkZXZpY2VzIHVubGVzcyBhIHZlcnkgc3BlY2lmaWMgXCJwc2V1ZG8tZGV2aWNlXCIgZXhpc3RzLlxuXG5Ob3csIEkgKmRvKiBzZWUgdGhhdCBTeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rXy4uLmAgd2hpY2ggY291bGQgYmUgdXNlZnVsLCBidXQgdGhhdCByZWxpZXMgb24gdGhlIGRldmljZSBiZWluZyAqcHJlc2VudCogaW4gdGhlIGZpcnN0IHBsYWNlLiBJZiB0aGUgYG14bDg2Mnh4YCBkZXZpY2UgaXNuJ3QgcHJlc2VudCwgdGhlIGBteGw4NjJ4eF9wcm9iZWAgZnVuY3Rpb24gd2lsbCBuZXZlciBiZSBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBjb2RlIHdpbGwgYWxzbyBiZSB1bnJlYWNoYWJsZS4gVGhhdCdzIGEgcHJvYmxlbS5cblxuSG1tLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhhdCBjb2RlIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmU/IEkgc2F3IHRoYXQgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgdXNlcyBNRElPIHJlYWRzIGFuZCB3cml0ZXMuIElmIHRoZSBoYXJkd2FyZSBpc24ndCB0aGVyZSwgaXQgc2hvdWxkIGZhaWwgd2l0aCBgLUVOT0RFVmAuIFRoYXQgY291bGQgYmUgYSBwb3NzaWJsZSBlbnRyeSBwb2ludCwgYnV0IGl0IHN0aWxsIG1lYW5zIHRoZXJlIGFyZSBkZXZpY2UgZGVwZW5kZW5jaWVzLiBFdmVuIGlmIEkgY291bGQgc29tZWhvdyBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlLCBpdCBzdGlsbCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgaGFyZHdhcmUgdmlhIE1ESU8uXG5cblRoaXMgZHJpdmVyIGlzIGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4LCBhICpzcGVjaWZpYyogaGFyZHdhcmUgc3dpdGNoLiBEb2VzIFFFTVUgZXZlbiBlbXVsYXRlIHRoaXM/IE5vLCBpdCBkb2Vzbid0LiBBbmQgdGhhdCdzIHRoZSBraWNrZXIuIFNpbmNlIEkgY2FuJ3QgZW11bGF0ZSB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhlIGNvcmUgY29kZSBpcyBlZmZlY3RpdmVseSB1bnJlYWNoYWJsZSBieSBTeXprYWxsZXIuXG5cblRoZXJlZm9yZSwgZm9yIG15IHB1cnBvc2VzLCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJpc2svcmV3YXJkIGp1c3QgaXNuJ3QgdGhlcmUuXG5cbkhvd2V2ZXIsIGxldCdzIGRvdWJsZS1jaGVjazsgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgc2VlIGNoYW5nZXMgaW4gYG5ldC9kc2EvZGV2bGluay5jYCB0aGF0IHJlbGF0ZSB0byBgZGV2bGlua19mbGFzaF91cGRhdGVgLCBhbmQgdGhhdCdzIGdlbmVyaWMgRFNBIGNvZGUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIHRoZXJlLiBMZXQgbWUgZGl2ZSBpbnRvIHRoZSBjaGFuZ2VzIGluIHRoYXQgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MzMuMzcyNzU3OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTYzNzgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc2FfZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS9kZXZsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9kZXZsaW5rLmM9MTE9c3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuLS1cXG5uZXQvZHNhL2RldmxpbmsuYy0yMi1cXG5uZXQvZHNhL2RldmxpbmsuYzoyMzpzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXFxubmV0L2RzYS9kZXZsaW5rLmMtMjQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm5ldC9kc2EvZGV2bGluay5jPTIwMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX2ZsYXNoX29wcyA9IHtcXG5uZXQvZHNhL2RldmxpbmsuYy0yMDItXFx0RFNBX0RFVkxJTktfT1BTXFxubmV0L2RzYS9kZXZsaW5rLmM6MjAzOlxcdC5mbGFzaF91cGRhdGVcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcXG5uZXQvZHNhL2RldmxpbmsuYy0yMDQtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6NDU6MzMuNDY4NDAwMzA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMTQ4ODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQYXRjaCBmb3IgRFNBIERldmxpbmsgRmxhc2ggVXBkYXRlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRzIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIHRvIGBuZXQvZHNhL2RldmxpbmsuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJcyB0aGlzIGEgY29tbW9uIG9wZXJhdGlvbiB3aXRoaW4gdGhlIERTQSB3b3JsZCwgb3IgaXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgc3dpdGNoIG9yIGZhbWlseSBvZiBzd2l0Y2hlcz8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgYW55IG90aGVyIERTQSBzd2l0Y2hlcyBjdXJyZW50bHkgdXRpbGl6ZSBgZGV2bGlua19mbGFzaF91cGRhdGVgIGZ1bmN0aW9uYWxpdHkuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBuZXcgYWRkaXRpb24uIEknbGwgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIGltcGxlbWVudGF0aW9ucyBvZiBgZGV2bGlua19mbGFzaF91cGRhdGVgIHdpdGhpbiBgc3RydWN0IGRzYV9zd2l0Y2hfb3BzYCBhY3Jvc3Mgb3RoZXIgZHJpdmVycy4gVGhhdCdsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgZm9sbG93cyBhbiBlc3RhYmxpc2hlZCBwYXR0ZXJuIG9yIGludHJvZHVjZXMgYSBub3ZlbCBhcHByb2FjaC4gVGhpcyBpbml0aWFsIGFuYWx5c2lzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlJ3MgaW1wbGljYXRpb25zIGZvciB0aGUgYnJvYWRlciBEU0EgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg4MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjQ1OjM3LjM4OTg5MTMzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4MDEwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua19mbGFzaF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYz0yMDU9c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtMjA3LXtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzoyMDg6XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtMjA5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jPTc3Mz1pbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYy04MzAtXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM6ODMxOmludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM6ODMyOlxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTgzMy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oPTEzPWludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oLTE1LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3Lmg6MTY6aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaDoxNzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaC0xOC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMTczPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIyMDUtXFx0LmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIyMDY6XFx0LmRldmxpbmtfZmxhc2hfdXBkYXRlID0gbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjIwNy19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjo0NTozNy40OTk2OTc1ODJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc2NjMxNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIFBsdW1iaW5nOiBObyBGdXp6aW5nIE5lZWRlZCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgaXQncyBwcmV0dHkgY2xlYXIgd2hlcmUgd2UncmUgYXQuIFRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpbiBgbmV0L2RzYS9kZXZsaW5rLmNgIGlzIG1pbm9yLCBqdXN0IGEgc2luZ2xlIGZ1bmN0aW9uIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLiBJdCBlc3NlbnRpYWxseSBzZXJ2ZXMgYXMgYSBicmlkZ2UsIGNhbGxpbmcgYSBkcml2ZXItc3BlY2lmaWMgZnVuY3Rpb24gYGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAuIFRoZSBwcm9ibGVtPyBPbmx5IHRoZSBgbXhsODYyeHhgIGRyaXZlciBhY3R1YWxseSAqaW1wbGVtZW50cyogdGhhdCBgZGV2bGlua19mbGFzaF91cGRhdGVgIGNhbGxiYWNrLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkNvdWxkIGEgbW9yZSBhY2Nlc3NpYmxlIGRyaXZlciwgbGlrZSBgZHNhX2xvb3BgLCBgZHNhX21vY2tgLCBvciBldmVuIGBtdjg4ZTZ4eHhgLCBzb21laG93IGxldmVyYWdlIHRoaXM/XCIgQnV0IGEgcXVpY2sgY2hlY2sgY29uZmlybXM6IE5vLCBvbmx5IGBteGw4NjJ4eGAgaXMgdXNpbmcgaXQuIEFuZCBgbXhsODYyeHhgIGlzIGEgKmhhcmR3YXJlKiBzd2l0Y2gsIHdoaWNoIG1lYW5zIGl0IGNhbid0IGJlIHByb2JlZCBvciB1c2VkIHdpdGhpbiBhIHZpcnR1YWxpemVkIFFFTVUgc2V0dXAuXG5cblNvLCB0aGlzIHBhdGNoIGlzIGJhc2ljYWxseSBhIG5pY2hlIGZlYXR1cmUgYWRkaXRpb24gZm9yIG9uZSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIuIFRoZSBjb3JlIERTQSBwbHVtYmluZyBpdCB0b3VjaGVzIGlzIGVmZmVjdGl2ZWx5IGRlYWQgY29kZSBpbiBhbnkgZW11bGF0ZWQgZW52aXJvbm1lbnQuIFRoZXJlJ3Mgbm8gcG9zc2libGUgd2F5IHRvIHRyaWdnZXIgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgaW4gYSBmdXp6YWJsZSBlbnZpcm9ubWVudC4gSSBkb3VibGUtY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdCBldmVuIGlmIGEgZHJpdmVyICpkaWRuJ3QqIHByb3ZpZGUgdGhhdCBjYWxsYmFjaywgdGhlIGRlZmF1bHQgcGF0aCB3b3VsZG4ndCBzb21laG93IGxlYWQgdXMgdGhlcmUuIEl0J3MgYWxsIGxvY2tlZCBiZWhpbmQgdGhhdCBgZGV2bGlua19mbGFzaF91cGRhdGVgIHBvaW50ZXIsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBkcml2ZXIuXG5cblRoZXJlZm9yZSwgbm8sIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSBsaWtlbGlob29kIG9mIGZpbmRpbmcgYW55dGhpbmcgaW50ZXJlc3Rpbmcgd2l0aCB0aGUgZ2l2ZW4gc2V0dXAgaXMgZWZmZWN0aXZlbHkgemVyby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwMDksIk91dHB1dFRva2VucyI6MTI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjQ1OjQ3LjE3NjMzMTc2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHByaW1hcmlseSBhZGRzIGZpcm13YXJlIGZsYXNoaW5nIHN1cHBvcnQgdG8gdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoZSBtaW5vciBwbHVtYmluZyBhZGRlZCB0byB0aGUgZ2VuZXJpYyBEU0EgZGV2bGluayBjb3JlIGlzIG9ubHkgcmVhY2hhYmxlIGlmIGEgZHJpdmVyIGltcGxlbWVudHMgdGhlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FsbGJhY2ssIHdoaWNoIGN1cnJlbnRseSBvbmx5IHRoZSB1bnJlYWNoYWJsZSBgbXhsODYyeHhgIGRyaXZlciBkb2VzLiBUaHVzLCB0aGUgbmV3IGNvZGUgY2Fubm90IGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgc3VwcG9ydCB0byB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gVGhlIG1pbm9yIHBsdW1iaW5nIGFkZGVkIHRvIHRoZSBnZW5lcmljIERTQSBkZXZsaW5rIGNvcmUgaXMgb25seSByZWFjaGFibGUgaWYgYSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBjYWxsYmFjaywgd2hpY2ggY3VycmVudGx5IG9ubHkgdGhlIHVucmVhY2hhYmxlIGBteGw4NjJ4eGAgZHJpdmVyIGRvZXMuIFRodXMsIHRoZSBuZXcgY29kZSBjYW5ub3QgYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpqgpk[1] Phase: Running StartedAt: 2026-07-27 12:46:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpqgpk[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-27 12:46:00 +0000 UTC FinishedAt: 2026-07-27 12:46:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}