Name: series-workflowrgbpm Phase: Failed StartedAt: 2026-09-07 07:45:33 +0000 UTC FinishedAt: 2026-09-07 07:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgbpm[0] Phase: Succeeded StartedAt: 2026-09-07 07:45:33 +0000 UTC FinishedAt: 2026-09-07 07:48:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgbpm[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 07:45:33 +0000 UTC FinishedAt: 2026-09-07 07:48:24 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgKHVzZWQgaW4gQWxsd2lubmVyIFNvQ3MpLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIChPRl9NRElPKSwgY29tcGFuaW9uIElDcywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgTlZNRU0gY2VsbHMgdG8gbWF0Y2ggYW5kIHByb2JlLiBJdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQgd2l0aG91dCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTg2Y2EwZjJhYWJhMmMyOGQ3ZjBkMWY1MGQ2ZmQ5NTEzMzYyNTNhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZTkwYzRmZmVjY2ViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5AQCAtMCwwICYjNDM7MSwxNjUgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246XG4mIzQzOyAgVGhlIEFDMjAwIGFuZCBBQzMwMCBjb250YWluIGNvbXBhdGlibGUgRmFzdCBFdGhlcm5ldCBQSFkgYmxvY2tzIHdoaWNoIHJlcG9ydFxuJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGVcbiYjNDM7ICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZFxuJiM0MzsgIHRocm91Z2ggdGhlIGNvbXBhbmlvbiBJQyYjMzk7cyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXG4mIzQzOyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxuJiM0MzsgIGFkZHJlc3MuXG4mIzQzO1xuJiM0MzsgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4mIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGFcbiYjNDM7ICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cbiYjNDM7XG4mIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzXG4mIzQzOyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxuJiM0MzsgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heGltdW06IDMxXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcbiYjNDM7XG4mIzQzOyAgdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcbiYjNDM7ICAgICAgb24gQUMzMDAuXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGxzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xuJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxuJiM0MzsgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuJiM0MzsgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxuJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxuJiM0MzsgICAgICBjb3B5IGluc3RlYWQuXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6XG4mIzQzOyAgICBjb25zdDogY29uZmlndXJhdGlvblxuJiM0MztcbiYjNDM7ICB4LXBvd2VycyxhYzIwMDpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgZGVzY3JpYmVkIGJ5IHRoZSB4LXBvd2VycyxhYzIwMCBNRkRcbiYjNDM7ICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcbiYjNDM7ICAgICAgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLlxuJiM0MztcbiYjNDM7ICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuJiM0MzsgICAgdHlwZTogYm9vbGVhblxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi5cbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6XG4mIzQzOyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbiYjNDM7ICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuJiM0MzsgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgIC0gY29tcGF0aWJsZVxuJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSB2Y2Mtc3VwcGx5XG4mIzQzO1xuJiM0MztkZXBlbmRlbnRSZXF1aXJlZDpcbiYjNDM7ICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2VcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBlbnVtOlxuJiM0MzsgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICBtYXhpbXVtOiA3XG4mIzQzOyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6XG4mIzQzOyAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICAgICAgbWF4aW11bTogN1xuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzO1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgJiM0Mzs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMSw0ICYjNDM7MTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQmIzQzOz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwzIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4mIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZkZDJhM2RmYmU0MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzE0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXHQzXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEVcdFx0XHRCSVQoMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbiYjNDM7I2RlZmluZSBBQzIwMF9FRlVTRV9FUEhZX1JFR1x0XHRcdDB4ODAwNFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7XG4mIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHUxNiBlcGh5X2N0bDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHN1cHBseV9lbmFibGVkO1xuJiM0MztcdGJvb2wgcG93ZXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWcsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbiYjNDM7XHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiBBQzIwMFxuJiM0MztcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cbiYjNDM7XHQgKiBNRkQgcHJvdmlkZXIgaGFzIGNvbXBsZXRlZCBpdHMgaW5wdXQtY2xvY2sgc3RhcnR1cCBkZWxheSBiZWZvcmVcbiYjNDM7XHQgKiBwdWJsaXNoaW5nIHRoZSByZWdtYXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZGlzYWJsZTpcbiYjNDM7XHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcbiYjNDM7XHR1OCBicHNfZWZmdXNlX2NvZGU7XG4mIzQzO1x0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRwcml2LVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCYjMzQ7dmNjXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNldmNjKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsIFwmIzM0O3gtcG93ZXJzLGFjMjAwXCYjMzQ7LCAwKTtcbiYjNDM7XHRpZiAoIWFjMjAwX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7bWlzc2luZyB4LXBvd2VycyxhYzIwMCByZWZlcmVuY2VcXG5cJiMzNDspKTtcbiYjNDM7XHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbiYjNDM7XHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcbiYjNDM7XHRpZiAoIWNsaWVudCkge1xuJiM0MztcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7QUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCYjMzQ7KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV9saW5rX2FkZChkZXYsIFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX2xvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0ZGV2aWNlX3VubG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2N0bCA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNsaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoY2xrKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGJvdW5kIEFDMjAwIHByb3ZpZGVyIGVuYWJsZXMgYW5kIGV4Y2x1c2l2ZWx5IHBpbnMgdGhpcyByYXRlLiAqL1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4mIzQzO1x0Y2xrX3B1dChjbGspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0MztcbiYjNDM7b3V0X2Vycm9yOlxuJiM0MztcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cJiMzNDspO1xuJiM0MztvdXRfcHV0X2NsaWVudDpcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0Yzlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbkBAIC0wLDAgJiM0MzsxLDM4NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vcGh5bGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcdDI1MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfUkVHXHRcdFx0MHgwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0tcdFx0R0VOTUFTSygxMSwgOClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDApXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAxKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXHRcdFx0QklUKDUpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExET1x0XHRCSVQoMylcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXHRcdFx0MHgwMlxuJiM0MzsjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXHRcdEJJVCgxNSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1JFR1x0XHRcdDB4MDVcbiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4mIzQzOyNkZWZpbmUgQUMzMDBfSU9fRFJWX0xFVkVMXzJcdFx0XHQyXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcdFx0XHQweDA2XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTIFxcXG4mIzQzO1x0KEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuJiM0MztcdCBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbiYjNDM7XHQoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbiYjNDM7XG4mIzQzO3N0cnVjdCBhYzMwMF9lcGh5X2N0bCB7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHR1MTYgc3lzX2NvbnRyb2w7XG4mIzQzO1x0dTE2IGVwaHlfY29uZmlnO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBwYWNrYWdlX2tub3duO1xuJiM0MztcdGJvb2wgaW50ZXJuYWxfZGxkbztcbiYjNDM7XHRib29sIHN1cHBseV9lbmFibGVkO1xuJiM0MztcdGJvb2wgcG93ZXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnRcbiYjNDM7YWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4mIzQzO1x0XHRcdFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHR1MTYgdmFsID0gKHJldCBcdTAwMjYgfm1hc2spIHwgKHNldCBcdTAwMjYgbWFzayk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gdmFsID09IHJldCA/IDAgOlxuJiM0MztcdFx0XHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcbiYjNDM7XHRcdFx0XHRcdCAgICByZWdudW0sIHZhbCk7XG4mIzQzO1x0fVxuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2NvbmZpZyB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXG4mIzQzO1x0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxuJiM0MztcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICFwcml2LVx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4mIzQzO1x0XHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbiYjNDM7XHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4mIzQzO1x0XHRcdFx0XHQgICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1xuJiM0MztcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbiYjNDM7XHRcdGlmICghZXJyKVxuJiM0MztcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlIGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuJiM0MztcdFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTggcGFja2FnZV9zdGF0dXM7XG4mIzQzO1x0dTE2IHJlc2V0X3ZhbHVlO1xuJiM0MztcdGludCBzeXNfY29udHJvbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtXHUwMDNldmNjKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXG4mIzQzO1x0XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTtcbiYjNDM7XHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHN5c19jb250cm9sO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4mIzQzO1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuJiM0MztcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcG93ZXJfb2ZmOlxuJiM0MztcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfY2xrX3B1dCh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2xrX3B1dChkYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuJiM0MztcdHU4IGJnc19lZmZ1c2VfY29kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2xpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxuXCYjMzQ7KSk7XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcJiMzNDt2Y2NcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2VjbGspLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbiYjNDM7XHRjYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3Vuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXG4mIzQzO1x0YmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuJiM0MztcdFx0XHQgICBGSUVMRF9NQVgoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0spO1xuJiM0MztcdHByaXYtXHUwMDNlZXBoeV9jb25maWcgPVxuJiM0MztcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbiYjNDM7XHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuJiM0MztcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzMmVkNDMzNWQ4NDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbkBAIC0wLDAgJiM0MzsxLDYyMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1x0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMFx0XHRcdFx0MFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNlx0XHRcdFx0NlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcdDB4NDgyNFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1x0MHgxN1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4ZlxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcdFx0XHQweDE1XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXHRcdDB4MDBiY1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXHQweDAwNDRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbiYjNDM7XHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4mIzQzO1x0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcbiYjNDM7ICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4mIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4mIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbiYjNDM7XHQvKiBTZXJpYWxpemVzIHBhY2thZ2Ugc3RhdGUgYW5kIG11bHRpLXJlZ2lzdGVyIHBvd2VyIHNlcXVlbmNlcy4gKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcbiYjNDM7XHRib29sIGlzX2FjMzAwO1xuJiM0MztcdGJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7XG4mIzQzO1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICAgICAgcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWNvbnRyb2wtXHUwMDNlcG93ZXJfb2ZmKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9mZiBjb250cm9sIGJsb2NrOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjZWxsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuJiM0MztcbiYjNDM7XHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0KnZhbHVlID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBzZWxlY3RhYmxlO1xuJiM0MztcdGJvb2wgZml4ZWRfYWMzMDA7XG4mIzQzO1x0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcbiYjNDM7XHR1OCBjYWxpYnJhdGlvbjtcbiYjNDM7XHR1MzIgYmFzZV9hZGRyO1xuJiM0MztcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cdTAwM2VvZl9ub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZiYXNlX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XG4mIzQzO1x0aGFzX2NvbmZpZ3VyYXRpb24gPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7bnZtZW0tY2VsbC1uYW1lc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7KSBcdTAwM2U9IDA7XG4mIzQzO1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGVjdGFibGUpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuJiM0MztcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4mIzQzO1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2NvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbiYjNDM7XHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcbiYjNDM7XHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuJiM0MztcdFx0XHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO1xuJiM0MztvdXRfcHV0X25vZGU6XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlb2Zfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO291dF9wb3dlcl9vZmY6XG4mIzQzO1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4mIzQzO1x0XHRBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDpcbiYjNDM7XHRcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XG4mIzQzO1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbiYjNDM7XHR1MTYgZ2xvYmFsX2NvbmZpZztcbiYjNDM7XHRpbnQgb2xkcGFnZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbiYjNDM7XHRcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0YWZlX2VxX3J4X2RldGVjdCA9XG4mIzQzO1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHRcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xuJiM0MztcdGlmIChvbGRwYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCBvbGRwYWdlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XG4mIzQzO291dF9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfcmVzdGFydF9hbmVnKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXG4mIzQzO1x0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfcG93ZXJfb2ZmOlxuJiM0MztcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXN1bWVfcmV0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzdXNwZW5kIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aG91dCB0aGUgcGh5bGliIGxvY2sgaGVsZC4gKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRyZXN1bWVfcmV0ID0gX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXN1bWVfcmV0KVxuJiM0MztcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmICghcGFja2FnZV9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCYjMzQ7LFxuJiM0MztcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4mIzQzO1x0XHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxuJiM0MztcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbiYjNDM7XHRcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgJiM0MzsxLDI4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZpY2Vfbm9kZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xuJiM0MztcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuJiM0MztcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XG4mIzQzO1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlICh1c2VkIGluIEFsbHdpbm5lciBTb0NzKS4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyAoT0ZfTURJTyksIGNvbXBhbmlvbiBJQ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIE5WTUVNIGNlbGxzIHRvIG1hdGNoIGFuZCBwcm9iZS4gSXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0IHdpdGhvdXQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4NmNhMGYyYWFiYTJjMjhkN2YwZDFmNTBkNmZkOTUxMzM2MjUzYTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA3OjQ3OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwKQEAgLTAsMCAmIzQzOzEsMTY1IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXMKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246CiYjNDM7ICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0CiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlCiYjNDM7ICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZAomIzQzOyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJiMzOTtzIEkyQyByZWdpc3RlciBpbnRlcmZhY2UsIHdoaWxlIEFDMzAwIGNvbnRyb2wKJiM0MzsgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFkKJiM0MzsgIGFkZHJlc3MuCiYjNDM7CiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLgomIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGEKJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLgomIzQzOwomIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzCiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kCiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvCiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4aW11bTogMzEKJiM0MzsKJiM0MzsgIGNsb2NrczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6CiYjNDM7CiYjNDM7ICB2Y2Mtc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzEKJiM0MzsgICAgICBvbiBBQzMwMC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGxzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZwomIzQzOyAgICAgIGNhbGlicmF0aW9uIGNvZGUsIGJpdHMgNyB0aHJvdWdoIDQgYXJlIHJlc2VydmVkLCBiaXQgOCBzZWxlY3RzIEFDMzAwCiYjNDM7ICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDAKJiM0MzsgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seQomIzQzOyAgICAgIHRoZSBsb3cgY2FsaWJyYXRpb24gYml0cyBvciBvbWl0IHRoZSBjZWxsIGFuZCB1c2UgaXRzIGludGVybmFsIGVGdXNlCiYjNDM7ICAgICAgY29weSBpbnN0ZWFkLgomIzQzOwomIzQzOyAgbnZtZW0tY2VsbC1uYW1lczoKJiM0MzsgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb24KJiM0MzsKJiM0MzsgIHgtcG93ZXJzLGFjMjAwOgomIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFBoYW5kbGUgdG8gdGhlIEFDMjAwIGNvbXBhbmlvbiBJQyBkZXNjcmliZWQgYnkgdGhlIHgtcG93ZXJzLGFjMjAwIE1GRAomIzQzOyAgICAgIGJpbmRpbmcuIEl0cyBJMkMgaW50ZXJmYWNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcGFja2FnZSBjb250cm9sCiYjNDM7ICAgICAgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLgomIzQzOwomIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDoKJiM0MzsgICAgdHlwZTogYm9vbGVhbgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lCiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi4KJiM0MzsKJiM0MztwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6CiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwCiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gdmNjLXN1cHBseQomIzQzOwomIzQzO2RlcGVuZGVudFJlcXVpcmVkOgomIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2UKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlCiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIGNsb2NrcwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxscwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIGNsb2NrcwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxscwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzCiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgICAgICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgcmVnOgomIzQzOyAgICAgICAgICBtYXhpbXVtOiA3CiYjNDM7ICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOgomIzQzOyAgICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICAgIHJlZzoKJiM0MzsgICAgICAgICAgICAgIG1heGltdW06IDcKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGI0ZWY5MjdmZDRhNjcuLmQzODM1NTk3ZTM3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC00ODQsNiAmIzQzOzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFkKIAloZWxwCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDQKIAomIzQzO2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWQomIzQzOwl0cmlzdGF0ZSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQ09NTU9OX0NMSyAmYW1wOyZhbXA7IE5WTUVNICZhbXA7JmFtcDsgT0ZfTURJTyAmYW1wOyZhbXA7IFJFR1VMQVRPUgomIzQzOwlkZXBlbmRzIG9uIEkyQyB8fCAhSTJDCiYjNDM7CXNlbGVjdCBQSFlfUEFDS0FHRQomIzQzOwloZWxwCiYjNDM7CSAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMAomIzQzOwkgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZCiYjNDM7CSAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sCiYjNDM7CSAgcmVnaXN0ZXJzLgomIzQzOwogY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJCiAJdHJpc3RhdGUgJiMzNDtYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQpAQCAtMTAxLDQgJiM0MzsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpCQkmIzQzOz0gc21zYy5vCiBvYmotJChDT05GSUdfU1RFMTBYUCkJCSYjNDM7PSBzdGUxMFhwLm8KIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSkJJiM0Mzs9IHRlcmFuZXRpY3Mubwogb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKQkmIzQzOz0gdml0ZXNzZS5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKQkmIzQzOz0geHBvd2Vycy8KIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgJiM0Mzs9IHhpbGlueF9nbWlpMnJnbWlpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDMgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSAmIzQzOz0geHBvd2Vycy1hY3gwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZmRkMmEzZGZiZTQxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpAQCAtMCwwICYjNDM7MSwzMTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhICZsdDthbmRyZS5wcnp5d2FyYUBhcm0uY29tJmd0OykKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUCTMKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaCTI0MDAwMDAwCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcJCQkweDAwMTQKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFCQkJQklUKDEpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRwkJCTB4MDAxNgomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqLwomIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUcJCQkweDgwMDQKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFRwkJCTB4NjAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWgkJQklUKDIpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0sJCQlHRU5NQVNLKDgsIDQpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOwomIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJdTE2IGVwaHlfY3RsOwomIzQzOwl1bnNpZ25lZCBpbnQgcGh5X2FkZHI7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtlcGh5X2N0bCB8CiYjNDM7CQkocHJpdi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCSBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCkgfAomIzQzOwkJRklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtJmd0O3BoeV9hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsCiYjNDM7CQkJCXVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF93cml0ZShwcml2LSZndDtyZWdtYXAsIHJlZywgdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2Vycihwcml2LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXG4mIzM0OywKJiM0MzsJCQlyZWcsIEVSUl9QVFIocmV0KSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCQkgICBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSBBQzIwMF9FUEhZX1JNSUlfU0VMLAomIzQzOwkJCQkJIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXByaXYtJmd0O2ludGVyZmFjZSA9IGludGVyZmFjZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeV9hZGRyICZndDsgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQgJmFtcDsmYW1wOyBwcml2LSZndDtwaHlfYWRkciA9PSBwaHlfYWRkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtwaHlfYWRkciA9IHBoeV9hZGRyOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIEFDMjAwCiYjNDM7CSAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb24KJiM0MzsJICogTUZEIHByb3ZpZGVyIGhhcyBjb21wbGV0ZWQgaXRzIGlucHV0LWNsb2NrIHN0YXJ0dXAgZGVsYXkgYmVmb3JlCiYjNDM7CSAqIHB1Ymxpc2hpbmcgdGhlIHJlZ21hcC4KJiM0MzsJICovCiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLAomIzQzOwkJCQkgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsCiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2Rpc2FibGU6CiYjNDM7CS8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqLwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqCiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwKJiM0MzsJCSAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJdW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjsKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKJiM0MzsJdTggYnBzX2VmZnVzZV9jb2RlOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OywgMCk7CiYjNDM7CWlmICghYWMyMDBfbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXG4mIzM0OykpOwomIzQzOwljbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7CiYjNDM7CWlmICghY2xpZW50KSB7CiYjNDM7CQlyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuJiMzNDspKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV9saW5rX2FkZChkZXYsICZhbXA7Y2xpZW50LSZndDtkZXYsCiYjNDM7CQkJICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmljZV9sb2NrKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlpZiAoZGV2aWNlX2lzX2JvdW5kKCZhbXA7Y2xpZW50LSZndDtkZXYpKQomIzQzOwkJcHJpdi0mZ3Q7cmVnbWFwID0gZGV2X2dldF9yZWdtYXAoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWRldmljZV91bmxvY2soJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cmVnbWFwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwKJiM0MzsJCQkJICAgICYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhc19jYWxpYnJhdGlvbikgewomIzQzOwkJcmV0ID0gcmVnbWFwX3JlYWQocHJpdi0mZ3Q7cmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRywKJiM0MzsJCQkJICAmYW1wO2ludGVybmFsX2NhbGlicmF0aW9uKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfZXJyb3I7CiYjNDM7CQljYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jdGwgPQomIzQzOwkJRklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwljbGsgPSBjbGtfZ2V0KCZhbXA7Y2xpZW50LSZndDtkZXYsIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKGNsaykpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoY2xrKTsKJiM0MzsJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi8KJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCSAgICBjbGtfcmF0ZSk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MztvdXRfZXJyb3I6CiYjNDM7CXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxuJiMzNDspOwomIzQzO291dF9wdXRfY2xpZW50OgomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0YzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCkBAIC0wLDAgJiM0MzsxLDM4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFoJMjUwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaCTI3MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUcJCQkweDAwCiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0sJCQlHRU5NQVNLKDcsIDYpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpCiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFCQkJQklUKDUpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVAkJQklUKDEpCiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE8JCUJJVCgzKQomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLCQlHRU5NQVNLKDIsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHCQkJMHgwMgomIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUJCUJJVCgxNSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUcJCQkweDA1CiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0sJCQlHRU5NQVNLKDExLCAxMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yCQkJMgomIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUcJCQkweDA2CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXAomIzQzOwkoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcCiYjNDM7CSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFwKJiM0MzsJIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXAomIzQzOwkoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSkKJiM0MzsKJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJCSAgIEFDMzAwX0VQSFlfU0hVVERPV04pOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCQkgICAgQUMzMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1OCBwYWNrYWdlX3N0YXR1czsKJiM0MzsJdTE2IHJlc2V0X3ZhbHVlOwomIzQzOwlpbnQgc3lzX2NvbnRyb2w7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqLwomIzQzOwkJZnNsZWVwKDEwMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi8KJiM0MzsJcmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8CiYjNDM7CQkJCSAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi8KJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBwcml2LSZndDtzeXNfY29udHJvbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpOwomIzQzOwlpZiAoc3lzX2NvbnRyb2wgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzeXNfY29udHJvbDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7CiYjNDM7CWlmICgofnBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT0KJiM0MzsJICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgJmFtcDsgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETzsKJiM0MzsJcHJpdi0mZ3Q7cGFja2FnZV9rbm93biA9IHRydWU7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLAomIzQzOwkJCQkgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsCiYjNDM7CQkJCSAgIHByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJCQkgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX1NZU19JT19WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcG93ZXJfb2ZmOgomIzQzOwlhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwcml2LSZndDt2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O3ZjYykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDt2Y2MpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtjbGspKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXG4mIzM0OykpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0OykpOwomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCQkgICAgIGNsa19yYXRlKSk7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jb25maWcgPQomIzQzOwkJRklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTMyZWQ0MzM1ZDg0MwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKQEAgLTAsMCAmIzQzOzEsNjIxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSUQJCQkJMHgwMDQ0MTQwMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSwlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVwlCSVQoOSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFRwkJCTB4MWYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0sJCQlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8wCQkJCTAKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMQkJCQkxCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzIJCQkJMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV82CQkJCTYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOAkJCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQJQklUKDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSwkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTwkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHCQkweDEyCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUJMHg0ODI0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRQkJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRwkweDE3CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFCUJJVCgzKQomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0sJCUdFTk1BU0soMTQsIDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQJMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHCQkweDEwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFCTB4NTUyMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRQkJMHhmMDAwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHCTB4MTQKJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUJMHg3MDhmCiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4YgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHCQkJMHgxNQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcCiYjNDM7CShGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFwKJiM0MzsJQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUJCTB4MDBiYwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcJCTB4MWQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUwkweDAwNDQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcCiYjNDM7CShBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXAomIzQzOwkgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUykKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvcgomIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMAomIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlCiYjNDM7ICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgcGFja2FnZSBzdGF0ZSBhbmQgbXVsdGktcmVnaXN0ZXIgcG93ZXIgc2VxdWVuY2VzLiAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jazsKJiM0MzsJYm9vbCBpc19hYzMwMDsKJiM0MzsJYm9vbCB1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZzsKJiM0MzsJYm9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIEZJRUxEX0dFVChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRywKJiM0MzsJCQkgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29uKHByaXYtJmd0O2NvbnRyb2wsCiYjNDM7CQkJCSAgICAgICBwcml2LSZndDtwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb2ZmKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtjb250cm9sLSZndDtzZXRfaW50ZXJmYWNlKHByaXYtJmd0O2NvbnRyb2wsCiYjNDM7CQkJCQkgICAgcGh5ZGV2LSZndDtpbnRlcmZhY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlkZXZfd2Fybihwcml2LSZndDtwaHlkZXYsCiYjNDM7CQkJICAgICYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9mZiBjb250cm9sIGJsb2NrOiAlcGVcbiYjMzQ7LAomIzQzOwkJCSAgICBFUlJfUFRSKHJldCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl1OCAqYnVmOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJY2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNlbGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY2VsbCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CW52bWVtX2NlbGxfcHV0KGNlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihidWYpOwomIzQzOwlpZiAoIWxlbiB8fCBsZW4gJmd0OyBzaXplb2YoKnZhbHVlKSkgewomIzQzOwkJa2ZyZWUoYnVmKTsKJiM0MzsJCXJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXZhbCB8PSAodTE2KWJ1ZltpXSAmbHQ7Jmx0OyAoOCAqIGkpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwkqdmFsdWUgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlOwomIzQzOwlib29sIHNlbGVjdGFibGU7CiYjNDM7CWJvb2wgZml4ZWRfYWMzMDA7CiYjNDM7CWJvb2wgaGFzX2NvbmZpZ3VyYXRpb247CiYjNDM7CXU4IGNhbGlicmF0aW9uOwomIzQzOwl1MzIgYmFzZV9hZGRyOwomIzQzOwl1MTYgY29uZmlndXJhdGlvbiA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LSZndDtvZl9ub2RlKTsKJiM0MzsJaWYgKCFwYWNrYWdlX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2Jhc2VfYWRkcik7CiYjNDM7CWlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi0mZ3Q7bWRpby5hZGRyKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWlmICghc2VsZWN0YWJsZSAmYW1wOyZhbXA7ICFmaXhlZF9hYzMwMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsKJiM0MzsJaGFzX2NvbmZpZ3VyYXRpb24gPQomIzQzOwkJb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgJiMzNDtudm1lbS1jZWxsLW5hbWVzJiMzNDssCiYjNDM7CQkJCQkgJiMzNDtjb25maWd1cmF0aW9uJiMzNDspICZndDs9IDA7CiYjNDM7CWlmIChoYXNfY29uZmlndXJhdGlvbikgewomIzQzOwkJcmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7LAomIzQzOwkJCQkJCSZhbXA7Y29uZmlndXJhdGlvbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDtwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzZWxlY3RhYmxlKSB7CiYjNDM7CQlwcml2LSZndDtpc19hYzMwMCA9CiYjNDM7CQkJY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPSBmaXhlZF9hYzMwMDsKJiM0MzsJCWlmIChoYXNfY29uZmlndXJhdGlvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPQomIzQzOwkJICAgIHByaXYtJmd0O2lzX2FjMzAwKSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLAomIzQzOwkJCQljb25maWd1cmF0aW9uKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPQomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkJISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpOwomIzQzOwlwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkID0KJiM0MzsJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsCiYjNDM7CQkJCSAgICAgICYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwKQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgY2FsaWJyYXRpb24pOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtjb250cm9sID0KJiM0MzsJCQlhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICBoYXNfY29uZmlndXJhdGlvbiwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzOwomIzQzO291dF9wdXRfbm9kZToKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7b2Zfbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwcml2LSZndDtwaHlkZXYgPSBwaHlkZXY7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi8KJiM0MzsJcmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7b3V0X3Bvd2VyX29mZjoKJiM0MzsJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJdTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LSZndDtpc19hYzMwMCA/CiYjNDM7CQlBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDoKJiM0MzsJCUFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7CiYjNDM7CXUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7CiYjNDM7CXUxNiBnbG9iYWxfY29uZmlnOwomIzQzOwlpbnQgb2xkcGFnZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLAomIzQzOwkJCQkgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTsKJiM0MzsJaWYgKHByaXYtJmd0O3htaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpCiYjNDM7CQlnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQgfAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlhZmVfZXFfcnhfZGV0ZWN0ID0KJiM0MzsJCQlBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7CiYjNDM7CQl0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7CiYjNDM7CWlmIChvbGRwYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgb2xkcGFnZSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSywKJiM0MzsJCQkgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCQkgICAgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBhZmVfZXFfcnhfZGV0ZWN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRywKJiM0MzsJCQkJICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTsKJiM0MzsKJiM0MztvdXRfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovCiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfcmVzdGFydF9hbmVnKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJLyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi8KJiM0MzsJcmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9wb3dlcl9vZmY6CiYjNDM7CWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlyZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXN1bWVfcmV0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBUaGUgc3VzcGVuZCBjYWxsYmFjayBpcyBpbnZva2VkIHdpdGhvdXQgdGhlIHBoeWxpYiBsb2NrIGhlbGQuICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlkZXYtJmd0O2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXJlc3VtZV9yZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzOwkJaWYgKHJlc3VtZV9yZXQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTsKJiM0MzsJfQomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlkZXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi0mZ3Q7bWRpby5kZXYub2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7CiYjNDM7CWJvb2wgbWF0Y2g7CiYjNDM7CiYjNDM7CWlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqLwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpOwomIzQzOwlpZiAoIXBhY2thZ2Vfbm9kZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwltYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7KSB8fAomIzQzOwkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXRjaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7CiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSwKJiM0MzsJCS5uYW1lID0gJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZJiMzNDssCiYjNDM7CQkubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSwKJiM0MzsJCS5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSwKJiM0MzsJCS5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LAomIzQzOwkJLmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCwKJiM0MzsJCS5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLAomIzQzOwkJLnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsCiYjNDM7CX0sCiYjNDM7fTsKJiM0Mzttb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0gewomIzQzOwl7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oCkBAIC0wLDAgJiM0MzsxLDI4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9ICiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUCTE2CiYjNDM7CiYjNDM7c3RydWN0IGRldmljZV9ub2RlOwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgewomIzQzOwlpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQl1bnNpZ25lZCBpbnQgcGh5X2FkZHIpOwomIzQzOwlpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpOwomIzQzOwlpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLAomIzQzOwkJICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFyZ2V0IGlzIGFtZDY0LCBzbyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBhZGRzIGEgbmV3IFBIWSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBjb21wYW5pb24gSUNzLCB3aGljaCBhcmUgZXNzZW50aWFsbHkgRXRoZXJuZXQgUEhZcy4gV2UmIzM5O3ZlIGdvdCBhIGRldmljZSB0cmVlIGJpbmRpbmcsIGEgS2NvbmZpZyBvcHRpb24sIGFuZCB0aGUgYWN0dWFsIGRyaXZlciBmaWxlcy4KCk15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyB0aGluZyBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cD8mIzM0OyBUaGUgY29kZSB0ZWxscyBtZSB0aGVzZSBQSFlzIGFyZSBkZXZpY2UtdHJlZSBiYXNlZC4gVGhleSYjMzk7cmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIChgb2ZfZ2V0X3BhcmVudGAsIGBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZWAsIGBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2VgKS4gU3BlY2lmaWNhbGx5LCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCBleHBlY3RzIGBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGVgIHRvIGJlIHZhbGlkLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZS4KCk5vdywgaG93IGRvZXMgdGhpcyBtZXNoIHdpdGggdGhlIHN5emthbGxlciBlbnZpcm9ubWVudD8gVGhpbmtpbmcgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcHJvamVjdCwgSSByZWNhbGwgYSBzZWN0aW9uIGFib3V0ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgYW5kICYjMzQ7VW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiYjMzQ7IFdlJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgaWYgQU1ENjQgaW4gUUVNVSBzdXBwb3J0cyB0aGUgY29ycmVjdCBkZXZpY2UgdHJlZSBub2RlIGNvbmZpZ3VyYXRpb24sIG9yIGlmIHN5emthbGxlciBpcyBjYXBhYmxlIG9mIG1vY2tpbmcgdGhlIE1ESU8gUEhZLgoKVGhlIGhhcmR3YXJlIHNlZW1zIHRvIGJlIHNwZWNpZmljIHRvIEFsbHdpbm5lciBTb0NzLCB3aGljaCBpbXBsaWVzIHRoYXQgaXQgbWF5IG5vdCBiZSBwcmVzZW50IG9uIEFNRDY0LiBUaGUgUEhZIGlzIGRldmljZS10cmVlLWJhc2VkLCBhbmQgdGhhdCYjMzk7cyB0aGUgcnViLiBEb2VzIEFNRDY0IFFFTVUgKm5hdGl2ZWx5KiBoYXZlIE9GIG9yIERUIG5vZGVzIGNvbmZpZ3VyZWQgdGhhdCBzeXprYWxsZXIgY2FuIGxldmVyYWdlLCBvciBkb2VzIHN5emthbGxlciBoYXZlIE1ESU8vT0YgZGV2aWNlIHRyZWUgaW5qZWN0aW9uPyBgT0ZfTURJT2AgcmVsaWVzIG9uIGBPRmAsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgYmVjYXVzZSBJJiMzOTttIG5vdCBzdXJlIGlmIGl0IGlzIGVuYWJsZWQgb24gQU1ENjQgYnkgZGVmYXVsdC4gSWYgbmVpdGhlciBhcmUsIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSB0b3VnaCBudXQgdG8gY3JhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9GX01ESU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NzIKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIEhhcmR3YXJlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbG9va2VkIGF0IGBhY3gwMF9lcGh5X3Byb2JlYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGlmIHRoZXJlJiMzOTtzIG5vIGRldmljZSB0cmVlIG5vZGUgKGAhZGV2LSZndDtvZl9ub2RlYCksIGl0IHJldHVybnMgLUVOT0RFVi4gSSB0aGVuIGNoZWNrZWQgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgYW5kIHNhdyB0aGF0IGl0JiMzOTtzIGxvb2tpbmcgZm9yIHNwZWNpZmljIGRldmljZSB0cmVlIGJpbmRpbmdzOiBgJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0O2AsIGAmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7YCwgb3IgYCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDtgLiBTbywgdGhpcyBkcml2ZXIgaXMgY2xlYXJseSB0aWVkIHRvIEFsbHdpbm5lciBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRob3NlIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuCgpOb3csIHRoZSBraWxsZXIgaXMgdGhhdCB0aGlzIHJlcXVpcmVzIHNwZWNpZmljIEFsbHdpbm5lciBoYXJkd2FyZSwgb3IgYSB2ZXJ5IHNwZWNpZmljIEFSTSBkZXZpY2V0cmVlIG9uIGEgc3BlY2lmaWMgQWxsd2lubmVyIGJvYXJkLiBJbXBvc3NpYmxlIHRvIGluc3RhbnRpYXRlIG9uIHlvdXIgcnVuLW9mLXRoZS1taWxsIHg4Nl82NCBvciBhbWQ2NCB2aXJ0dWFsIG1hY2hpbmVzIGluIFFFTVUgb3IgR0NFIHdpdGhvdXQgc29tZSB2ZXJ5IHNwZWNpZmljIERUIGVtdWxhdGlvbiwgd2hpY2ggSSBkb3VidCBpcyByZWxldmFudCBpbiB0aGlzIGNhc2UuCgpJIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgd2F5cyB0byByZWFjaCBpdCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgb24gYW1kNjQuIEV2ZW4gd2l0aCBPRiBvdmVybGF5cyBvciBEVCB1bml0IHRlc3RzLCB0aGlzIGRyaXZlciBpcyBmb3IgYW4gRXRoZXJuZXQgUEhZIHRoYXQmIzM5O3MgY29ubmVjdGVkIHZpYSBNRElPL0kyQyB0byBhIGNvbXBhbmlvbiBJQy4gSXQgYWxzbyBuZWVkcyBgT0ZfTURJT2AsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19PRmAuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpcyBkcml2ZXIgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLXdpc2UuIEl0JiMzOTtzIGFuIEV0aGVybmV0IFBIWSBzcGVjaWZpY2FsbHkgZm9yIEFsbHdpbm5lciBTb0NzIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgT0YgZGV2aWNldHJlZSBiaW5kaW5ncyBhbmQgdGhlIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuCgpMb29raW5nIGF0IHRoZSBwcm9tcHQmIzM5O3MgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlICYjMzQ7V0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY3JpdGVyaWEsIGl0JiMzOTtzIGEgcGVyZmVjdCBtYXRjaCBmb3IgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyAtIHRoaXMgb25lIGlzIHZlbmRvci1zcGVjaWZpYyBhbmQgbmVlZHMgdGhlIGFjdHVhbCBBU0lDL1BDSWUgY2FyZC4gIEluIHRoaXMgY2FzZSwgaXQmIzM5O3Mgc3BlY2lmaWMgQWxsd2lubmVyIHNpbGljb24uCgpJJiMzOTt2ZSBnb3QgdGhlIHBhcmFtZXRlcnM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBhIGNvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHNpdHVhdGlvbi4gIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSAodXNlZCBpbiBBbGx3aW5uZXIgU29DcykuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgKE9GX01ESU8pLCBjb21wYW5pb24gSUNzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBOVk1FTSBjZWxscyB0byBtYXRjaCBhbmQgcHJvYmUuIEl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCB3aXRob3V0IHBoeXNpY2FsIFNvQyBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlICh1c2VkIGluIEFsbHdpbm5lciBTb0NzKS4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyAoT0ZfTURJTyksIGNvbXBhbmlvbiBJQ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIE5WTUVNIGNlbGxzIHRvIG1hdGNoIGFuZCBwcm9iZS4gSXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0IHdpdGhvdXQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDAuNDQ2MzAyODM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MDAyMDYwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSAodXNlZCBpbiBBbGx3aW5uZXIgU29DcykuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgKE9GX01ESU8pLCBjb21wYW5pb24gSUNzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBOVk1FTSBjZWxscyB0byBtYXRjaCBhbmQgcHJvYmUuIEl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCB3aXRob3V0IHBoeXNpY2FsIFNvQyBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjAwLjQ0NjMxNDExN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4Njk3ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTg2Y2EwZjJhYWJhMmMyOGQ3ZjBkMWY1MGQ2ZmQ5NTEzMzYyNTNhMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjQ3OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZTkwYzRmZmVjY2ViXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcXG5AQCAtMCwwICsxLDE2NSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOlxcbisgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcXG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXFxuKyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcXG4rICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMncyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxcbisgIGFkZHJlc3MuXFxuK1xcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXFxuKyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGFcXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cXG4rXFxuKyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzXFxuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cXG4rICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGVudW06XFxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxuK1xcbisgIHJlZzpcXG4rICAgIG1heGltdW06IDMxXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcXG4rXFxuKyAgdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcXG4rICAgICAgb24gQUMzMDAuXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgZGVzY3JpYmVkIGJ5IHRoZSB4LXBvd2VycyxhYzIwMCBNRkRcXG4rICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcXG4rICAgICAgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLlxcbitcXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxcbisgICAgdHlwZTogYm9vbGVhblxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcXG4rICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi5cXG4rXFxuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0rJDpcXG4rICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxuKyAgICByZXF1aXJlZDpcXG4rICAgICAgLSBjb21wYXRpYmxlXFxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHZjYy1zdXBwbHlcXG4rXFxuK2RlcGVuZGVudFJlcXVpcmVkOlxcbisgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxcbitcXG4rYWxsT2Y6XFxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY2xvY2tzOiBmYWxzZVxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGVudW06XFxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgcmVnOlxcbisgICAgICAgICAgICAgIG1heGltdW06IDdcXG4rXFxuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnB3bSA1XFx1MDAzZTtcXG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcXG4gXFx0aGVscFxcbiBcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxcbiBcXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXFxuK1xcdHRyaXN0YXRlIFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcXFwiXFxuK1xcdGRlcGVuZHMgb24gQ09NTU9OX0NMSyBcXHUwMDI2XFx1MDAyNiBOVk1FTSBcXHUwMDI2XFx1MDAyNiBPRl9NRElPIFxcdTAwMjZcXHUwMDI2IFJFR1VMQVRPUlxcbitcXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbitcXHRoZWxwXFxuK1xcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxcbitcXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXFxuK1xcdCAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sXFxuK1xcdCAgcmVnaXN0ZXJzLlxcbitcXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXFxuIFxcdHRyaXN0YXRlIFxcXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuQEAgLTEwMSw0ICsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXFx0XFx0Kz0gc21zYy5vXFxuIG9iai0kKENPTkZJR19TVEUxMFhQKVxcdFxcdCs9IHN0ZTEwWHAub1xcbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXFx0Kz0gdGVyYW5ldGljcy5vXFxuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcXHQrPSB2aXRlc3NlLm9cXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVxcdCs9IHhwb3dlcnMvXFxuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxuQEAgLTAsMCArMSwzIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgKz0geHBvd2Vycy1hY3gwMC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZmRkMmEzZGZiZTQxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcXG5AQCAtMCwwICsxLDMxNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcXHUwMDNjYW5kcmUucHJ6eXdhcmFAYXJtLmNvbVxcdTAwM2UpXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImFjeDAwLmhcXFwiXFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcXHQzXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcXHQyNDAwMDAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rXFxuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcXHRcXHRcXHQweDAwMTRcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXFx0XFx0XFx0QklUKDEpXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXFx0XFx0XFx0MHgwMDE2XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXFxuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcXHRcXHRcXHQweDgwMDRcXG4rXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXFx0XFx0XFx0MHg2MDAwXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDgsIDQpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFxcdFxcdFxcdEJJVCgxMSlcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbitcXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2N0bCB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtXFx1MDAzZXBoeV9hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWcsIEVSUl9QVFIocmV0KSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpIHtcXG4rXFx0XFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHRcXHRcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdHUxNiBlcGh5X2N0bDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlfYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcXG4rXFx0ICogc3BlY2lmaWVzIG5vIGFkZGl0aW9uYWwgZGVsYXkgYmV0d2VlbiB0aGVzZSBjb250cm9scy4gVGhlIGNvbXBhbmlvblxcbitcXHQgKiBNRkQgcHJvdmlkZXIgaGFzIGNvbXBsZXRlZCBpdHMgaW5wdXQtY2xvY2sgc3RhcnR1cCBkZWxheSBiZWZvcmVcXG4rXFx0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9kaXNhYmxlOlxcbitcXHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IHRydWU7XFxuK1xcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxcbitcXHRcXHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHU4IGJwc19lZmZ1c2VfY29kZTtcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcXG4rXFx0aWYgKCFjbGllbnQpIHtcXG4rXFx0XFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXFxcblxcXCIpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRkZXZpY2VfbG9jayhcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoZGV2aWNlX2lzX2JvdW5kKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldikpXFxuK1xcdFxcdHByaXYtXFx1MDAzZXJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgTlVMTCk7XFxuK1xcdGRldmljZV91bmxvY2soXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VyZWdtYXApIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdFxcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cXG4rXFx0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXFx1MDAyNlxcbitcXHRcXHRcXHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xcbitcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCA9XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7XFxuK1xcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cXG4rXFxuK1xcdGNsayA9IGNsa19nZXQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihjbGspKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoY2xrKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cXG4rXFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4rXFx0c3dpdGNoIChjbGtfcmF0ZSkge1xcbitcXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxcbitcXHRcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgY2xrX3JhdGUpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cHJpdi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK291dF9lcnJvcjpcXG4rXFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXFxcblxcXCIpO1xcbitvdXRfcHV0X2NsaWVudDpcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcXG5AQCAtMCwwICsxLDM4NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vcGh5bGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlxcdDI1MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcXHQyNzAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDBcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXFx0XFx0R0VOTUFTSygxMSwgOClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcXG4rI2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXFx0XFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXFx0XFx0R0VOTUFTSygyLCAwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXFx0XFx0XFx0MHgwMlxcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXFx0XFx0QklUKDE1KVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXFx0XFx0XFx0MHgwNVxcbisjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCAxMClcXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1xcdFxcdFxcdDB4MDZcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxcXFxuK1xcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcXFxcbitcXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXFxuK1xcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHR1MTYgc3lzX2NvbnRyb2w7XFxuK1xcdHUxNiBlcGh5X2NvbmZpZztcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBwYWNrYWdlX2tub3duO1xcbitcXHRib29sIGludGVybmFsX2RsZG87XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHR1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHQgdTE2IG1hc2ssIHUxNiBzZXQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHR1MTYgdmFsID0gKHJldCBcXHUwMDI2IH5tYXNrKSB8IChzZXQgXFx1MDAyNiBtYXNrKTtcXG4rXFxuK1xcdFxcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcXG4rXFx0XFx0XFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByZWdudW0sIHZhbCk7XFxuK1xcdH1cXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2NvbmZpZyB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxcbitcXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXFxuK1xcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIXByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gP1xcbitcXHRcXHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFxuK1xcdFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1OCBwYWNrYWdlX3N0YXR1cztcXG4rXFx0dTE2IHJlc2V0X3ZhbHVlO1xcbitcXHRpbnQgc3lzX2NvbnRyb2w7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXFxuK1xcdFxcdGZzbGVlcCgxMDAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xcbitcXHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZXN5c19jb250cm9sKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XFxuK1xcdGlmIChzeXNfY29udHJvbCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc3lzX2NvbnRyb2w7XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFx0fVxcbitcXG4rXFx0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xcbitcXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cXG4rXFx0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XFxuK1xcdHByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gPSB0cnVlO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9wb3dlcl9vZmY6XFxuK1xcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcXG4re1xcbitcXHRjbGtfcHV0KGRhdGEpO1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXFxcblxcXCIpKTtcXG4rXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcXFwidmNjXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNldmNjKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cXHUwMDNldmNjKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcXFxuXFxcIikpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWNsaykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcInVuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNsa19yYXRlKSk7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XFxuK1xcbitcXHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXFxuK1xcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcXG4rXFx0cHJpdi1cXHUwMDNlZXBoeV9jb25maWcgPVxcbitcXHRcXHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xcbitcXHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzMmVkNDMzNWQ4NDNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xcbkBAIC0wLDAgKzEsNjIxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVxcdTAwM2VcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9JRFxcdFxcdFxcdFxcdDB4MDA0NDE0MDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1xcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXFx0QklUKDkpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1xcdFxcdFxcdDB4MWZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMiwgOClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcXHRcXHRcXHRcXHQwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8xXFx0XFx0XFx0XFx0MVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlxcdFxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcXHRcXHRcXHRcXHQ2XFxuKyNkZWZpbmUgQUNYMDBfUEFHRV84XFx0XFx0XFx0XFx0OFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVFxcdEJJVCgxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cXHRcXHQyXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1xcdFxcdDB4MTJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcXHQweDQ4MjRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXFx0XFx0XFx0QklUKDE1KVxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1xcdDB4MTdcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXFx0QklUKDMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcXHRcXHRHRU5NQVNLKDE0LCAxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFxcdDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXFx0XFx0MHgxMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcXHQweDU1MjNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcXHRcXHQweGYwMDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXFx0MHgxNFxcbisjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGZcXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXFx0MHg3MDhiXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1xcdFxcdFxcdDB4MTVcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0tcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxcXFxuK1xcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcXHRcXHQweDAwYmNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1xcdFxcdDB4MWRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXFx0MHgwMDQ0XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXFxcXG4rXFx0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxcXFxuK1xcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxcbitcXG4rLypcXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXFxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxcbisgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cXG4rICovXFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcXG4rXFx0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXFxuK1xcdHN0cnVjdCBtdXRleCBzdGF0ZV9sb2NrO1xcbitcXHRib29sIGlzX2FjMzAwO1xcbitcXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xcbitcXHRib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vwb3dlcl9vbihwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vwb3dlcl9vZmYocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlc2V0X2ludGVyZmFjZShwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgRVJSX1BUUihyZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gZGF0YTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHU4ICpidWY7XFxuK1xcdHUxNiB2YWwgPSAwO1xcbitcXG4rXFx0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKGNlbGwpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcXG4rXFxuK1xcdGJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcXHUwMDI2bGVuKTtcXG4rXFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcXG4rXFx0aWYgKCFsZW4gfHwgbGVuIFxcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcXG4rXFx0XFx0a2ZyZWUoYnVmKTtcXG4rXFx0XFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspXFxuK1xcdFxcdHZhbCB8PSAodTE2KWJ1ZltpXSBcXHUwMDNjXFx1MDAzYyAoOCAqIGkpO1xcbitcXHRrZnJlZShidWYpO1xcbitcXHQqdmFsdWUgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBzZWxlY3RhYmxlO1xcbitcXHRib29sIGZpeGVkX2FjMzAwO1xcbitcXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xcbitcXHR1OCBjYWxpYnJhdGlvbjtcXG4rXFx0dTMyIGJhc2VfYWRkcjtcXG4rXFx0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXFx1MDAzZW9mX25vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2YmFzZV9hZGRyKTtcXG4rXFx0aWYgKHJldCB8fCBiYXNlX2FkZHIgIT0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0aWYgKCFzZWxlY3RhYmxlIFxcdTAwMjZcXHUwMDI2ICFmaXhlZF9hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwidW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcbitcXHRoYXNfY29uZmlndXJhdGlvbiA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFxcXCJudm1lbS1jZWxsLW5hbWVzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJjb25maWd1cmF0aW9uXFxcIikgXFx1MDAzZT0gMDtcXG4rXFx0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcXFwiY29uZmlndXJhdGlvblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25maWd1cmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNlbGVjdGFibGUpIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPVxcbitcXHRcXHRcXHRjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPSBmaXhlZF9hYzMwMDtcXG4rXFx0XFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWlzX2FjMzAwKSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXFxuK1xcdFxcdFxcdFxcdGNvbmZpZ3VyYXRpb24pO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcXG4rXFx0cHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZCA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXFxcIik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDApXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNhbGlicmF0aW9uKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2Vjb250cm9sID1cXG4rXFx0XFx0XFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRyZXQgPSBQVFJfRVJSX09SX1pFUk8ocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK1xcbitvdXRfcHV0X25vZGU6XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VvZl9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xcbitcXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK291dF9wb3dlcl9vZmY6XFxuK1xcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcXG4rb3V0X3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVxcdTAwM2Vpc19hYzMwMCA/XFxuK1xcdFxcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxcbitcXHRcXHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xcbitcXHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xcbitcXHR1MTYgZ2xvYmFsX2NvbmZpZztcXG4rXFx0aW50IG9sZHBhZ2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xcbitcXHRpZiAocHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcXG4rXFx0XFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdGFmZV9lcV9yeF9kZXRlY3QgPVxcbitcXHRcXHRcXHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XFxuK1xcdFxcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcXG4rXFx0fVxcbitcXG4rXFx0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XFxuK1xcdGlmIChvbGRwYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCBvbGRwYWdlKTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcXG4rXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRSk7XFxuK1xcbitvdXRfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfcmVzdGFydF9hbmVnKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG93ZXJfb2ZmO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXFxuK1xcdHJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9wb3dlcl9vZmY6XFxuK1xcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXN1bWVfcmV0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogVGhlIHN1c3BlbmQgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBwaHlsaWIgbG9jayBoZWxkLiAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmVzdW1lX3JldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXN1bWVfcmV0KVxcbitcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBtYXRjaDtcXG4rXFxuK1xcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVxcXCIsXFxuK1xcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxcbitcXHRcXHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxcbitcXHRcXHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcXG4rXFx0XFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXFxuK1xcdFxcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcXG5AQCAtMCwwICsxLDI4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rI2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcXHQxNlxcbitcXG4rc3RydWN0IGRldmljZV9ub2RlO1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XFxuK1xcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xcbitcXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xcbitcXHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xcbit9O1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjAxLjMyODgzMjMwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3MTc2NTU5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlICh1c2VkIGluIEFsbHdpbm5lciBTb0NzKS4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyAoT0ZfTURJTyksIGNvbXBhbmlvbiBJQ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIE5WTUVNIGNlbGxzIHRvIG1hdGNoIGFuZCBwcm9iZS4gSXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0IHdpdGhvdXQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ODZjYTBmMmFhYmEyYzI4ZDdmMGQxZjUwZDZmZDk1MTMzNjI1M2EwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzo0Nzo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCArMSwxNjUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4rICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZFxuKyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJ3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxuKyAgYWRkcmVzcy5cbitcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4rXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuK1xuKyAgcmVnOlxuKyAgICBtYXhpbXVtOiAzMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcbitcbisgIHZjYy1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuKyAgICAgIG9uIEFDMzAwLlxuK1xuKyAgbnZtZW0tY2VsbHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuKyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbisgICAgICBjb3B5IGluc3RlYWQuXG4rXG4rICBudm1lbS1jZWxsLW5hbWVzOlxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxuK1xuKyAgeC1wb3dlcnMsYWMyMDA6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXG4rICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcbisgICAgICByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuXG4rXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuKyAgICB0eXBlOiBib29sZWFuXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuKyAgICByZXF1aXJlZDpcbisgICAgICAtIGNvbXBhdGlibGVcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHZjYy1zdXBwbHlcbitcbitkZXBlbmRlbnRSZXF1aXJlZDpcbisgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjbG9ja3M6IGZhbHNlXG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHJlZzpcbisgICAgICAgICAgbWF4aW11bTogN1xuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgIHJlZzpcbisgICAgICAgICAgICAgIG1heGltdW06IDdcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwiY29uZmlndXJhdGlvblwiO1xuKyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcbiBcdGhlbHBcbiBcdCAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0XG4gXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXG4rXHR0cmlzdGF0ZSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWVwiXG4rXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbitcdGRlcGVuZHMgb24gSTJDIHx8ICFJMkNcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuK1x0aGVscFxuK1x0ICBFbmFibGUgdGhlIEZhc3QgRXRoZXJuZXQgUEhZIGRyaXZlciBzaGFyZWQgYnkgdGhlIFgtUG93ZXJzIEFDMjAwXG4rXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXG4rXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuK1x0ICByZWdpc3RlcnMuXG4rXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXG4gXHR0cmlzdGF0ZSBcIlhpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5AQCAtMTAxLDQgKzEwMSw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSlcdFx0Kz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCs9IHN0ZTEwWHAub1xuIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSlcdCs9IHRlcmFuZXRpY3Mub1xuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcdCs9IHZpdGVzc2Uub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcdCs9IHhwb3dlcnMvXG4gb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSArPSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICsxLDMgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSArPSB4cG93ZXJzLWFjeDAwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmZGQyYTNkZmJlNDFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbkBAIC0wLDAgKzEsMzE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVx0XHRcdEJJVCgxKVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXHRcdFx0MHg4MDA0XG4rXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcbitcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbitcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHUxNiBlcGh5X2N0bDtcbitcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4rXHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwiLFxuK1x0XHRcdHJlZywgRVJSX1BUUihyZXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1MTYgZXBoeV9jdGw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbitcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4rXG4rXHQvKlxuK1x0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcbitcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cbitcdCAqIE1GRCBwcm92aWRlciBoYXMgY29tcGxldGVkIGl0cyBpbnB1dC1jbG9jayBzdGFydHVwIGRlbGF5IGJlZm9yZVxuK1x0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxuK1x0ICovXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZGlzYWJsZTtcbitcbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCJ4LXBvd2VycyxhYzIwMFwiLCAwKTtcbitcdGlmICghYWMyMDBfbm9kZSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwiKSk7XG4rXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbitcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuK1x0aWYgKCFjbGllbnQpIHtcbitcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCIpKTtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbitcdFx0XHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRkZXZpY2VfbG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdGlmIChkZXZpY2VfaXNfYm91bmQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpXG4rXHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRkZXZpY2VfdW5sb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlZ21hcCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbitcdFx0XHRcdCAgICBcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xuK1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4rXHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9lcnJvcjtcbitcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdH1cbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY3RsID1cbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihjbGspO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4rXHRjbGtfcHV0KGNsayk7XG4rXG4rXHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuK1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCIsXG4rXHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rXG4rb3V0X2Vycm9yOlxuK1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCIpO1xuK291dF9wdXRfY2xpZW50OlxuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCArMSwzODcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbisjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuKyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbisjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbitcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuK1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbitcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbitcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdHUxNiBzeXNfY29udHJvbDtcbitcdHUxNiBlcGh5X2NvbmZpZztcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHBhY2thZ2Vfa25vd247XG4rXHRib29sIGludGVybmFsX2RsZG87XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHR1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuK1x0XHRcdFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbitcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuK1xuK1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4rXHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcbitcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbitcdH1cbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0LypcbitcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXG4rXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4rXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuK1x0ICovXG4rXHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1xuK1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuK1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuK1x0XHRlbHNlIGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXG4rXHRyZXR1cm4gYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbit9XG4rXG4rc3RhdGljIGludFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1OCBwYWNrYWdlX3N0YXR1cztcbitcdHUxNiByZXNldF92YWx1ZTtcbitcdGludCBzeXNfY29udHJvbDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXG4rXHRcdGZzbGVlcCgxMDAwMCk7XG4rXHR9XG4rXG4rXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcbitcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbitcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuK1x0aWYgKHN5c19jb250cm9sIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHN5c19jb250cm9sO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4rXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxuK1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcbitcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbitcdFx0XHRcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4rXHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wb3dlcl9vZmY6XG4rXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4re1xuK1x0Y2xrX3B1dChkYXRhKTtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cIikpO1xuK1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4rXG4rXHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCJ2Y2NcIik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwiKSk7XG4rXG4rXHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCIpKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCIpKTtcbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbitcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbitcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTMyZWQ0MzM1ZDg0M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCArMSw2MjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcdEJJVCg5KVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfTUFTS1x0XHRcdEdFTk1BU0soMTIsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbisjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXHRcdFx0XHQyXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbisjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUdcdFx0MHgxMlxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcdFx0XHRCSVQoMTUpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXHQwXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVx0MHg1NTIzXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXHQweDE0XG4rI2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTS1x0XHRHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbitcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuK1x0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4rXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbitcdChBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXFxcbitcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuK1xuKy8qXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4rICogYW5hbG9nLXBhZ2UgZmllbGQgZW5jb2RpbmdzIHJlbWFpbiB1bnB1Ymxpc2hlZCwgc28ga2VlcCB0aG9zZSBhcyBvcGFxdWVcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbisgKi9cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xuK1x0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXG4rXHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdCAgICBcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxuXCIsXG4rXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbitcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcbitcdHNpemVfdCBpO1xuK1x0c2l6ZV90IGxlbjtcbitcdHU4ICpidWY7XG4rXHR1MTYgdmFsID0gMDtcbitcbitcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTtcbitcdGlmIChJU19FUlIoY2VsbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuK1xuK1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4rXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbitcdGlmIChJU19FUlIoYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbitcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbitcdFx0a2ZyZWUoYnVmKTtcbitcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspXG4rXHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbitcdGtmcmVlKGJ1Zik7XG4rXHQqdmFsdWUgPSB2YWw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgc2VsZWN0YWJsZTtcbitcdGJvb2wgZml4ZWRfYWMzMDA7XG4rXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xuK1x0dTggY2FsaWJyYXRpb247XG4rXHR1MzIgYmFzZV9hZGRyO1xuK1x0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LVx1MDAzZW9mX25vZGUpO1xuK1x0aWYgKCFwYWNrYWdlX25vZGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwicmVnXCIsIFx1MDAyNmJhc2VfYWRkcik7XG4rXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgIFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXG4rXHRoYXNfY29uZmlndXJhdGlvbiA9XG4rXHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwibnZtZW0tY2VsbC1uYW1lc1wiLFxuK1x0XHRcdFx0XHQgXCJjb25maWd1cmF0aW9uXCIpIFx1MDAzZT0gMDtcbitcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuK1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCJjb25maWd1cmF0aW9uXCIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRpZiAoc2VsZWN0YWJsZSkge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbitcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuK1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxuK1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgXCJjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH1cbitcbitcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4rXHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbitcbitcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuK1x0XHQhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xuK1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbitcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwiKTtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0ZWxzZVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4rXHRcdFx0XHRcdCAgICAgIGNhbGlicmF0aW9uKTtcbitcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuK1xuK291dF9wdXRfbm9kZTpcbitcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cbitcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRnb3RvIG91dF91bmxvY2s7XG4rXG4rb3V0X3Bvd2VyX29mZjpcbitcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCBvbGRwYWdlKTtcbitcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4rXHRcdFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHRcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgYWZlX2VxX3J4X2RldGVjdCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuK1x0XHRcdFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRSk7XG4rXG4rb3V0X3Jlc3RvcmVfcGFnZTpcbitcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXG4rXHRyZXQgPSBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X3Jlc3RhcnRfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXG4rXHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9wb3dlcl9vZmY6XG4rXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdHJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogVGhlIHN1c3BlbmQgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBwaHlsaWIgbG9jayBoZWxkLiAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cmVzdW1lX3JldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBtYXRjaDtcbitcbitcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbitcdGlmICghcGFja2FnZV9ub2RlKVxuK1x0XHRyZXR1cm4gMDtcbitcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCIpIHx8XG4rXHRcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xuK1xuK1x0cmV0dXJuIG1hdGNoO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHtcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuK1x0XHQubmFtZSA9IFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVwiLFxuK1x0XHQubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSxcbitcdFx0LnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSxcbitcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSxcbitcdFx0LnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsXG4rXHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4rXHRcdC5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLFxuK1x0XHQuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCxcbitcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuK1x0fSxcbit9O1xuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7XG4rXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuK1x0eyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxuQEAgLTAsMCArMSwyOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisjaWZuZGVmIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuKyNkZWZpbmUgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUXHQxNlxuK1xuK3N0cnVjdCBkZXZpY2Vfbm9kZTtcbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIHtcbitcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdHVuc2lnbmVkIGludCBwaHlfYWRkcik7XG4rXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xuK1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xuK307XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuK1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pO1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDEuMzI4ODM2MTY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3NTg5NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSB0YXJnZXQgaXMgYW1kNjQsIHNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBQSFkgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcywgd2hpY2ggYXJlIGVzc2VudGlhbGx5IEV0aGVybmV0IFBIWXMuIFdlJ3ZlIGdvdCBhIGRldmljZSB0cmVlIGJpbmRpbmcsIGEgS2NvbmZpZyBvcHRpb24sIGFuZCB0aGUgYWN0dWFsIGRyaXZlciBmaWxlcy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJDYW4gd2UgZXZlbiByZWFjaCB0aGlzIHRoaW5nIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwP1wiIFRoZSBjb2RlIHRlbGxzIG1lIHRoZXNlIFBIWXMgYXJlIGRldmljZS10cmVlIGJhc2VkLiBUaGV5J3JlIGxvb2tpbmcgZm9yIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGR1cmluZyBpbml0aWFsaXphdGlvbiAoYG9mX2dldF9wYXJlbnRgLCBgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGVgLCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCkuIFNwZWNpZmljYWxseSwgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgZXhwZWN0cyBgcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGVgIHRvIGJlIHZhbGlkLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZS5cblxuTm93LCBob3cgZG9lcyB0aGlzIG1lc2ggd2l0aCB0aGUgc3l6a2FsbGVyIGVudmlyb25tZW50PyBUaGlua2luZyBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBwcm9qZWN0LCBJIHJlY2FsbCBhIHNlY3Rpb24gYWJvdXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBhbmQgXCJVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXCIgV2UndmUgZ290IHRvIGNvbnNpZGVyIGlmIEFNRDY0IGluIFFFTVUgc3VwcG9ydHMgdGhlIGNvcnJlY3QgZGV2aWNlIHRyZWUgbm9kZSBjb25maWd1cmF0aW9uLCBvciBpZiBzeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBtb2NraW5nIHRoZSBNRElPIFBIWS5cblxuVGhlIGhhcmR3YXJlIHNlZW1zIHRvIGJlIHNwZWNpZmljIHRvIEFsbHdpbm5lciBTb0NzLCB3aGljaCBpbXBsaWVzIHRoYXQgaXQgbWF5IG5vdCBiZSBwcmVzZW50IG9uIEFNRDY0LiBUaGUgUEhZIGlzIGRldmljZS10cmVlLWJhc2VkLCBhbmQgdGhhdCdzIHRoZSBydWIuIERvZXMgQU1ENjQgUUVNVSAqbmF0aXZlbHkqIGhhdmUgT0Ygb3IgRFQgbm9kZXMgY29uZmlndXJlZCB0aGF0IHN5emthbGxlciBjYW4gbGV2ZXJhZ2UsIG9yIGRvZXMgc3l6a2FsbGVyIGhhdmUgTURJTy9PRiBkZXZpY2UgdHJlZSBpbmplY3Rpb24/IGBPRl9NRElPYCByZWxpZXMgb24gYE9GYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBiZWNhdXNlIEknbSBub3Qgc3VyZSBpZiBpdCBpcyBlbmFibGVkIG9uIEFNRDY0IGJ5IGRlZmF1bHQuIElmIG5laXRoZXIgYXJlLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgdG91Z2ggbnV0IHRvIGNyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMyNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjA2LjcwNDczNjI1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE5OTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfTURJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNS1cXHRkZWZfdHJpc3RhdGUgT0ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDYuNzgyOTQ2ODQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2MzQ5ODQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBIYXJkd2FyZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBsb29rZWQgYXQgYGFjeDAwX2VwaHlfcHJvYmVgLiBSaWdodCBvZmYgdGhlIGJhdCwgaWYgdGhlcmUncyBubyBkZXZpY2UgdHJlZSBub2RlIChgIWRldi1cdTAwM2VvZl9ub2RlYCksIGl0IHJldHVybnMgLUVOT0RFVi4gSSB0aGVuIGNoZWNrZWQgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgYW5kIHNhdyB0aGF0IGl0J3MgbG9va2luZyBmb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3M6IGBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiYCwgYFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCJgLCBvciBgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcImAuIFNvLCB0aGlzIGRyaXZlciBpcyBjbGVhcmx5IHRpZWQgdG8gQWxsd2lubmVyIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhvc2UgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy5cblxuTm93LCB0aGUga2lsbGVyIGlzIHRoYXQgdGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBbGx3aW5uZXIgaGFyZHdhcmUsIG9yIGEgdmVyeSBzcGVjaWZpYyBBUk0gZGV2aWNldHJlZSBvbiBhIHNwZWNpZmljIEFsbHdpbm5lciBib2FyZC4gSW1wb3NzaWJsZSB0byBpbnN0YW50aWF0ZSBvbiB5b3VyIHJ1bi1vZi10aGUtbWlsbCB4ODZfNjQgb3IgYW1kNjQgdmlydHVhbCBtYWNoaW5lcyBpbiBRRU1VIG9yIEdDRSB3aXRob3V0IHNvbWUgdmVyeSBzcGVjaWZpYyBEVCBlbXVsYXRpb24sIHdoaWNoIEkgZG91YnQgaXMgcmVsZXZhbnQgaW4gdGhpcyBjYXNlLlxuXG5JIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgd2F5cyB0byByZWFjaCBpdCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgb24gYW1kNjQuIEV2ZW4gd2l0aCBPRiBvdmVybGF5cyBvciBEVCB1bml0IHRlc3RzLCB0aGlzIGRyaXZlciBpcyBmb3IgYW4gRXRoZXJuZXQgUEhZIHRoYXQncyBjb25uZWN0ZWQgdmlhIE1ESU8vSTJDIHRvIGEgY29tcGFuaW9uIElDLiBJdCBhbHNvIG5lZWRzIGBPRl9NRElPYCwgd2hpY2ggZGVwZW5kcyBvbiBgQ09ORklHX09GYC5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIHRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS13aXNlLiBJdCdzIGFuIEV0aGVybmV0IFBIWSBzcGVjaWZpY2FsbHkgZm9yIEFsbHdpbm5lciBTb0NzIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgT0YgZGV2aWNldHJlZSBiaW5kaW5ncyBhbmQgdGhlIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuXG5cbkxvb2tpbmcgYXQgdGhlIHByb21wdCdzIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBcIldIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZVwiIGNyaXRlcmlhLCBpdCdzIGEgcGVyZmVjdCBtYXRjaCBmb3IgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiAtIHRoaXMgb25lIGlzIHZlbmRvci1zcGVjaWZpYyBhbmQgbmVlZHMgdGhlIGFjdHVhbCBBU0lDL1BDSWUgY2FyZC4gIEluIHRoaXMgY2FzZSwgaXQncyBzcGVjaWZpYyBBbGx3aW5uZXIgc2lsaWNvbi5cblxuSSd2ZSBnb3QgdGhlIHBhcmFtZXRlcnM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBhIGNvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHNpdHVhdGlvbi4gIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NzIsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjEyLjA0NjQ1MDY1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgKHVzZWQgaW4gQWxsd2lubmVyIFNvQ3MpLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIChPRl9NRElPKSwgY29tcGFuaW9uIElDcywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgTlZNRU0gY2VsbHMgdG8gbWF0Y2ggYW5kIHByb2JlLiBJdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQgd2l0aG91dCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSAodXNlZCBpbiBBbGx3aW5uZXIgU29DcykuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgKE9GX01ESU8pLCBjb21wYW5pb24gSUNzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBOVk1FTSBjZWxscyB0byBtYXRjaCBhbmQgcHJvYmUuIEl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCB3aXRob3V0IHBoeXNpY2FsIFNvQyBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjEyLjA0NjQ5MTg3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowrgbpm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 07:45:33 +0000 UTC FinishedAt: 2026-09-07 07:48:13 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgKHVzZWQgaW4gQWxsd2lubmVyIFNvQ3MpLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIChPRl9NRElPKSwgY29tcGFuaW9uIElDcywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgTlZNRU0gY2VsbHMgdG8gbWF0Y2ggYW5kIHByb2JlLiBJdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQgd2l0aG91dCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTg2Y2EwZjJhYWJhMmMyOGQ3ZjBkMWY1MGQ2ZmQ5NTEzMzYyNTNhMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDc6NDc6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZTkwYzRmZmVjY2ViXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5AQCAtMCwwICYjNDM7MSwxNjUgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXNcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7ZGVzY3JpcHRpb246XG4mIzQzOyAgVGhlIEFDMjAwIGFuZCBBQzMwMCBjb250YWluIGNvbXBhdGlibGUgRmFzdCBFdGhlcm5ldCBQSFkgYmxvY2tzIHdoaWNoIHJlcG9ydFxuJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGVcbiYjNDM7ICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZFxuJiM0MzsgIHRocm91Z2ggdGhlIGNvbXBhbmlvbiBJQyYjMzk7cyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXG4mIzQzOyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxuJiM0MzsgIGFkZHJlc3MuXG4mIzQzO1xuJiM0MzsgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4mIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGFcbiYjNDM7ICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cbiYjNDM7XG4mIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzXG4mIzQzOyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxuJiM0MzsgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC5cbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzO1xuJiM0MzsgIHJlZzpcbiYjNDM7ICAgIG1heGltdW06IDMxXG4mIzQzO1xuJiM0MzsgIGNsb2NrczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcbiYjNDM7XG4mIzQzOyAgdmNjLXN1cHBseTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcbiYjNDM7ICAgICAgb24gQUMzMDAuXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGxzOlxuJiM0MzsgICAgbWF4SXRlbXM6IDFcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xuJiM0MzsgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxuJiM0MzsgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuJiM0MzsgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxuJiM0MzsgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxuJiM0MzsgICAgICBjb3B5IGluc3RlYWQuXG4mIzQzO1xuJiM0MzsgIG52bWVtLWNlbGwtbmFtZXM6XG4mIzQzOyAgICBjb25zdDogY29uZmlndXJhdGlvblxuJiM0MztcbiYjNDM7ICB4LXBvd2VycyxhYzIwMDpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgZGVzY3JpYmVkIGJ5IHRoZSB4LXBvd2VycyxhYzIwMCBNRkRcbiYjNDM7ICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcbiYjNDM7ICAgICAgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLlxuJiM0MztcbiYjNDM7ICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuJiM0MzsgICAgdHlwZTogYm9vbGVhblxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi5cbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6XG4mIzQzOyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbiYjNDM7ICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuJiM0MzsgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgIC0gY29tcGF0aWJsZVxuJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSB2Y2Mtc3VwcGx5XG4mIzQzO1xuJiM0MztkZXBlbmRlbnRSZXF1aXJlZDpcbiYjNDM7ICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2VcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlXG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgIC0gY2xvY2tzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBlbnVtOlxuJiM0MzsgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICBtYXhpbXVtOiA3XG4mIzQzOyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6XG4mIzQzOyAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICByZWc6XG4mIzQzOyAgICAgICAgICAgICAgbWF4aW11bTogN1xuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzO1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgJiM0Mzs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMSw0ICYjNDM7MTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQmIzQzOz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwzIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4mIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZkZDJhM2RmYmU0MVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzE0IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXHQzXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEVcdFx0XHRCSVQoMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbiYjNDM7I2RlZmluZSBBQzIwMF9FRlVTRV9FUEhZX1JFR1x0XHRcdDB4ODAwNFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7XG4mIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHUxNiBlcGh5X2N0bDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHN1cHBseV9lbmFibGVkO1xuJiM0MztcdGJvb2wgcG93ZXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWcsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbiYjNDM7XHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTdGFydCBmcm9tIGEgZGlzYWJsZWQgc3RhdGUgYmVmb3JlIGFwcGx5aW5nIHRoZSBjb25maWd1cmF0aW9uLiBBQzIwMFxuJiM0MztcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cbiYjNDM7XHQgKiBNRkQgcHJvdmlkZXIgaGFzIGNvbXBsZXRlZCBpdHMgaW5wdXQtY2xvY2sgc3RhcnR1cCBkZWxheSBiZWZvcmVcbiYjNDM7XHQgKiBwdWJsaXNoaW5nIHRoZSByZWdtYXAuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZGlzYWJsZTpcbiYjNDM7XHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuJiM0MztcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7XG4mIzQzO1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBjbGtfcmF0ZTtcbiYjNDM7XHR1OCBicHNfZWZmdXNlX2NvZGU7XG4mIzQzO1x0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRwcml2LVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCYjMzQ7dmNjXCYjMzQ7KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNldmNjKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsIFwmIzM0O3gtcG93ZXJzLGFjMjAwXCYjMzQ7LCAwKTtcbiYjNDM7XHRpZiAoIWFjMjAwX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7bWlzc2luZyB4LXBvd2VycyxhYzIwMCByZWZlcmVuY2VcXG5cJiMzNDspKTtcbiYjNDM7XHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbiYjNDM7XHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcbiYjNDM7XHRpZiAoIWNsaWVudCkge1xuJiM0MztcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7QUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCYjMzQ7KSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV9saW5rX2FkZChkZXYsIFx1MDAyNmNsaWVudC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2aWNlX2xvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0ZGV2aWNlX3VubG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2N0bCA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNsaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoY2xrKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGJvdW5kIEFDMjAwIHByb3ZpZGVyIGVuYWJsZXMgYW5kIGV4Y2x1c2l2ZWx5IHBpbnMgdGhpcyByYXRlLiAqL1xuJiM0MztcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4mIzQzO1x0Y2xrX3B1dChjbGspO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbiYjNDM7XHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O3Vuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cHJpdi1cdTAwM2Vjb250cm9sO1xuJiM0MztcbiYjNDM7b3V0X2Vycm9yOlxuJiM0MztcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cJiMzNDspO1xuJiM0MztvdXRfcHV0X2NsaWVudDpcbiYjNDM7XHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuJiM0MztcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0Yzlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbkBAIC0wLDAgJiM0MzsxLDM4NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vcGh5bGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcdDI1MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfUkVHXHRcdFx0MHgwMFxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0tcdFx0R0VOTUFTSygxMSwgOClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDApXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAxKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXHRcdFx0QklUKDUpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVx0XHRCSVQoNClcbiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExET1x0XHRCSVQoMylcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXHRcdFx0MHgwMlxuJiM0MzsjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXHRcdEJJVCgxNSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0lPX1JFR1x0XHRcdDB4MDVcbiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4mIzQzOyNkZWZpbmUgQUMzMDBfSU9fRFJWX0xFVkVMXzJcdFx0XHQyXG4mIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcdFx0XHQweDA2XG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTIFxcXG4mIzQzO1x0KEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuJiM0MztcdCBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbiYjNDM7XHQoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbiYjNDM7XHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbiYjNDM7XG4mIzQzO3N0cnVjdCBhYzMwMF9lcGh5X2N0bCB7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuJiM0MztcdHN0cnVjdCBjbGsgKmNsaztcbiYjNDM7XHR1MTYgc3lzX2NvbnRyb2w7XG4mIzQzO1x0dTE2IGVwaHlfY29uZmlnO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1x0Ym9vbCBwYWNrYWdlX2tub3duO1xuJiM0MztcdGJvb2wgaW50ZXJuYWxfZGxkbztcbiYjNDM7XHRib29sIHN1cHBseV9lbmFibGVkO1xuJiM0MztcdGJvb2wgcG93ZXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnRcbiYjNDM7YWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4mIzQzO1x0XHRcdFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbiYjNDM7XHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHR1MTYgdmFsID0gKHJldCBcdTAwMjYgfm1hc2spIHwgKHNldCBcdTAwMjYgbWFzayk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gdmFsID09IHJldCA/IDAgOlxuJiM0MztcdFx0XHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcbiYjNDM7XHRcdFx0XHRcdCAgICByZWdudW0sIHZhbCk7XG4mIzQzO1x0fVxuJiM0MztcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2NvbmZpZyB8XG4mIzQzO1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuJiM0MztcdFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXG4mIzQzO1x0ICogdGhlIHN1cHBseSBhcnJhbmdlbWVudCwgcHJlc2VydmUgYW55IGV4dGVybmFsLVZERCBzZXR1cCBsZWZ0IGJ5IHRoZVxuJiM0MztcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICFwcml2LVx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4mIzQzO1x0XHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbiYjNDM7XHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4mIzQzO1x0XHRcdFx0XHQgICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1xuJiM0MztcdFx0Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbiYjNDM7XHRcdGlmICghZXJyKVxuJiM0MztcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4mIzQzO1x0XHRlbHNlIGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4mIzQzO1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuJiM0MztcdFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxuJiM0MztcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0dTggcGFja2FnZV9zdGF0dXM7XG4mIzQzO1x0dTE2IHJlc2V0X3ZhbHVlO1xuJiM0MztcdGludCBzeXNfY29udHJvbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtXHUwMDNldmNjKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXG4mIzQzO1x0XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRzeXNfY29udHJvbCA9IGFjMzAwX2VwaHlfY3RsX3JlYWQocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHKTtcbiYjNDM7XHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbiYjNDM7XHRcdHJldCA9IHN5c19jb250cm9sO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4mIzQzO1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuJiM0MztcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHByaXYsIEFDMzAwX1NZU19CSUFTMV9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcG93ZXJfb2ZmOlxuJiM0MztcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjMzAwX2VwaHlfY2xrX3B1dCh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0Y2xrX3B1dChkYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuJiM0MztcdHU4IGJnc19lZmZ1c2VfY29kZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2xpbmsgYWRkcmVzcyBpcyBvdXRzaWRlIHRoZSBwYWNrYWdlIHJhbmdlXFxuXCYjMzQ7KSk7XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcJiMzNDt2Y2NcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2VjbGspLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbiYjNDM7XHRjYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3Vuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXG4mIzQzO1x0YmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuJiM0MztcdFx0XHQgICBGSUVMRF9NQVgoQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0spO1xuJiM0MztcdHByaXYtXHUwMDNlZXBoeV9jb25maWcgPVxuJiM0MztcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbiYjNDM7XHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuJiM0MztcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzMmVkNDMzNWQ4NDNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbkBAIC0wLDAgJiM0MzsxLDYyMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjIFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1x0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMFx0XHRcdFx0MFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNlx0XHRcdFx0NlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcdDB4NDgyNFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1x0MHgxN1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4ZlxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcdFx0XHQweDE1XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXHRcdDB4MDBiY1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXHQweDAwNDRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbiYjNDM7XHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4mIzQzO1x0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcbiYjNDM7ICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4mIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4mIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbiYjNDM7XHQvKiBTZXJpYWxpemVzIHBhY2thZ2Ugc3RhdGUgYW5kIG11bHRpLXJlZ2lzdGVyIHBvd2VyIHNlcXVlbmNlcy4gKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcbiYjNDM7XHRib29sIGlzX2FjMzAwO1xuJiM0MztcdGJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7XG4mIzQzO1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbiYjNDM7XHRcdFx0XHQgICAgICAgcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWNvbnRyb2wtXHUwMDNlcG93ZXJfb2ZmKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9mZiBjb250cm9sIGJsb2NrOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjZWxsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuJiM0MztcbiYjNDM7XHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0KnZhbHVlID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBzZWxlY3RhYmxlO1xuJiM0MztcdGJvb2wgZml4ZWRfYWMzMDA7XG4mIzQzO1x0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcbiYjNDM7XHR1OCBjYWxpYnJhdGlvbjtcbiYjNDM7XHR1MzIgYmFzZV9hZGRyO1xuJiM0MztcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cdTAwM2VvZl9ub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZiYXNlX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XG4mIzQzO1x0aGFzX2NvbmZpZ3VyYXRpb24gPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7bnZtZW0tY2VsbC1uYW1lc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7KSBcdTAwM2U9IDA7XG4mIzQzO1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGVjdGFibGUpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuJiM0MztcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4mIzQzO1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2NvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbiYjNDM7XHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcbiYjNDM7XHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuJiM0MztcdFx0XHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO1xuJiM0MztvdXRfcHV0X25vZGU6XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlb2Zfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xuJiM0MztcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO291dF9wb3dlcl9vZmY6XG4mIzQzO1x0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4mIzQzO1x0XHRBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDpcbiYjNDM7XHRcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XG4mIzQzO1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbiYjNDM7XHR1MTYgZ2xvYmFsX2NvbmZpZztcbiYjNDM7XHRpbnQgb2xkcGFnZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbiYjNDM7XHRcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0YWZlX2VxX3J4X2RldGVjdCA9XG4mIzQzO1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHRcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xuJiM0MztcdGlmIChvbGRwYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCBvbGRwYWdlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0XHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbiYjNDM7XG4mIzQzO291dF9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXG4mIzQzO1x0cmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYz0gMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfcmVzdGFydF9hbmVnKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXG4mIzQzO1x0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfcG93ZXJfb2ZmOlxuJiM0MztcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCByZXN1bWVfcmV0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBzdXNwZW5kIGNhbGxiYWNrIGlzIGludm9rZWQgd2l0aG91dCB0aGUgcGh5bGliIGxvY2sgaGVsZC4gKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRyZXN1bWVfcmV0ID0gX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXN1bWVfcmV0KVxuJiM0MztcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmICghcGFja2FnZV9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCYjMzQ7LFxuJiM0MztcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4mIzQzO1x0XHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxuJiM0MztcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbiYjNDM7XHRcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgJiM0MzsxLDI4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZpY2Vfbm9kZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xuJiM0MztcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuJiM0MztcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XG4mIzQzO1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlICh1c2VkIGluIEFsbHdpbm5lciBTb0NzKS4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyAoT0ZfTURJTyksIGNvbXBhbmlvbiBJQ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIE5WTUVNIGNlbGxzIHRvIG1hdGNoIGFuZCBwcm9iZS4gSXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0IHdpdGhvdXQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU4NmNhMGYyYWFiYTJjMjhkN2YwZDFmNTBkNmZkOTUxMzM2MjUzYTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA3OjQ3OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwKQEAgLTAsMCAmIzQzOzEsMTY1IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCiYjNDM7JVlBTUwgMS4yCiYjNDM7LS0tCiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IFgtUG93ZXJzIEFDMjAwIGFuZCBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZXMKJiM0MzsKJiM0MzttYWludGFpbmVyczoKJiM0MzsgIC0gSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7CiYjNDM7ZGVzY3JpcHRpb246CiYjNDM7ICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0CiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlCiYjNDM7ICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZAomIzQzOyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJiMzOTtzIEkyQyByZWdpc3RlciBpbnRlcmZhY2UsIHdoaWxlIEFDMzAwIGNvbnRyb2wKJiM0MzsgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFkKJiM0MzsgIGFkZHJlc3MuCiYjNDM7CiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLgomIzQzOyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGEKJiM0MzsgIHBhY2tlZCBOVk1FTSBjb25maWd1cmF0aW9uIGZpZWxkIHRvIHNlbGVjdCB0aGUgYmFja2VuZCBhdCBydW50aW1lLgomIzQzOwomIzQzOyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzCiYjNDM7ICBjb21wbGV0ZWQsIHNvIGl0cyBjaGlsZCBub2RlIHN1cHBsaWVzIHRoZSBkb2N1bWVudGVkIFBIWSBJRC4gVGhlIHBhY2thZ2UgYW5kCiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvCiYjNDM7ICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC4KJiM0MzsKJiM0Mztwcm9wZXJ0aWVzOgomIzQzOyAgY29tcGF0aWJsZToKJiM0MzsgICAgZW51bToKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZQomIzQzOyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UKJiM0MzsKJiM0MzsgIHJlZzoKJiM0MzsgICAgbWF4aW11bTogMzEKJiM0MzsKJiM0MzsgIGNsb2NrczoKJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6CiYjNDM7CiYjNDM7ICB2Y2Mtc3VwcGx5OgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzEKJiM0MzsgICAgICBvbiBBQzMwMC4KJiM0MzsKJiM0MzsgIG52bWVtLWNlbGxzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZwomIzQzOyAgICAgIGNhbGlicmF0aW9uIGNvZGUsIGJpdHMgNyB0aHJvdWdoIDQgYXJlIHJlc2VydmVkLCBiaXQgOCBzZWxlY3RzIEFDMzAwCiYjNDM7ICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDAKJiM0MzsgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seQomIzQzOyAgICAgIHRoZSBsb3cgY2FsaWJyYXRpb24gYml0cyBvciBvbWl0IHRoZSBjZWxsIGFuZCB1c2UgaXRzIGludGVybmFsIGVGdXNlCiYjNDM7ICAgICAgY29weSBpbnN0ZWFkLgomIzQzOwomIzQzOyAgbnZtZW0tY2VsbC1uYW1lczoKJiM0MzsgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb24KJiM0MzsKJiM0MzsgIHgtcG93ZXJzLGFjMjAwOgomIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFBoYW5kbGUgdG8gdGhlIEFDMjAwIGNvbXBhbmlvbiBJQyBkZXNjcmliZWQgYnkgdGhlIHgtcG93ZXJzLGFjMjAwIE1GRAomIzQzOyAgICAgIGJpbmRpbmcuIEl0cyBJMkMgaW50ZXJmYWNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgcGFja2FnZSBjb250cm9sCiYjNDM7ICAgICAgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLgomIzQzOwomIzQzOyAgeC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZDoKJiM0MzsgICAgdHlwZTogYm9vbGVhbgomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBJbnZlcnQgdGhlIHhNSUkgcmVjZWl2ZSBjbG9jayBpbnNpZGUgdGhlIFBIWS4gVGhpcyBpcyByZXF1aXJlZCBieSBzb21lCiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi4KJiM0MzsKJiM0MztwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6CiYjNDM7ICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sIwomIzQzOyAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwCiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gdmNjLXN1cHBseQomIzQzOwomIzQzO2RlcGVuZGVudFJlcXVpcmVkOgomIzQzOyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2UKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgeC1wb3dlcnMsYWMyMDA6IGZhbHNlCiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIGNsb2NrcwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxscwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAtIGNsb2NrcwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxscwomIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzCiYjNDM7ICAgICAgICAtIHgtcG93ZXJzLGFjMjAwCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgICAgICAgICAgLSB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgcmVnOgomIzQzOyAgICAgICAgICBtYXhpbXVtOiA3CiYjNDM7ICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBeZXRoZXJuZXQtcGh5QFthLWYwLTldJiM0MzskOgomIzQzOyAgICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICAgIHJlZzoKJiM0MzsgICAgICAgICAgICAgIG1heGltdW06IDcKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGI0ZWY5MjdmZDRhNjcuLmQzODM1NTk3ZTM3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC00ODQsNiAmIzQzOzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFkKIAloZWxwCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDQKIAomIzQzO2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWQomIzQzOwl0cmlzdGF0ZSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQ09NTU9OX0NMSyAmYW1wOyZhbXA7IE5WTUVNICZhbXA7JmFtcDsgT0ZfTURJTyAmYW1wOyZhbXA7IFJFR1VMQVRPUgomIzQzOwlkZXBlbmRzIG9uIEkyQyB8fCAhSTJDCiYjNDM7CXNlbGVjdCBQSFlfUEFDS0FHRQomIzQzOwloZWxwCiYjNDM7CSAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMAomIzQzOwkgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZCiYjNDM7CSAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sCiYjNDM7CSAgcmVnaXN0ZXJzLgomIzQzOwogY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJCiAJdHJpc3RhdGUgJiMzNDtYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQpAQCAtMTAxLDQgJiM0MzsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpCQkmIzQzOz0gc21zYy5vCiBvYmotJChDT05GSUdfU1RFMTBYUCkJCSYjNDM7PSBzdGUxMFhwLm8KIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSkJJiM0Mzs9IHRlcmFuZXRpY3Mubwogb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKQkmIzQzOz0gdml0ZXNzZS5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKQkmIzQzOz0geHBvd2Vycy8KIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgJiM0Mzs9IHhpbGlueF9nbWlpMnJnbWlpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDMgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSAmIzQzOz0geHBvd2Vycy1hY3gwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZmRkMmEzZGZiZTQxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpAQCAtMCwwICYjNDM7MSwzMTQgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhICZsdDthbmRyZS5wcnp5d2FyYUBhcm0uY29tJmd0OykKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUCTMKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaCTI0MDAwMDAwCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcJCQkweDAwMTQKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFCQkJQklUKDEpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRwkJCTB4MDAxNgomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqLwomIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUcJCQkweDgwMDQKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFRwkJCTB4NjAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWgkJQklUKDIpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0sJCQlHRU5NQVNLKDgsIDQpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOwomIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJdTE2IGVwaHlfY3RsOwomIzQzOwl1bnNpZ25lZCBpbnQgcGh5X2FkZHI7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtlcGh5X2N0bCB8CiYjNDM7CQkocHJpdi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCSBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCkgfAomIzQzOwkJRklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtJmd0O3BoeV9hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsCiYjNDM7CQkJCXVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF93cml0ZShwcml2LSZndDtyZWdtYXAsIHJlZywgdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2Vycihwcml2LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXG4mIzM0OywKJiM0MzsJCQlyZWcsIEVSUl9QVFIocmV0KSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCQkgICBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSBBQzIwMF9FUEhZX1JNSUlfU0VMLAomIzQzOwkJCQkJIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXByaXYtJmd0O2ludGVyZmFjZSA9IGludGVyZmFjZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeV9hZGRyICZndDsgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQgJmFtcDsmYW1wOyBwcml2LSZndDtwaHlfYWRkciA9PSBwaHlfYWRkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtwaHlfYWRkciA9IHBoeV9hZGRyOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uIEFDMjAwCiYjNDM7CSAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb24KJiM0MzsJICogTUZEIHByb3ZpZGVyIGhhcyBjb21wbGV0ZWQgaXRzIGlucHV0LWNsb2NrIHN0YXJ0dXAgZGVsYXkgYmVmb3JlCiYjNDM7CSAqIHB1Ymxpc2hpbmcgdGhlIHJlZ21hcC4KJiM0MzsJICovCiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLAomIzQzOwkJCQkgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsCiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2Rpc2FibGU6CiYjNDM7CS8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqLwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqCiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwKJiM0MzsJCSAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJdW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjsKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKJiM0MzsJdTggYnBzX2VmZnVzZV9jb2RlOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OywgMCk7CiYjNDM7CWlmICghYWMyMDBfbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXG4mIzM0OykpOwomIzQzOwljbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7CiYjNDM7CWlmICghY2xpZW50KSB7CiYjNDM7CQlyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuJiMzNDspKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV9saW5rX2FkZChkZXYsICZhbXA7Y2xpZW50LSZndDtkZXYsCiYjNDM7CQkJICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldmljZV9sb2NrKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlpZiAoZGV2aWNlX2lzX2JvdW5kKCZhbXA7Y2xpZW50LSZndDtkZXYpKQomIzQzOwkJcHJpdi0mZ3Q7cmVnbWFwID0gZGV2X2dldF9yZWdtYXAoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWRldmljZV91bmxvY2soJmFtcDtjbGllbnQtJmd0O2Rldik7CiYjNDM7CWlmICghcHJpdi0mZ3Q7cmVnbWFwKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUiwKJiM0MzsJCQkJICAgICYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X2NsaWVudDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWhhc19jYWxpYnJhdGlvbikgewomIzQzOwkJcmV0ID0gcmVnbWFwX3JlYWQocHJpdi0mZ3Q7cmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRywKJiM0MzsJCQkJICAmYW1wO2ludGVybmFsX2NhbGlicmF0aW9uKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfZXJyb3I7CiYjNDM7CQljYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jdGwgPQomIzQzOwkJRklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwljbGsgPSBjbGtfZ2V0KCZhbXA7Y2xpZW50LSZndDtkZXYsIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKGNsaykpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoY2xrKTsKJiM0MzsJCWdvdG8gb3V0X2Vycm9yOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi8KJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCSAgICBjbGtfcmF0ZSk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MztvdXRfZXJyb3I6CiYjNDM7CXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxuJiMzNDspOwomIzQzO291dF9wdXRfY2xpZW50OgomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0YzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCkBAIC0wLDAgJiM0MzsxLDM4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFoJMjUwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaCTI3MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUcJCQkweDAwCiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0sJCQlHRU5NQVNLKDcsIDYpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpCiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFCQkJQklUKDUpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVAkJQklUKDEpCiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE8JCUJJVCgzKQomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLCQlHRU5NQVNLKDIsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHCQkJMHgwMgomIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUJCUJJVCgxNSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUcJCQkweDA1CiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0sJCQlHRU5NQVNLKDExLCAxMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yCQkJMgomIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUcJCQkweDA2CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXAomIzQzOwkoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcCiYjNDM7CSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFwKJiM0MzsJIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXAomIzQzOwkoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSkKJiM0MzsKJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJCSAgIEFDMzAwX0VQSFlfU0hVVERPV04pOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCQkgICAgQUMzMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1OCBwYWNrYWdlX3N0YXR1czsKJiM0MzsJdTE2IHJlc2V0X3ZhbHVlOwomIzQzOwlpbnQgc3lzX2NvbnRyb2w7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqLwomIzQzOwkJZnNsZWVwKDEwMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi8KJiM0MzsJcmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8CiYjNDM7CQkJCSAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi8KJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBwcml2LSZndDtzeXNfY29udHJvbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpOwomIzQzOwlpZiAoc3lzX2NvbnRyb2wgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzeXNfY29udHJvbDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7CiYjNDM7CWlmICgofnBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT0KJiM0MzsJICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgJmFtcDsgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETzsKJiM0MzsJcHJpdi0mZ3Q7cGFja2FnZV9rbm93biA9IHRydWU7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLAomIzQzOwkJCQkgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsCiYjNDM7CQkJCSAgIHByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJCQkgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX1NZU19JT19WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcG93ZXJfb2ZmOgomIzQzOwlhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwcml2LSZndDt2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O3ZjYykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDt2Y2MpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtjbGspKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXG4mIzM0OykpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0OykpOwomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCQkgICAgIGNsa19yYXRlKSk7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jb25maWcgPQomIzQzOwkJRklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTMyZWQ0MzM1ZDg0MwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKQEAgLTAsMCAmIzQzOzEsNjIxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSUQJCQkJMHgwMDQ0MTQwMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSwlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVwlCSVQoOSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFRwkJCTB4MWYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0sJCQlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8wCQkJCTAKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMQkJCQkxCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzIJCQkJMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV82CQkJCTYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOAkJCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQJQklUKDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSwkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTwkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHCQkweDEyCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUJMHg0ODI0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRQkJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRwkweDE3CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFCUJJVCgzKQomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0sJCUdFTk1BU0soMTQsIDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQJMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHCQkweDEwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFCTB4NTUyMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRQkJMHhmMDAwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHCTB4MTQKJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUJMHg3MDhmCiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4YgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHCQkJMHgxNQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcCiYjNDM7CShGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFwKJiM0MzsJQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUJCTB4MDBiYwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcJCTB4MWQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUwkweDAwNDQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcCiYjNDM7CShBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXAomIzQzOwkgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUykKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvcgomIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMAomIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlCiYjNDM7ICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgcGFja2FnZSBzdGF0ZSBhbmQgbXVsdGktcmVnaXN0ZXIgcG93ZXIgc2VxdWVuY2VzLiAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jazsKJiM0MzsJYm9vbCBpc19hYzMwMDsKJiM0MzsJYm9vbCB1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZzsKJiM0MzsJYm9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIEZJRUxEX0dFVChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRywKJiM0MzsJCQkgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O2NvbnRyb2wtJmd0O3Bvd2VyX29uKHByaXYtJmd0O2NvbnRyb2wsCiYjNDM7CQkJCSAgICAgICBwcml2LSZndDtwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb2ZmKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtjb250cm9sLSZndDtzZXRfaW50ZXJmYWNlKHByaXYtJmd0O2NvbnRyb2wsCiYjNDM7CQkJCQkgICAgcGh5ZGV2LSZndDtpbnRlcmZhY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlkZXZfd2Fybihwcml2LSZndDtwaHlkZXYsCiYjNDM7CQkJICAgICYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9mZiBjb250cm9sIGJsb2NrOiAlcGVcbiYjMzQ7LAomIzQzOwkJCSAgICBFUlJfUFRSKHJldCkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl1OCAqYnVmOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJY2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNlbGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY2VsbCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CW52bWVtX2NlbGxfcHV0KGNlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihidWYpOwomIzQzOwlpZiAoIWxlbiB8fCBsZW4gJmd0OyBzaXplb2YoKnZhbHVlKSkgewomIzQzOwkJa2ZyZWUoYnVmKTsKJiM0MzsJCXJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXZhbCB8PSAodTE2KWJ1ZltpXSAmbHQ7Jmx0OyAoOCAqIGkpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwkqdmFsdWUgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlOwomIzQzOwlib29sIHNlbGVjdGFibGU7CiYjNDM7CWJvb2wgZml4ZWRfYWMzMDA7CiYjNDM7CWJvb2wgaGFzX2NvbmZpZ3VyYXRpb247CiYjNDM7CXU4IGNhbGlicmF0aW9uOwomIzQzOwl1MzIgYmFzZV9hZGRyOwomIzQzOwl1MTYgY29uZmlndXJhdGlvbiA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LSZndDtvZl9ub2RlKTsKJiM0MzsJaWYgKCFwYWNrYWdlX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2Jhc2VfYWRkcik7CiYjNDM7CWlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi0mZ3Q7bWRpby5hZGRyKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWlmICghc2VsZWN0YWJsZSAmYW1wOyZhbXA7ICFmaXhlZF9hYzMwMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsKJiM0MzsJaGFzX2NvbmZpZ3VyYXRpb24gPQomIzQzOwkJb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgJiMzNDtudm1lbS1jZWxsLW5hbWVzJiMzNDssCiYjNDM7CQkJCQkgJiMzNDtjb25maWd1cmF0aW9uJiMzNDspICZndDs9IDA7CiYjNDM7CWlmIChoYXNfY29uZmlndXJhdGlvbikgewomIzQzOwkJcmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7LAomIzQzOwkJCQkJCSZhbXA7Y29uZmlndXJhdGlvbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDtwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzZWxlY3RhYmxlKSB7CiYjNDM7CQlwcml2LSZndDtpc19hYzMwMCA9CiYjNDM7CQkJY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPSBmaXhlZF9hYzMwMDsKJiM0MzsJCWlmIChoYXNfY29uZmlndXJhdGlvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPQomIzQzOwkJICAgIHByaXYtJmd0O2lzX2FjMzAwKSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLAomIzQzOwkJCQljb25maWd1cmF0aW9uKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPQomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkJISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpOwomIzQzOwlwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkID0KJiM0MzsJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsCiYjNDM7CQkJCSAgICAgICYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwKQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgY2FsaWJyYXRpb24pOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtjb250cm9sID0KJiM0MzsJCQlhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICBoYXNfY29uZmlndXJhdGlvbiwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzOwomIzQzO291dF9wdXRfbm9kZToKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSwKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7b2Zfbm9kZSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcHJpdikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwcml2LSZndDtwaHlkZXYgPSBwaHlkZXY7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlLCBwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi8KJiM0MzsJcmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7b3V0X3Bvd2VyX29mZjoKJiM0MzsJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZl93YXJuKHByaXYpOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJdTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LSZndDtpc19hYzMwMCA/CiYjNDM7CQlBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFIDoKJiM0MzsJCUFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7CiYjNDM7CXUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7CiYjNDM7CXUxNiBnbG9iYWxfY29uZmlnOwomIzQzOwlpbnQgb2xkcGFnZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLAomIzQzOwkJCQkgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTsKJiM0MzsJaWYgKHByaXYtJmd0O3htaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpCiYjNDM7CQlnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQgfAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlhZmVfZXFfcnhfZGV0ZWN0ID0KJiM0MzsJCQlBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7CiYjNDM7CQl0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7CiYjNDM7CWlmIChvbGRwYWdlICZsdDsgMCkKJiM0MzsJCXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgb2xkcGFnZSk7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRywKJiM0MzsJCQkgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSywKJiM0MzsJCQkgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCQkgICAgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVCkpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBhZmVfZXFfcnhfZGV0ZWN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRywKJiM0MzsJCQkJICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTsKJiM0MzsKJiM0MztvdXRfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovCiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBnZW5waHlfcmVzdGFydF9hbmVnKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O2xvY2spOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJLyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi8KJiM0MzsJcmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9wb3dlcl9vZmY6CiYjNDM7CWFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlyZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXN1bWVfcmV0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBUaGUgc3VzcGVuZCBjYWxsYmFjayBpcyBpbnZva2VkIHdpdGhvdXQgdGhlIHBoeWxpYiBsb2NrIGhlbGQuICovCiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaHlkZXYtJmd0O2xvY2spOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXJlc3VtZV9yZXQgPSBfX2FjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzOwkJaWYgKHJlc3VtZV9yZXQpCiYjNDM7CQkJcGh5ZGV2X3dhcm4ocGh5ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtmYWlsZWQgdG8gcmVjb3ZlciBmcm9tIHN1c3BlbmQgZXJyb3I6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTsKJiM0MzsJfQomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwaHlkZXYtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBoeWRldi0mZ3Q7bWRpby5kZXYub2Zfbm9kZTsKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7CiYjNDM7CWJvb2wgbWF0Y2g7CiYjNDM7CiYjNDM7CWlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqLwomIzQzOwlwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpOwomIzQzOwlpZiAoIXBhY2thZ2Vfbm9kZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwltYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7KSB8fAomIzQzOwkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CW9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBtYXRjaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7CiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSwKJiM0MzsJCS5uYW1lID0gJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZJiMzNDssCiYjNDM7CQkubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSwKJiM0MzsJCS5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSwKJiM0MzsJCS5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LAomIzQzOwkJLmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCwKJiM0MzsJCS5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLAomIzQzOwkJLnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsCiYjNDM7CX0sCiYjNDM7fTsKJiM0Mzttb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0gewomIzQzOwl7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpOwomIzQzOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7WC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oCkBAIC0wLDAgJiM0MzsxLDI4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOyNpZm5kZWYgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9ICiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUCTE2CiYjNDM7CiYjNDM7c3RydWN0IGRldmljZV9ub2RlOwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgewomIzQzOwlpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQl1bnNpZ25lZCBpbnQgcGh5X2FkZHIpOwomIzQzOwlpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpOwomIzQzOwlpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLAomIzQzOwkJICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTsKJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICoKJiM0MzthYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbik7CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFyZ2V0IGlzIGFtZDY0LCBzbyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcyBwYXRjaCBhZGRzIGEgbmV3IFBIWSBkcml2ZXIgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBjb21wYW5pb24gSUNzLCB3aGljaCBhcmUgZXNzZW50aWFsbHkgRXRoZXJuZXQgUEhZcy4gV2UmIzM5O3ZlIGdvdCBhIGRldmljZSB0cmVlIGJpbmRpbmcsIGEgS2NvbmZpZyBvcHRpb24sIGFuZCB0aGUgYWN0dWFsIGRyaXZlciBmaWxlcy4KCk15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyB0aGluZyBpbiBhIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cD8mIzM0OyBUaGUgY29kZSB0ZWxscyBtZSB0aGVzZSBQSFlzIGFyZSBkZXZpY2UtdHJlZSBiYXNlZC4gVGhleSYjMzk7cmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgZHVyaW5nIGluaXRpYWxpemF0aW9uIChgb2ZfZ2V0X3BhcmVudGAsIGBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZWAsIGBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2VgKS4gU3BlY2lmaWNhbGx5LCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCBleHBlY3RzIGBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGVgIHRvIGJlIHZhbGlkLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZS4KCk5vdywgaG93IGRvZXMgdGhpcyBtZXNoIHdpdGggdGhlIHN5emthbGxlciBlbnZpcm9ubWVudD8gVGhpbmtpbmcgYmFjayB0byB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcHJvamVjdCwgSSByZWNhbGwgYSBzZWN0aW9uIGFib3V0ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgYW5kICYjMzQ7VW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLiYjMzQ7IFdlJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgaWYgQU1ENjQgaW4gUUVNVSBzdXBwb3J0cyB0aGUgY29ycmVjdCBkZXZpY2UgdHJlZSBub2RlIGNvbmZpZ3VyYXRpb24sIG9yIGlmIHN5emthbGxlciBpcyBjYXBhYmxlIG9mIG1vY2tpbmcgdGhlIE1ESU8gUEhZLgoKVGhlIGhhcmR3YXJlIHNlZW1zIHRvIGJlIHNwZWNpZmljIHRvIEFsbHdpbm5lciBTb0NzLCB3aGljaCBpbXBsaWVzIHRoYXQgaXQgbWF5IG5vdCBiZSBwcmVzZW50IG9uIEFNRDY0LiBUaGUgUEhZIGlzIGRldmljZS10cmVlLWJhc2VkLCBhbmQgdGhhdCYjMzk7cyB0aGUgcnViLiBEb2VzIEFNRDY0IFFFTVUgKm5hdGl2ZWx5KiBoYXZlIE9GIG9yIERUIG5vZGVzIGNvbmZpZ3VyZWQgdGhhdCBzeXprYWxsZXIgY2FuIGxldmVyYWdlLCBvciBkb2VzIHN5emthbGxlciBoYXZlIE1ESU8vT0YgZGV2aWNlIHRyZWUgaW5qZWN0aW9uPyBgT0ZfTURJT2AgcmVsaWVzIG9uIGBPRmAsIHNvIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgYmVjYXVzZSBJJiMzOTttIG5vdCBzdXJlIGlmIGl0IGlzIGVuYWJsZWQgb24gQU1ENjQgYnkgZGVmYXVsdC4gSWYgbmVpdGhlciBhcmUsIHRoaXMgaXMgZ29pbmcgdG8gYmUgYSB0b3VnaCBudXQgdG8gY3JhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9GX01ESU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMy1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE1LVx0ZGVmX3RyaXN0YXRlIE9GXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NzIKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIEhhcmR3YXJlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbG9va2VkIGF0IGBhY3gwMF9lcGh5X3Byb2JlYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIGlmIHRoZXJlJiMzOTtzIG5vIGRldmljZSB0cmVlIG5vZGUgKGAhZGV2LSZndDtvZl9ub2RlYCksIGl0IHJldHVybnMgLUVOT0RFVi4gSSB0aGVuIGNoZWNrZWQgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgYW5kIHNhdyB0aGF0IGl0JiMzOTtzIGxvb2tpbmcgZm9yIHNwZWNpZmljIGRldmljZSB0cmVlIGJpbmRpbmdzOiBgJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0O2AsIGAmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZSYjMzQ7YCwgb3IgYCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDtgLiBTbywgdGhpcyBkcml2ZXIgaXMgY2xlYXJseSB0aWVkIHRvIEFsbHdpbm5lciBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRob3NlIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuCgpOb3csIHRoZSBraWxsZXIgaXMgdGhhdCB0aGlzIHJlcXVpcmVzIHNwZWNpZmljIEFsbHdpbm5lciBoYXJkd2FyZSwgb3IgYSB2ZXJ5IHNwZWNpZmljIEFSTSBkZXZpY2V0cmVlIG9uIGEgc3BlY2lmaWMgQWxsd2lubmVyIGJvYXJkLiBJbXBvc3NpYmxlIHRvIGluc3RhbnRpYXRlIG9uIHlvdXIgcnVuLW9mLXRoZS1taWxsIHg4Nl82NCBvciBhbWQ2NCB2aXJ0dWFsIG1hY2hpbmVzIGluIFFFTVUgb3IgR0NFIHdpdGhvdXQgc29tZSB2ZXJ5IHNwZWNpZmljIERUIGVtdWxhdGlvbiwgd2hpY2ggSSBkb3VidCBpcyByZWxldmFudCBpbiB0aGlzIGNhc2UuCgpJIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgd2F5cyB0byByZWFjaCBpdCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgb24gYW1kNjQuIEV2ZW4gd2l0aCBPRiBvdmVybGF5cyBvciBEVCB1bml0IHRlc3RzLCB0aGlzIGRyaXZlciBpcyBmb3IgYW4gRXRoZXJuZXQgUEhZIHRoYXQmIzM5O3MgY29ubmVjdGVkIHZpYSBNRElPL0kyQyB0byBhIGNvbXBhbmlvbiBJQy4gSXQgYWxzbyBuZWVkcyBgT0ZfTURJT2AsIHdoaWNoIGRlcGVuZHMgb24gYENPTkZJR19PRmAuCgpTbywgdGhlIGNvbmNsdXNpb24gaXMgdGhpcyBkcml2ZXIgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLXdpc2UuIEl0JiMzOTtzIGFuIEV0aGVybmV0IFBIWSBzcGVjaWZpY2FsbHkgZm9yIEFsbHdpbm5lciBTb0NzIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgT0YgZGV2aWNldHJlZSBiaW5kaW5ncyBhbmQgdGhlIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuCgpMb29raW5nIGF0IHRoZSBwcm9tcHQmIzM5O3MgaW5zdHJ1Y3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhlICYjMzQ7V0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgY3JpdGVyaWEsIGl0JiMzOTtzIGEgcGVyZmVjdCBtYXRjaCBmb3IgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyAtIHRoaXMgb25lIGlzIHZlbmRvci1zcGVjaWZpYyBhbmQgbmVlZHMgdGhlIGFjdHVhbCBBU0lDL1BDSWUgY2FyZC4gIEluIHRoaXMgY2FzZSwgaXQmIzM5O3Mgc3BlY2lmaWMgQWxsd2lubmVyIHNpbGljb24uCgpJJiMzOTt2ZSBnb3QgdGhlIHBhcmFtZXRlcnM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBhIGNvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHNpdHVhdGlvbi4gIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSAodXNlZCBpbiBBbGx3aW5uZXIgU29DcykuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgKE9GX01ESU8pLCBjb21wYW5pb24gSUNzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBOVk1FTSBjZWxscyB0byBtYXRjaCBhbmQgcHJvYmUuIEl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCB3aXRob3V0IHBoeXNpY2FsIFNvQyBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlICh1c2VkIGluIEFsbHdpbm5lciBTb0NzKS4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyAoT0ZfTURJTyksIGNvbXBhbmlvbiBJQ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIE5WTUVNIGNlbGxzIHRvIG1hdGNoIGFuZCBwcm9iZS4gSXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0IHdpdGhvdXQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDAuNDQ2MzAyODM3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MDAyMDYwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSAodXNlZCBpbiBBbGx3aW5uZXIgU29DcykuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgKE9GX01ESU8pLCBjb21wYW5pb24gSUNzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBOVk1FTSBjZWxscyB0byBtYXRjaCBhbmQgcHJvYmUuIEl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCB3aXRob3V0IHBoeXNpY2FsIFNvQyBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjAwLjQ0NjMxNDExN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4Njk3ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTg2Y2EwZjJhYWJhMmMyOGQ3ZjBkMWY1MGQ2ZmQ5NTEzMzYyNTNhMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA3OjQ3OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lZTkwYzRmZmVjY2ViXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcXG5AQCAtMCwwICsxLDE2NSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOlxcbisgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcXG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXFxuKyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcXG4rICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMncyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxcbisgIGFkZHJlc3MuXFxuK1xcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXFxuKyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGFcXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cXG4rXFxuKyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzXFxuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cXG4rICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGVudW06XFxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxuK1xcbisgIHJlZzpcXG4rICAgIG1heGltdW06IDMxXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcXG4rXFxuKyAgdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcXG4rICAgICAgb24gQUMzMDAuXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgZGVzY3JpYmVkIGJ5IHRoZSB4LXBvd2VycyxhYzIwMCBNRkRcXG4rICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcXG4rICAgICAgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLlxcbitcXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxcbisgICAgdHlwZTogYm9vbGVhblxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcXG4rICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi5cXG4rXFxuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0rJDpcXG4rICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXFxuKyAgICByZXF1aXJlZDpcXG4rICAgICAgLSBjb21wYXRpYmxlXFxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHZjYy1zdXBwbHlcXG4rXFxuK2RlcGVuZGVudFJlcXVpcmVkOlxcbisgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxcbitcXG4rYWxsT2Y6XFxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXG4rICAgIHRoZW46XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY2xvY2tzOiBmYWxzZVxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxcbisgIC0gaWY6XFxuKyAgICAgIHByb3BlcnRpZXM6XFxuKyAgICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICAgIGVudW06XFxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgcmVnOlxcbisgICAgICAgICAgICAgIG1heGltdW06IDdcXG4rXFxuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnB3bSA1XFx1MDAzZTtcXG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcXG4gXFx0aGVscFxcbiBcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxcbiBcXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXFxuK1xcdHRyaXN0YXRlIFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcXFwiXFxuK1xcdGRlcGVuZHMgb24gQ09NTU9OX0NMSyBcXHUwMDI2XFx1MDAyNiBOVk1FTSBcXHUwMDI2XFx1MDAyNiBPRl9NRElPIFxcdTAwMjZcXHUwMDI2IFJFR1VMQVRPUlxcbitcXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbitcXHRoZWxwXFxuK1xcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxcbitcXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXFxuK1xcdCAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sXFxuK1xcdCAgcmVnaXN0ZXJzLlxcbitcXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXFxuIFxcdHRyaXN0YXRlIFxcXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuQEAgLTEwMSw0ICsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXFx0XFx0Kz0gc21zYy5vXFxuIG9iai0kKENPTkZJR19TVEUxMFhQKVxcdFxcdCs9IHN0ZTEwWHAub1xcbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXFx0Kz0gdGVyYW5ldGljcy5vXFxuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcXHQrPSB2aXRlc3NlLm9cXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVxcdCs9IHhwb3dlcnMvXFxuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxuQEAgLTAsMCArMSwzIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgKz0geHBvd2Vycy1hY3gwMC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZmRkMmEzZGZiZTQxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcXG5AQCAtMCwwICsxLDMxNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcXHUwMDNjYW5kcmUucHJ6eXdhcmFAYXJtLmNvbVxcdTAwM2UpXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImFjeDAwLmhcXFwiXFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcXHQzXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcXHQyNDAwMDAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rXFxuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcXHRcXHRcXHQweDAwMTRcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXFx0XFx0XFx0QklUKDEpXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXFx0XFx0XFx0MHgwMDE2XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXFxuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcXHRcXHRcXHQweDgwMDRcXG4rXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXFx0XFx0XFx0MHg2MDAwXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDgsIDQpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFxcdFxcdFxcdEJJVCgxMSlcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbitcXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2N0bCB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtXFx1MDAzZXBoeV9hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWcsIEVSUl9QVFIocmV0KSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpIHtcXG4rXFx0XFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHRcXHRcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdHUxNiBlcGh5X2N0bDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlfYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcXG4rXFx0ICogc3BlY2lmaWVzIG5vIGFkZGl0aW9uYWwgZGVsYXkgYmV0d2VlbiB0aGVzZSBjb250cm9scy4gVGhlIGNvbXBhbmlvblxcbitcXHQgKiBNRkQgcHJvdmlkZXIgaGFzIGNvbXBsZXRlZCBpdHMgaW5wdXQtY2xvY2sgc3RhcnR1cCBkZWxheSBiZWZvcmVcXG4rXFx0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9kaXNhYmxlOlxcbitcXHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IHRydWU7XFxuK1xcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxcbitcXHRcXHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHU4IGJwc19lZmZ1c2VfY29kZTtcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcXG4rXFx0aWYgKCFjbGllbnQpIHtcXG4rXFx0XFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXFxcblxcXCIpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRkZXZpY2VfbG9jayhcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoZGV2aWNlX2lzX2JvdW5kKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldikpXFxuK1xcdFxcdHByaXYtXFx1MDAzZXJlZ21hcCA9IGRldl9nZXRfcmVnbWFwKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldiwgTlVMTCk7XFxuK1xcdGRldmljZV91bmxvY2soXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VyZWdtYXApIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgXFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdFxcdGNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cXG4rXFx0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXFx1MDAyNlxcbitcXHRcXHRcXHQgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spO1xcbitcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCA9XFxuK1xcdFxcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0ssIGJwc19lZmZ1c2VfY29kZSk7XFxuK1xcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cXG4rXFxuK1xcdGNsayA9IGNsa19nZXQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihjbGspKSB7XFxuK1xcdFxcdHJldCA9IFBUUl9FUlIoY2xrKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyb3I7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cXG4rXFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4rXFx0c3dpdGNoIChjbGtfcmF0ZSkge1xcbitcXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxcbitcXHRcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgY2xrX3JhdGUpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cHJpdi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK291dF9lcnJvcjpcXG4rXFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXFxcblxcXCIpO1xcbitvdXRfcHV0X2NsaWVudDpcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcXG5AQCAtMCwwICsxLDM4NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vcGh5bGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlxcdDI1MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcXHQyNzAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDBcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXFx0XFx0R0VOTUFTSygxMSwgOClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcXG4rI2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXFx0XFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXFx0XFx0R0VOTUFTSygyLCAwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXFx0XFx0XFx0MHgwMlxcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXFx0XFx0QklUKDE1KVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXFx0XFx0XFx0MHgwNVxcbisjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCAxMClcXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1xcdFxcdFxcdDB4MDZcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxcXFxuK1xcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcXFxcbitcXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXFxuK1xcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHR1MTYgc3lzX2NvbnRyb2w7XFxuK1xcdHUxNiBlcGh5X2NvbmZpZztcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBwYWNrYWdlX2tub3duO1xcbitcXHRib29sIGludGVybmFsX2RsZG87XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHR1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHQgdTE2IG1hc2ssIHUxNiBzZXQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHR1MTYgdmFsID0gKHJldCBcXHUwMDI2IH5tYXNrKSB8IChzZXQgXFx1MDAyNiBtYXNrKTtcXG4rXFxuK1xcdFxcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcXG4rXFx0XFx0XFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByZWdudW0sIHZhbCk7XFxuK1xcdH1cXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2NvbmZpZyB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxcbitcXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXFxuK1xcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIXByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gP1xcbitcXHRcXHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFxuK1xcdFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1OCBwYWNrYWdlX3N0YXR1cztcXG4rXFx0dTE2IHJlc2V0X3ZhbHVlO1xcbitcXHRpbnQgc3lzX2NvbnRyb2w7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXFxuK1xcdFxcdGZzbGVlcCgxMDAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xcbitcXHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZXN5c19jb250cm9sKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XFxuK1xcdGlmIChzeXNfY29udHJvbCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc3lzX2NvbnRyb2w7XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFx0fVxcbitcXG4rXFx0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xcbitcXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cXG4rXFx0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XFxuK1xcdHByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gPSB0cnVlO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9wb3dlcl9vZmY6XFxuK1xcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcXG4re1xcbitcXHRjbGtfcHV0KGRhdGEpO1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXFxcblxcXCIpKTtcXG4rXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcXFwidmNjXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNldmNjKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cXHUwMDNldmNjKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcXFxuXFxcIikpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWNsaykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcInVuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNsa19yYXRlKSk7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XFxuK1xcbitcXHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXFxuK1xcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcXG4rXFx0cHJpdi1cXHUwMDNlZXBoeV9jb25maWcgPVxcbitcXHRcXHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xcbitcXHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjkzMmVkNDMzNWQ4NDNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xcbkBAIC0wLDAgKzEsNjIxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVxcdTAwM2VcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiYWN4MDAuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9JRFxcdFxcdFxcdFxcdDB4MDA0NDE0MDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1xcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXFx0QklUKDkpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1xcdFxcdFxcdDB4MWZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLXFx0XFx0XFx0R0VOTUFTSygxMiwgOClcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcXHRcXHRcXHRcXHQwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8xXFx0XFx0XFx0XFx0MVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlxcdFxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcXHRcXHRcXHRcXHQ2XFxuKyNkZWZpbmUgQUNYMDBfUEFHRV84XFx0XFx0XFx0XFx0OFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVFxcdEJJVCgxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXFx0XFx0R0VOTUFTSygxLCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cXHRcXHQyXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFR1xcdFxcdDB4MTJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcXHQweDQ4MjRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXFx0XFx0XFx0QklUKDE1KVxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1xcdDB4MTdcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXFx0QklUKDMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcXHRcXHRHRU5NQVNLKDE0LCAxMilcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFxcdDBcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXFx0XFx0MHgxMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcXHQweDU1MjNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcXHRcXHQweGYwMDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXFx0MHgxNFxcbisjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGZcXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXFx0MHg3MDhiXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1xcdFxcdFxcdDB4MTVcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0tcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLXFx0XFx0R0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxcXFxuK1xcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxcXFxuK1xcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcXFxcbitcXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcXHRcXHQweDE4XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcXHRcXHQweDAwYmNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1xcdFxcdDB4MWRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXFx0MHgwMDQ0XFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXFxcXG4rXFx0KEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgfCBcXFxcXFxuK1xcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxcbitcXG4rLypcXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXFxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxcbisgKiBhbmFsb2ctcGFnZSBmaWVsZCBlbmNvZGluZ3MgcmVtYWluIHVucHVibGlzaGVkLCBzbyBrZWVwIHRob3NlIGFzIG9wYXF1ZVxcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cXG4rICovXFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcXG4rXFx0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXFxuK1xcdHN0cnVjdCBtdXRleCBzdGF0ZV9sb2NrO1xcbitcXHRib29sIGlzX2FjMzAwO1xcbitcXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xcbitcXHRib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vwb3dlcl9vbihwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2Vjb250cm9sLVxcdTAwM2Vwb3dlcl9vZmYocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlc2V0X2ludGVyZmFjZShwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgRVJSX1BUUihyZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gZGF0YTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcXG4rXFx0c2l6ZV90IGk7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdHU4ICpidWY7XFxuK1xcdHUxNiB2YWwgPSAwO1xcbitcXG4rXFx0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKGNlbGwpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihjZWxsKTtcXG4rXFxuK1xcdGJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCBcXHUwMDI2bGVuKTtcXG4rXFx0bnZtZW1fY2VsbF9wdXQoY2VsbCk7XFxuK1xcdGlmIChJU19FUlIoYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcXG4rXFx0aWYgKCFsZW4gfHwgbGVuIFxcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcXG4rXFx0XFx0a2ZyZWUoYnVmKTtcXG4rXFx0XFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspXFxuK1xcdFxcdHZhbCB8PSAodTE2KWJ1ZltpXSBcXHUwMDNjXFx1MDAzYyAoOCAqIGkpO1xcbitcXHRrZnJlZShidWYpO1xcbitcXHQqdmFsdWUgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBzZWxlY3RhYmxlO1xcbitcXHRib29sIGZpeGVkX2FjMzAwO1xcbitcXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xcbitcXHR1OCBjYWxpYnJhdGlvbjtcXG4rXFx0dTMyIGJhc2VfYWRkcjtcXG4rXFx0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXFx1MDAzZW9mX25vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXFxcImV0aGVybmV0LXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFxcXCJyZWdcXFwiLCBcXHUwMDI2YmFzZV9hZGRyKTtcXG4rXFx0aWYgKHJldCB8fCBiYXNlX2FkZHIgIT0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcXFwiKTtcXG4rXFx0aWYgKCFzZWxlY3RhYmxlIFxcdTAwMjZcXHUwMDI2ICFmaXhlZF9hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwidW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcbitcXHRoYXNfY29uZmlndXJhdGlvbiA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFxcXCJudm1lbS1jZWxsLW5hbWVzXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJjb25maWd1cmF0aW9uXFxcIikgXFx1MDAzZT0gMDtcXG4rXFx0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XFxuK1xcdFxcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcXFwiY29uZmlndXJhdGlvblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25maWd1cmF0aW9uKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNlbGVjdGFibGUpIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPVxcbitcXHRcXHRcXHRjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaXNfYWMzMDAgPSBmaXhlZF9hYzMwMDtcXG4rXFx0XFx0aWYgKGhhc19jb25maWd1cmF0aW9uIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cXG4rXFx0XFx0ICAgIHByaXYtXFx1MDAzZWlzX2FjMzAwKSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFxcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXFxuK1xcdFxcdFxcdFxcdGNvbmZpZ3VyYXRpb24pO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQhIShjb25maWd1cmF0aW9uIFxcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcXG4rXFx0cHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZCA9XFxuK1xcdFxcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFxcXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXFxcIik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDApXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNhbGlicmF0aW9uKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2Vjb250cm9sID1cXG4rXFx0XFx0XFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRyZXQgPSBQVFJfRVJSX09SX1pFUk8ocHJpdi1cXHUwMDNlY29udHJvbCk7XFxuK1xcbitvdXRfcHV0X25vZGU6XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICAgICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VvZl9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBoeWRldiA9IHBoeWRldjtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqL1xcbitcXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK291dF9wb3dlcl9vZmY6XFxuK1xcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcXG4rb3V0X3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVxcdTAwM2Vpc19hYzMwMCA/XFxuK1xcdFxcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxcbitcXHRcXHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xcbitcXHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xcbitcXHR1MTYgZ2xvYmFsX2NvbmZpZztcXG4rXFx0aW50IG9sZHBhZ2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xcbitcXHRpZiAocHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcXG4rXFx0XFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdGFmZV9lcV9yeF9kZXRlY3QgPVxcbitcXHRcXHRcXHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XFxuK1xcdFxcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcXG4rXFx0fVxcbitcXG4rXFx0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XFxuK1xcdGlmIChvbGRwYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCBvbGRwYWdlKTtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfYWMzMDAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcXG4rXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0ICBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRSk7XFxuK1xcbitvdXRfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYz0gMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfcmVzdGFydF9hbmVnKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG93ZXJfb2ZmO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Bvd2VyX29mZjtcXG4rXFxuK1xcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXFxuK1xcdHJldCA9IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9wb3dlcl9vZmY6XFxuK1xcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdHJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXN1bWVfcmV0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogVGhlIHN1c3BlbmQgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBwaHlsaWIgbG9jayBoZWxkLiAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0cmVzdW1lX3JldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXN1bWVfcmV0KVxcbitcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcXG4rXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBtYXRjaDtcXG4rXFxuK1xcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVxcXCIsXFxuK1xcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxcbitcXHRcXHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxcbitcXHRcXHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcXG4rXFx0XFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXFxuK1xcdFxcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcXG5AQCAtMCwwICsxLDI4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rI2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcXHQxNlxcbitcXG4rc3RydWN0IGRldmljZV9ub2RlO1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XFxuK1xcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xcbitcXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xcbitcXHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xcbit9O1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjAxLjMyODgzMjMwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA3MTc2NTU5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlICh1c2VkIGluIEFsbHdpbm5lciBTb0NzKS4gVGhlIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcyAoT0ZfTURJTyksIGNvbXBhbmlvbiBJQ3MsIHJlZ3VsYXRvcnMsIGNsb2NrcywgYW5kIE5WTUVNIGNlbGxzIHRvIG1hdGNoIGFuZCBwcm9iZS4gSXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0IHdpdGhvdXQgcGh5c2ljYWwgU29DIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ODZjYTBmMmFhYmEyYzI4ZDdmMGQxZjUwZDZmZDk1MTMzNjI1M2EwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNzo0Nzo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZWU5MGM0ZmZlY2NlYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCArMSwxNjUgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xuK1xuK21haW50YWluZXJzOlxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBUaGUgQUMyMDAgYW5kIEFDMzAwIGNvbnRhaW4gY29tcGF0aWJsZSBGYXN0IEV0aGVybmV0IFBIWSBibG9ja3Mgd2hpY2ggcmVwb3J0XG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4rICBwYWNrYWdlIGNvbnRyb2wgcGF0aHMgZGlmZmVyLiBBQzIwMCBwYWNrYWdlIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZFxuKyAgdGhyb3VnaCB0aGUgY29tcGFuaW9uIElDJ3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxuKyAgYWRkcmVzcy5cbitcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXG4rICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYVxuKyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4rXG4rICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXNcbisgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cbisgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuK1xuKyAgcmVnOlxuKyAgICBtYXhpbXVtOiAzMVxuK1xuKyAgY2xvY2tzOlxuKyAgICBtYXhJdGVtczogMVxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcbitcbisgIHZjYy1zdXBwbHk6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMVxuKyAgICAgIG9uIEFDMzAwLlxuK1xuKyAgbnZtZW0tY2VsbHM6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nXG4rICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxuKyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5XG4rICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbisgICAgICBjb3B5IGluc3RlYWQuXG4rXG4rICBudm1lbS1jZWxsLW5hbWVzOlxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxuK1xuKyAgeC1wb3dlcnMsYWMyMDA6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIGRlc2NyaWJlZCBieSB0aGUgeC1wb3dlcnMsYWMyMDAgTUZEXG4rICAgICAgYmluZGluZy4gSXRzIEkyQyBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIGNvbnRyb2xcbisgICAgICByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuXG4rXG4rICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuKyAgICB0eXBlOiBib29sZWFuXG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuKyAgICByZXF1aXJlZDpcbisgICAgICAtIGNvbXBhdGlibGVcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK3JlcXVpcmVkOlxuKyAgLSBjb21wYXRpYmxlXG4rICAtIHZjYy1zdXBwbHlcbitcbitkZXBlbmRlbnRSZXF1aXJlZDpcbisgIG52bWVtLWNlbGxzOiBbIG52bWVtLWNlbGwtbmFtZXMgXVxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjbG9ja3M6IGZhbHNlXG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuKyAgICB0aGVuOlxuKyAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgLSBjbG9ja3NcbisgICAgICAgIC0gbnZtZW0tY2VsbHNcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xuKyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuKyAgLSBpZjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgY29tcGF0aWJsZTpcbisgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgICAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIHJlZzpcbisgICAgICAgICAgbWF4aW11bTogN1xuKyAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgICAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxuKyAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgIHJlZzpcbisgICAgICAgICAgICAgIG1heGltdW06IDdcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgbWRpbyB7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgY2xvY2tzID0gXHUwMDNjXHUwMDI2cHdtIDVcdTAwM2U7XG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFx1MDAzY1x1MDAyNnJlZ18zdjNcdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4rICAgICAgICAgICAgbnZtZW0tY2VsbC1uYW1lcyA9IFwiY29uZmlndXJhdGlvblwiO1xuKyAgICAgICAgICAgIHgtcG93ZXJzLGFjMjAwID0gXHUwMDNjXHUwMDI2YWMyMDBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcIjtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbitcbisuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcbiBcdGhlbHBcbiBcdCAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSB2c2M4MjQ0XG4gXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXG4rXHR0cmlzdGF0ZSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWVwiXG4rXHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbitcdGRlcGVuZHMgb24gSTJDIHx8ICFJMkNcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuK1x0aGVscFxuK1x0ICBFbmFibGUgdGhlIEZhc3QgRXRoZXJuZXQgUEhZIGRyaXZlciBzaGFyZWQgYnkgdGhlIFgtUG93ZXJzIEFDMjAwXG4rXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXG4rXHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuK1x0ICByZWdpc3RlcnMuXG4rXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXG4gXHR0cmlzdGF0ZSBcIlhpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXG5AQCAtMTAxLDQgKzEwMSw1IEBAIG9iai0kKENPTkZJR19TTVNDX1BIWSlcdFx0Kz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCs9IHN0ZTEwWHAub1xuIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSlcdCs9IHRlcmFuZXRpY3Mub1xuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcdCs9IHZpdGVzc2Uub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSlcdCs9IHhwb3dlcnMvXG4gb2JqLSQoQ09ORklHX1hJTElOWF9HTUlJMlJHTUlJKSArPSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICsxLDMgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSArPSB4cG93ZXJzLWFjeDAwLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFmZGQyYTNkZmJlNDFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbkBAIC0wLDAgKzEsMzE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qXG4rICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcdTAwM2NhbmRyZS5wcnp5d2FyYUBhcm0uY29tXHUwMDNlKVxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaTJjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rXG4rI2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFR1x0XHRcdDB4MDAxNFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRVx0XHRcdEJJVCgxKVxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbisjZGVmaW5lIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbisjZGVmaW5lIEFDMjAwX0VGVVNFX0VQSFlfUkVHXHRcdFx0MHg4MDA0XG4rXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbisjZGVmaW5lIEFDMjAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0QklUKDIpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcbitcdHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDtcbitcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHUxNiBlcGh5X2N0bDtcbitcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwgOiAwKSB8XG4rXHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgcmVnLCB1MTYgdmFsdWUpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSByZWdpc3RlciAlI3g6ICVwZVxcblwiLFxuK1x0XHRcdHJlZywgRVJSX1BUUihyZXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0IGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1MTYgZXBoeV9jdGw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbitcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VwaHlfYWRkciA9IHBoeV9hZGRyO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0ZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7XG4rXG4rXHQvKlxuK1x0ICogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gQUMyMDBcbitcdCAqIHNwZWNpZmllcyBubyBhZGRpdGlvbmFsIGRlbGF5IGJldHdlZW4gdGhlc2UgY29udHJvbHMuIFRoZSBjb21wYW5pb25cbitcdCAqIE1GRCBwcm92aWRlciBoYXMgY29tcGxldGVkIGl0cyBpbnB1dC1jbG9jayBzdGFydHVwIGRlbGF5IGJlZm9yZVxuK1x0ICogcHVibGlzaGluZyB0aGUgcmVnbWFwLlxuK1x0ICovXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZGlzYWJsZTtcbitcbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsXG4rXHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK1xuK2Vycl9kaXNhYmxlOlxuK1x0LyogQXR0ZW1wdCBldmVyeSBzdGVwIG9mIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSBhZnRlciBhIHBhcnRpYWwgc3RhcnQuICovXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYnBzX2VmZnVzZV9jb2RlO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCJ4LXBvd2VycyxhYzIwMFwiLCAwKTtcbitcdGlmICghYWMyMDBfbm9kZSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJtaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwiKSk7XG4rXHRjbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTtcbitcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuK1x0aWYgKCFjbGllbnQpIHtcbitcdFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiQUMyMDAgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkXFxuXCIpKTtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbitcdFx0XHQgICAgIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRkZXZpY2VfbG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdGlmIChkZXZpY2VfaXNfYm91bmQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpXG4rXHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRkZXZpY2VfdW5sb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlZ21hcCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbitcdFx0XHRcdCAgICBcIkFDMjAwIGRyaXZlciBpcyBub3QgcmVhZHlcXG5cIik7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRpZiAoIWhhc19jYWxpYnJhdGlvbikge1xuK1x0XHRyZXQgPSByZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRUZVU0VfRVBIWV9SRUcsXG4rXHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9lcnJvcjtcbitcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbitcdH1cbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJwc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY3RsID1cbitcdFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdGNsayA9IGNsa19nZXQoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4rXHRpZiAoSVNfRVJSKGNsaykpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihjbGspO1xuK1x0XHRnb3RvIG91dF9lcnJvcjtcbitcdH1cbitcbitcdC8qIFRoZSBib3VuZCBBQzIwMCBwcm92aWRlciBlbmFibGVzIGFuZCBleGNsdXNpdmVseSBwaW5zIHRoaXMgcmF0ZS4gKi9cbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNsayk7XG4rXHRjbGtfcHV0KGNsayk7XG4rXG4rXHRzd2l0Y2ggKGNsa19yYXRlKSB7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuK1x0XHRwcml2LVx1MDAzZWVwaHlfY3RsIHw9IEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxuXCIsXG4rXHRcdFx0XHQgICAgY2xrX3JhdGUpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rXG4rb3V0X2Vycm9yOlxuK1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBBQzIwMCBjb250cm9sXFxuXCIpO1xuK291dF9wdXRfY2xpZW50OlxuK1x0cHV0X2RldmljZShcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbitcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCArMSwzODcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjVfTUhaXHQyNTAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1x0XHRcdEdFTk1BU0soNywgNilcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcbisjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbisjZGVmaW5lIEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEVcdFx0QklUKDQpXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbisjZGVmaW5lIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXHRcdEdFTk1BU0soMiwgMClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4rI2RlZmluZSBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRVx0XHRCSVQoMTUpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuKyNkZWZpbmUgQUMzMDBfTURJT19EUlZfTUFTS1x0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgQUMzMDBfTUlJX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgMTApXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbisjZGVmaW5lIEFDMzAwX0NMS0lOX1BBRF9FTkFCTEVcdFx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRVx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05GSUdfUkVHXHRcdFx0MHgwNlxuKyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX01BU0tcdFx0R0VOTUFTSygxNSwgMTIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlx0XHRcdEJJVCgwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbitcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fR0FUSU5HX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfCBcXFxuK1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXFxcbitcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4rXHQgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSlcbitcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbitcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcbitcdHN0cnVjdCBjbGsgKmNsaztcbitcdHUxNiBzeXNfY29udHJvbDtcbitcdHUxNiBlcGh5X2NvbmZpZztcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXHRib29sIHBhY2thZ2Vfa25vd247XG4rXHRib29sIGludGVybmFsX2RsZG87XG4rXHRib29sIHN1cHBseV9lbmFibGVkO1xuK1x0Ym9vbCBwb3dlcmVkO1xuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGludFxuK2FjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHR1MTYgdmFsKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxuK1x0XHRcdFx0IHUxNiBtYXNrLCB1MTYgc2V0KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbitcdFx0dTE2IHZhbCA9IChyZXQgXHUwMDI2IH5tYXNrKSB8IChzZXQgXHUwMDI2IG1hc2spO1xuK1xuK1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4rXHRcdFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCxcbitcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbitcdH1cbitcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cdTAwM2VwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbitcdFx0KHByaXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0IEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbit9XG4rXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0LypcbitcdCAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkXG4rXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4rXHQgKiBib290bG9hZGVyIGJ5IGFzc2VydGluZyBvbmx5IHRoZSBFUEhZIHJlc2V0LlxuK1x0ICovXG4rXHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0QUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0aW50IGVycjtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4rXHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1xuK1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuK1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuK1x0XHRlbHNlIGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXG4rXHRyZXR1cm4gYWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbit9XG4rXG4rc3RhdGljIGludFxuK2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9STUlJX1NFTCxcbitcdFx0XHRcdFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4rXHRpZiAoIXJldClcbitcdFx0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBpbnRlcmZhY2U7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXG4re1xuK1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHR1OCBwYWNrYWdlX3N0YXR1cztcbitcdHUxNiByZXNldF92YWx1ZTtcbitcdGludCBzeXNfY29udHJvbDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKCFwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuK1xuK1x0XHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXG4rXHRcdGZzbGVlcCgxMDAwMCk7XG4rXHR9XG4rXG4rXHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbitcbitcdC8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi9cbitcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbitcdFx0XHRcdCAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgICBwcml2LVx1MDAzZXN5c19jb250cm9sKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuK1x0aWYgKHN5c19jb250cm9sIFx1MDAzYyAwKSB7XG4rXHRcdHJldCA9IHN5c19jb250cm9sO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4rXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSAhPVxuK1x0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcdTAwMjYgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETztcbitcdHByaXYtXHUwMDNlcGFja2FnZV9rbm93biA9IHRydWU7XG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbitcdFx0XHRcdCAgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA/XG4rXHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdCAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHRmc2xlZXAoMTAwMDApO1xuK1xuK1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuK1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9wb3dlcl9vZmY6XG4rXHRhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4re1xuK1x0Y2xrX3B1dChkYXRhKTtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuK1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cIikpO1xuK1x0cHJpdi1cdTAwM2VwaHlkZXYgPSBwaHlkZXY7XG4rXG4rXHRwcml2LVx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXCJ2Y2NcIik7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNldmNjKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcblwiKSk7XG4rXG4rXHRwcml2LVx1MDAzZWNsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2VjbGspKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXFxuXCIpKTtcbitcbitcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcbitcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXFxuXCIpKTtcbitcbitcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXHUwMDNlY2xrKTtcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4rXHRcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjbGtfcmF0ZSkpO1xuK1x0fVxuK1x0cHJpdi1cdTAwM2VzeXNfY29udHJvbCB8PSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUztcbitcbitcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbitcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFx1MDAyNlxuK1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4rXHRwcml2LVx1MDAzZWVwaHlfY29uZmlnID1cbitcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTtcbitcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbitcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vbiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29uO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbitcdC8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi9cbitcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbitcbitcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTMyZWQ0MzM1ZDg0M1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCArMSw2MjEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbitcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0tcdEdFTk1BU0soMywgMClcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcdEJJVCg5KVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfTUFTS1x0XHRcdEdFTk1BU0soMTIsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzBcdFx0XHRcdDBcbisjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXHRcdFx0XHQyXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzZcdFx0XHRcdDZcbisjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfR0xPQkFMX0NPTkZJR19SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1x0XHQyXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUdcdFx0MHgxMlxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFXHQweDQ4MjRcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcdFx0XHRCSVQoMTUpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUdcdDB4MTdcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXHQwXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVx0MHg1NTIzXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUdcdFx0MHgxM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHXHQweDE0XG4rI2RlZmluZSBBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGZcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXHRcdFx0MHgxNVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xME1fTUFTS1x0XHRHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRShfMTAwbSwgXzEwbSkgXFxcbitcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuK1x0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFIFxcXG4rXHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1x0XHQweDE4XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVx0XHQweDAwYmNcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUU1x0MHgwMDQ0XG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbitcdChBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXFxcbitcdCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTKVxuK1xuKy8qXG4rICogQW5vdGhlciBpbnRlZ3JhdGlvbiBvZiB0aGlzIGV4YWN0LUlEIFBIWSBkb2N1bWVudHMgaXRzIGRpZ2l0YWwgdmVuZG9yXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4rICogYW5hbG9nLXBhZ2UgZmllbGQgZW5jb2RpbmdzIHJlbWFpbiB1bnB1Ymxpc2hlZCwgc28ga2VlcCB0aG9zZSBhcyBvcGFxdWVcbisgKiB2ZW5kb3IgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluc3RlYWQgb2YgaW52ZW50aW5nIGJpdCBkZWZpbml0aW9ucy5cbisgKi9cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2IHtcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xuK1x0LyogU2VyaWFsaXplcyBwYWNrYWdlIHN0YXRlIGFuZCBtdWx0aS1yZWdpc3RlciBwb3dlciBzZXF1ZW5jZXMuICovXG4rXHRzdHJ1Y3QgbXV0ZXggc3RhdGVfbG9jaztcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHBoeWRldl93YXJuKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdCAgICBcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxuXCIsXG4rXHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjeDAwX2VwaHlfY29udHJvbF9yZWxlYXNlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbitcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSwgdTE2ICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDtcbitcdHNpemVfdCBpO1xuK1x0c2l6ZV90IGxlbjtcbitcdHU4ICpidWY7XG4rXHR1MTYgdmFsID0gMDtcbitcbitcdGNlbGwgPSBvZl9udm1lbV9jZWxsX2dldChub2RlLCBuYW1lKTtcbitcdGlmIChJU19FUlIoY2VsbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuK1xuK1x0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFx1MDAyNmxlbik7XG4rXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbitcdGlmIChJU19FUlIoYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoYnVmKTtcbitcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbitcdFx0a2ZyZWUoYnVmKTtcbitcdFx0cmV0dXJuIGxlbiA/IC1FUkFOR0UgOiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGVuOyBpKyspXG4rXHRcdHZhbCB8PSAodTE2KWJ1ZltpXSBcdTAwM2NcdTAwM2MgKDggKiBpKTtcbitcdGtmcmVlKGJ1Zik7XG4rXHQqdmFsdWUgPSB2YWw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgc2VsZWN0YWJsZTtcbitcdGJvb2wgZml4ZWRfYWMzMDA7XG4rXHRib29sIGhhc19jb25maWd1cmF0aW9uO1xuK1x0dTggY2FsaWJyYXRpb247XG4rXHR1MzIgYmFzZV9hZGRyO1xuK1x0dTE2IGNvbmZpZ3VyYXRpb24gPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LVx1MDAzZW9mX25vZGUpO1xuK1x0aWYgKCFwYWNrYWdlX25vZGUpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIpKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwiUEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwicmVnXCIsIFx1MDAyNmJhc2VfYWRkcik7XG4rXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRzZWxlY3RhYmxlID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgIFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0Zml4ZWRfYWMzMDAgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXG4rXHRoYXNfY29uZmlndXJhdGlvbiA9XG4rXHRcdG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhwYWNrYWdlX25vZGUsIFwibnZtZW0tY2VsbC1uYW1lc1wiLFxuK1x0XHRcdFx0XHQgXCJjb25maWd1cmF0aW9uXCIpIFx1MDAzZT0gMDtcbitcdGlmIChoYXNfY29uZmlndXJhdGlvbikge1xuK1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCJjb25maWd1cmF0aW9uXCIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgXCJmYWlsZWQgdG8gcmVhZCBwYWNrYWdlIGNvbmZpZ3VyYXRpb25cXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH0gZWxzZSBpZiAoc2VsZWN0YWJsZSB8fCBmaXhlZF9hYzMwMCkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHR9XG4rXG4rXHRpZiAoc2VsZWN0YWJsZSkge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID1cbitcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpdi1cdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xuK1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxuK1x0XHQgICAgcHJpdi1cdTAwM2Vpc19hYzMwMCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgXCJjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcXG5cIik7XG4rXHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4rXHRcdH1cbitcdH1cbitcbitcdGNhbGlicmF0aW9uID0gRklFTERfR0VUKEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX01BU0ssXG4rXHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbitcbitcdHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPVxuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuK1x0XHQhIShjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xuK1x0cHJpdi1cdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cbitcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdCAgICAgIFwieC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZFwiKTtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwKVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0ZWxzZVxuK1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuK1x0XHRcdGFjMjAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4rXHRcdFx0XHRcdCAgICAgIGNhbGlicmF0aW9uKTtcbitcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVx1MDAzZWNvbnRyb2wpO1xuK1xuK291dF9wdXRfbm9kZTpcbitcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuK1x0aW50IHJldDtcbitcbitcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHByaXYtXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9pbml0X3BhY2thZ2UocGh5ZGV2LCBwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcblwiKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdC8qIEFDeDAwIGNhbiBhY2tub3dsZWRnZSByZXNldCBpbiBwb3dlci1kb3duIHdpdGhvdXQgcmVzdGFydGluZy4gKi9cbitcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3dlcl9vZmY7XG4rXG4rXHRnb3RvIG91dF91bmxvY2s7XG4rXG4rb3V0X3Bvd2VyX29mZjpcbitcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmZfd2Fybihwcml2KTtcbitvdXRfdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IF9fYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCBvbGRwYWdlKTtcbitcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4rXHRcdFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHRcdCAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgYWZlX2VxX3J4X2RldGVjdCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuK1x0XHRcdFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFRywgdHhfbGV2ZWxfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRSk7XG4rXG4rb3V0X3Jlc3RvcmVfcGFnZTpcbitcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIFJlc3RvcmUgdGhlIHN0YW5kYXJkIEVFRSBwb2xpY3kgcmV0YWluZWQgYnkgcGh5bGliIGFjcm9zcyByZXNldHMuICovXG4rXHRyZXQgPSBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gZ2VucGh5X3Jlc3RhcnRfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0cmV0ID0gX19hY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19hY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXG4rXHRyZXQgPSBfX2FjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Bvd2VyX29mZjtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9wb3dlcl9vZmY6XG4rXHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmX3dhcm4ocHJpdik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdHJldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogVGhlIHN1c3BlbmQgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRob3V0IHRoZSBwaHlsaWIgbG9jayBoZWxkLiAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1xuK1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0cmVzdW1lX3JldCA9IF9fYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rb3V0X3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBtYXRjaDtcbitcbitcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbitcdGlmICghcGFja2FnZV9ub2RlKVxuK1x0XHRyZXR1cm4gMDtcbitcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCIpIHx8XG4rXHRcdG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xuK1xuK1x0cmV0dXJuIG1hdGNoO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHtcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuK1x0XHQubmFtZSA9IFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVwiLFxuK1x0XHQubWF0Y2hfcGh5X2RldmljZSA9IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZSxcbitcdFx0LnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSxcbitcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZSA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZSxcbitcdFx0LnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsXG4rXHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4rXHRcdC5kaXNhYmxlX2F1dG9ub21vdXNfZWVlID0gYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlLFxuK1x0XHQuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCxcbitcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuK1x0fSxcbit9O1xuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7XG4rXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuK1x0eyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbitcbitNT0RVTEVfQVVUSE9SKFwiSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxuQEAgLTAsMCArMSwyOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisjaWZuZGVmIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuKyNkZWZpbmUgX19EUklWRVJTX05FVF9QSFlfWFBPV0VSU19BQ1gwMF9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuK1xuKyNkZWZpbmUgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VUXHQxNlxuK1xuK3N0cnVjdCBkZXZpY2Vfbm9kZTtcbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIHtcbitcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdHVuc2lnbmVkIGludCBwaHlfYWRkcik7XG4rXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xuK1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xuK307XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuK1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pO1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDEuMzI4ODM2MTY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM3NTg5NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSB0YXJnZXQgaXMgYW1kNjQsIHNvIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBQSFkgZHJpdmVyIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcywgd2hpY2ggYXJlIGVzc2VudGlhbGx5IEV0aGVybmV0IFBIWXMuIFdlJ3ZlIGdvdCBhIGRldmljZSB0cmVlIGJpbmRpbmcsIGEgS2NvbmZpZyBvcHRpb24sIGFuZCB0aGUgYWN0dWFsIGRyaXZlciBmaWxlcy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJDYW4gd2UgZXZlbiByZWFjaCB0aGlzIHRoaW5nIGluIGEgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwP1wiIFRoZSBjb2RlIHRlbGxzIG1lIHRoZXNlIFBIWXMgYXJlIGRldmljZS10cmVlIGJhc2VkLiBUaGV5J3JlIGxvb2tpbmcgZm9yIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGR1cmluZyBpbml0aWFsaXphdGlvbiAoYG9mX2dldF9wYXJlbnRgLCBgb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGVgLCBgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlYCkuIFNwZWNpZmljYWxseSwgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgZXhwZWN0cyBgcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGVgIHRvIGJlIHZhbGlkLiBUaGlzIGlzIHRoZSBjcml0aWNhbCBwaWVjZS5cblxuTm93LCBob3cgZG9lcyB0aGlzIG1lc2ggd2l0aCB0aGUgc3l6a2FsbGVyIGVudmlyb25tZW50PyBUaGlua2luZyBiYWNrIHRvIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSBwcm9qZWN0LCBJIHJlY2FsbCBhIHNlY3Rpb24gYWJvdXQgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBhbmQgXCJVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuXCIgV2UndmUgZ290IHRvIGNvbnNpZGVyIGlmIEFNRDY0IGluIFFFTVUgc3VwcG9ydHMgdGhlIGNvcnJlY3QgZGV2aWNlIHRyZWUgbm9kZSBjb25maWd1cmF0aW9uLCBvciBpZiBzeXprYWxsZXIgaXMgY2FwYWJsZSBvZiBtb2NraW5nIHRoZSBNRElPIFBIWS5cblxuVGhlIGhhcmR3YXJlIHNlZW1zIHRvIGJlIHNwZWNpZmljIHRvIEFsbHdpbm5lciBTb0NzLCB3aGljaCBpbXBsaWVzIHRoYXQgaXQgbWF5IG5vdCBiZSBwcmVzZW50IG9uIEFNRDY0LiBUaGUgUEhZIGlzIGRldmljZS10cmVlLWJhc2VkLCBhbmQgdGhhdCdzIHRoZSBydWIuIERvZXMgQU1ENjQgUUVNVSAqbmF0aXZlbHkqIGhhdmUgT0Ygb3IgRFQgbm9kZXMgY29uZmlndXJlZCB0aGF0IHN5emthbGxlciBjYW4gbGV2ZXJhZ2UsIG9yIGRvZXMgc3l6a2FsbGVyIGhhdmUgTURJTy9PRiBkZXZpY2UgdHJlZSBpbmplY3Rpb24/IGBPRl9NRElPYCByZWxpZXMgb24gYE9GYCwgc28gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnLCBiZWNhdXNlIEknbSBub3Qgc3VyZSBpZiBpdCBpcyBlbmFibGVkIG9uIEFNRDY0IGJ5IGRlZmF1bHQuIElmIG5laXRoZXIgYXJlLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgdG91Z2ggbnV0IHRvIGNyYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMyNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjA2LjcwNDczNjI1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE5OTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfTURJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz05PWNvbmZpZyBGV05PREVfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNDpjb25maWcgT0ZfTURJT1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNS1cXHRkZWZfdHJpc3RhdGUgT0ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDc6NDg6MDYuNzgyOTQ2ODQ0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2MzQ5ODQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBIYXJkd2FyZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBsb29rZWQgYXQgYGFjeDAwX2VwaHlfcHJvYmVgLiBSaWdodCBvZmYgdGhlIGJhdCwgaWYgdGhlcmUncyBubyBkZXZpY2UgdHJlZSBub2RlIChgIWRldi1cdTAwM2VvZl9ub2RlYCksIGl0IHJldHVybnMgLUVOT0RFVi4gSSB0aGVuIGNoZWNrZWQgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgYW5kIHNhdyB0aGF0IGl0J3MgbG9va2luZyBmb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3M6IGBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiYCwgYFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXCJgLCBvciBgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcImAuIFNvLCB0aGlzIGRyaXZlciBpcyBjbGVhcmx5IHRpZWQgdG8gQWxsd2lubmVyIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdGhvc2UgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy5cblxuTm93LCB0aGUga2lsbGVyIGlzIHRoYXQgdGhpcyByZXF1aXJlcyBzcGVjaWZpYyBBbGx3aW5uZXIgaGFyZHdhcmUsIG9yIGEgdmVyeSBzcGVjaWZpYyBBUk0gZGV2aWNldHJlZSBvbiBhIHNwZWNpZmljIEFsbHdpbm5lciBib2FyZC4gSW1wb3NzaWJsZSB0byBpbnN0YW50aWF0ZSBvbiB5b3VyIHJ1bi1vZi10aGUtbWlsbCB4ODZfNjQgb3IgYW1kNjQgdmlydHVhbCBtYWNoaW5lcyBpbiBRRU1VIG9yIEdDRSB3aXRob3V0IHNvbWUgdmVyeSBzcGVjaWZpYyBEVCBlbXVsYXRpb24sIHdoaWNoIEkgZG91YnQgaXMgcmVsZXZhbnQgaW4gdGhpcyBjYXNlLlxuXG5JIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgd2F5cyB0byByZWFjaCBpdCBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgb24gYW1kNjQuIEV2ZW4gd2l0aCBPRiBvdmVybGF5cyBvciBEVCB1bml0IHRlc3RzLCB0aGlzIGRyaXZlciBpcyBmb3IgYW4gRXRoZXJuZXQgUEhZIHRoYXQncyBjb25uZWN0ZWQgdmlhIE1ESU8vSTJDIHRvIGEgY29tcGFuaW9uIElDLiBJdCBhbHNvIG5lZWRzIGBPRl9NRElPYCwgd2hpY2ggZGVwZW5kcyBvbiBgQ09ORklHX09GYC5cblxuU28sIHRoZSBjb25jbHVzaW9uIGlzIHRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS13aXNlLiBJdCdzIGFuIEV0aGVybmV0IFBIWSBzcGVjaWZpY2FsbHkgZm9yIEFsbHdpbm5lciBTb0NzIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgT0YgZGV2aWNldHJlZSBiaW5kaW5ncyBhbmQgdGhlIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuXG5cbkxvb2tpbmcgYXQgdGhlIHByb21wdCdzIGluc3RydWN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBcIldIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZVwiIGNyaXRlcmlhLCBpdCdzIGEgcGVyZmVjdCBtYXRjaCBmb3IgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiAtIHRoaXMgb25lIGlzIHZlbmRvci1zcGVjaWZpYyBhbmQgbmVlZHMgdGhlIGFjdHVhbCBBU0lDL1BDSWUgY2FyZC4gIEluIHRoaXMgY2FzZSwgaXQncyBzcGVjaWZpYyBBbGx3aW5uZXIgc2lsaWNvbi5cblxuSSd2ZSBnb3QgdGhlIHBhcmFtZXRlcnM6IGBXb3J0aEZ1enppbmc6IGZhbHNlYCwgYEZvY3VzU3ltYm9sczogW11gLCBgRW5hYmxlQ29uZmlnczogW11gLCBhbmQgdGhlIHJlYXNvbmluZyBpcyBhIGNvbmNpc2UgZXhwbGFuYXRpb24gb2YgdGhlIHNpdHVhdGlvbi4gIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NzIsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjEyLjA0NjQ1MDY1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgKHVzZWQgaW4gQWxsd2lubmVyIFNvQ3MpLiBUaGUgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzIChPRl9NRElPKSwgY29tcGFuaW9uIElDcywgcmVndWxhdG9ycywgY2xvY2tzLCBhbmQgTlZNRU0gY2VsbHMgdG8gbWF0Y2ggYW5kIHByb2JlLiBJdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQgd2l0aG91dCBwaHlzaWNhbCBTb0MgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSAodXNlZCBpbiBBbGx3aW5uZXIgU29DcykuIFRoZSBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMgKE9GX01ESU8pLCBjb21wYW5pb24gSUNzLCByZWd1bGF0b3JzLCBjbG9ja3MsIGFuZCBOVk1FTSBjZWxscyB0byBtYXRjaCBhbmQgcHJvYmUuIEl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NCB3aXRob3V0IHBoeXNpY2FsIFNvQyBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA3OjQ4OjEyLjA0NjQ5MTg3N1oiLCJTZXEiOjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowrgbpm[1] Phase: Running StartedAt: 2026-09-07 07:48:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrgbpm[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 07:48:24 +0000 UTC FinishedAt: 2026-09-07 07:48:29 +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,}