Name: series-workflow5r2vz Phase: Failed StartedAt: 2026-08-11 23:36:40 +0000 UTC FinishedAt: 2026-08-11 23:39:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r2vz[0] Phase: Succeeded StartedAt: 2026-08-11 23:36:40 +0000 UTC FinishedAt: 2026-08-11 23:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r2vz[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 23:36:40 +0000 UTC FinishedAt: 2026-08-11 23:39:07 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgYW5kIG1hdGNoIGZ1bmN0aW9ucyBzdHJpY3RseSByZXF1aXJlIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzLCBjb21wYXRpYmxlcywgYW5kIGhhcmR3YXJlIGRlcGVuZGVuY2llcyAoc3VjaCBhcyBJMkMgY2xpZW50cyB3aXRoIHJlZ21hcHMsIGNsb2NrcywgcmVndWxhdG9ycywgYW5kIE5WTUVNIGNlbGxzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmJhNzAyODJjYWI2ZjZkM2E3ZDU5M2NkZjgwZTgyNmI2ZTY3NGNmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIzOjM4OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZlNTdiZDE2M2RkN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTU0IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4mIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcbiYjNDM7ICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMmIzM5O3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuJiM0MzsgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFlcbiYjNDM7ICBhZGRyZXNzLlxuJiM0MztcbiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxuJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4mIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4mIzQzO1xuJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXG4mIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhpbXVtOiAzMVxuJiM0MztcbiYjNDM7ICBjbG9ja3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6XG4mIzQzO1xuJiM0MzsgIHZjYy1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXG4mIzQzOyAgICAgIG9uIEFDMzAwLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcbiYjNDM7ICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbiYjNDM7ICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcbiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcbiYjNDM7ICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbiYjNDM7ICAgICAgY29weSBpbnN0ZWFkLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOlxuJiM0MzsgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMsYWMyMDA6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIHByb3ZpZGluZyBJMkMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlXG4mIzQzOyAgICAgIGNvbnRyb2wgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLlxuJiM0MztcbiYjNDM7ICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuJiM0MzsgICAgdHlwZTogYm9vbGVhblxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi5cbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6XG4mIzQzOyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbiYjNDM7ICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuJiM0MzsgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgIC0gY29tcGF0aWJsZVxuJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSB2Y2Mtc3VwcGx5XG4mIzQzO1xuJiM0MztkZXBlbmRlbnRSZXF1aXJlZDpcbiYjNDM7ICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2VcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgbWF4aW11bTogN1xuJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIGNsb2Nrc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBjbG9ja3NcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzO1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgJiM0Mzs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMSw0ICYjNDM7MTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQmIzQzOz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwzIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4mIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDFmNzFmNjM1NGZlMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXHQzXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEVcdFx0XHRCSVQoMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbiYjNDM7I2RlZmluZSBBQzIwMF9FRlVTRV9FUEhZX1JFR1x0XHRcdDB4ODAwNFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7XG4mIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHUxNiBlcGh5X2N0bDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHN1cHBseV9lbmFibGVkO1xuJiM0MztcdGJvb2wgcG93ZXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWcsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbiYjNDM7XHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcbiYjNDM7XG4mIzQzO1x0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9kaXNhYmxlOlxuJiM0MztcdC8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuJiM0MztcdHU4IGJwc19lZmZ1c2VfY29kZTtcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcJiMzNDt2Y2NcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7eC1wb3dlcnMsYWMyMDBcJiMzNDssIDApO1xuJiM0MztcdGlmICghYWMyMDBfbm9kZSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDttaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwmIzM0OykpO1xuJiM0MztcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuJiM0MztcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuJiM0MztcdGlmICghY2xpZW50KSB7XG4mIzQzO1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cJiMzNDspKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV90cnlsb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0ZGV2aWNlX3VubG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2N0bCA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNsaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoY2xrKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiYjNDM7XHRjbGtfcHV0KGNsayk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbiYjNDM7XHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGNsa19yYXRlKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4mIzQzO1xuJiM0MztvdXRfZXJyb3I6XG4mIzQzO1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxcblwmIzM0Oyk7XG4mIzQzO291dF9wdXRfY2xpZW50OlxuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzg3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlx0MjUwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1x0XHRHRU5NQVNLKDExLCA4KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1x0XHRHRU5NQVNLKDIsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4mIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEVcdFx0QklUKDE1KVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuJiM0MzsjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1x0XHRcdDB4MDZcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbiYjNDM7XHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4mIzQzO1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuJiM0MztcbiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdHUxNiBzeXNfY29udHJvbDtcbiYjNDM7XHR1MTYgZXBoeV9jb25maWc7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHBhY2thZ2Vfa25vd247XG4mIzQzO1x0Ym9vbCBpbnRlcm5hbF9kbGRvO1xuJiM0MztcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4mIzQzO1x0Ym9vbCBwb3dlcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4mIzQzO1x0XHRcdFx0dTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdHUxNiB2YWwgPSAocmV0IFx1MDAyNiB+bWFzaykgfCAoc2V0IFx1MDAyNiBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4mIzQzO1x0XHRcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuJiM0MztcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbiYjNDM7XHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4mIzQzO1x0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1OCBwYWNrYWdlX3N0YXR1cztcbiYjNDM7XHR1MTYgcmVzZXRfdmFsdWU7XG4mIzQzO1x0aW50IHN5c19jb250cm9sO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbiYjNDM7XHRcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuJiM0MztcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuJiM0MztcdGlmIChzeXNfY29udHJvbCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4mIzQzO1x0aWYgKCh+cGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cbiYjNDM7XHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XG4mIzQzO1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsXG4mIzQzO1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9wb3dlcl9vZmY6XG4mIzQzO1x0YWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjbGtfcHV0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7bGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cJiMzNDspKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VjbGsgPSBvZl9jbGtfZ2V0KHBhY2thZ2Vfbm9kZSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2NvbmZpZyA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCAmIzQzOzEsNTM2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1x0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMFx0XHRcdFx0MFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNlx0XHRcdFx0NlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcdDB4NDgyNFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1x0MHgxN1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4ZlxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcdFx0XHQweDE1XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXHRcdDB4MDBiY1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXHQweDAwNDRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbiYjNDM7XHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4mIzQzO1x0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcbiYjNDM7ICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4mIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4mIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbiYjNDM7XHRib29sIGlzX2FjMzAwO1xuJiM0MztcdGJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7XG4mIzQzO1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vbihwcml2LVx1MDAzZWNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vZmYocHJpdi1cdTAwM2Vjb250cm9sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjZWxsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuJiM0MztcbiYjNDM7XHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0KnZhbHVlID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBzZWxlY3RhYmxlO1xuJiM0MztcdGJvb2wgZml4ZWRfYWMzMDA7XG4mIzQzO1x0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcbiYjNDM7XHR1OCBjYWxpYnJhdGlvbjtcbiYjNDM7XHR1MzIgYmFzZV9hZGRyO1xuJiM0MztcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cdTAwM2VvZl9ub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZiYXNlX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XG4mIzQzO1x0aGFzX2NvbmZpZ3VyYXRpb24gPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7bnZtZW0tY2VsbC1uYW1lc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7KSBcdTAwM2U9IDA7XG4mIzQzO1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGVjdGFibGUpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuJiM0MztcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4mIzQzO1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2NvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbiYjNDM7XHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcbiYjNDM7XHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuJiM0MztcdFx0XHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO1xuJiM0MztvdXRfcHV0X25vZGU6XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4mIzQzO1x0XHRcdFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVx1MDAzZWlzX2FjMzAwID9cbiYjNDM7XHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuJiM0MztcdFx0QUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTtcbiYjNDM7XHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xuJiM0MztcdHUxNiBnbG9iYWxfY29uZmlnO1xuJiM0MztcdGludCBvbGRwYWdlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbiYjNDM7XHRcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0YWZlX2VxX3J4X2RldGVjdCA9XG4mIzQzO1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHRcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xuJiM0MztcdGlmIChvbGRwYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcbiYjNDM7b3V0X3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmVzdW1lX3JldDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJlc3VtZV9yZXQgPSBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXN1bWVfcmV0KVxuJiM0MztcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmICghcGFja2FnZV9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCYjMzQ7LFxuJiM0MztcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4mIzQzO1x0XHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxuJiM0MztcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbiYjNDM7XHRcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgJiM0MzsxLDI4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZpY2Vfbm9kZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xuJiM0MztcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuJiM0MztcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XG4mIzQzO1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBhbmQgbWF0Y2ggZnVuY3Rpb25zIHN0cmljdGx5IHJlcXVpcmUgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMsIGNvbXBhdGlibGVzLCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIChzdWNoIGFzIEkyQyBjbGllbnRzIHdpdGggcmVnbWFwcywgY2xvY2tzLCByZWd1bGF0b3JzLCBhbmQgTlZNRU0gY2VsbHMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YmE3MDI4MmNhYjZmNmQzYTdkNTkzY2RmODBlODI2YjZlNjc0Y2YxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMjM6Mzg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZmU1N2JkMTYzZGQ3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApAQCAtMCwwICYjNDM7MSwxNTQgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlcwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnQKJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGUKJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIHBhY2thZ2UgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkCiYjNDM7ICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMmIzM5O3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbAomIzQzOyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWQomIzQzOyAgYWRkcmVzcy4KJiM0MzsKJiM0MzsgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuCiYjNDM7ICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYQomIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuCiYjNDM7CiYjNDM7ICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXMKJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmQKJiM0MzsgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG8KJiM0MzsgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBlbnVtOgomIzQzOyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhpbXVtOiAzMQomIzQzOwomIzQzOyAgY2xvY2tzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHoKJiM0MzsKJiM0MzsgIHZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMQomIzQzOyAgICAgIG9uIEFDMzAwLgomIzQzOwomIzQzOyAgbnZtZW0tY2VsbHM6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nCiYjNDM7ICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDAKJiM0MzsgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMAomIzQzOyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5CiYjNDM7ICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2UKJiM0MzsgICAgICBjb3B5IGluc3RlYWQuCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOgomIzQzOyAgICBjb25zdDogY29uZmlndXJhdGlvbgomIzQzOwomIzQzOyAgeC1wb3dlcnMsYWMyMDA6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIHByb3ZpZGluZyBJMkMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlCiYjNDM7ICAgICAgY29udHJvbCByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuCiYjNDM7CiYjNDM7ICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOgomIzQzOyAgICB0eXBlOiBib29sZWFuCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWUKJiM0MzsgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLgomIzQzOwomIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSYjNDM7JDoKJiM0MzsgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjCiYjNDM7ICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDAKJiM0MzsgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgLSBjb21wYXRpYmxlCiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSB2Y2Mtc3VwcGx5CiYjNDM7CiYjNDM7ZGVwZW5kZW50UmVxdWlyZWQ6CiYjNDM7ICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF0KJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY2xvY2tzOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gY2xvY2tzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXMKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGI0ZWY5MjdmZDRhNjcuLmQzODM1NTk3ZTM3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC00ODQsNiAmIzQzOzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFkKIAloZWxwCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDQKIAomIzQzO2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWQomIzQzOwl0cmlzdGF0ZSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQ09NTU9OX0NMSyAmYW1wOyZhbXA7IE5WTUVNICZhbXA7JmFtcDsgT0ZfTURJTyAmYW1wOyZhbXA7IFJFR1VMQVRPUgomIzQzOwlkZXBlbmRzIG9uIEkyQyB8fCAhSTJDCiYjNDM7CXNlbGVjdCBQSFlfUEFDS0FHRQomIzQzOwloZWxwCiYjNDM7CSAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMAomIzQzOwkgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZCiYjNDM7CSAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sCiYjNDM7CSAgcmVnaXN0ZXJzLgomIzQzOwogY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJCiAJdHJpc3RhdGUgJiMzNDtYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQpAQCAtMTAxLDQgJiM0MzsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpCQkmIzQzOz0gc21zYy5vCiBvYmotJChDT05GSUdfU1RFMTBYUCkJCSYjNDM7PSBzdGUxMFhwLm8KIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSkJJiM0Mzs9IHRlcmFuZXRpY3Mubwogb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKQkmIzQzOz0gdml0ZXNzZS5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKQkmIzQzOz0geHBvd2Vycy8KIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgJiM0Mzs9IHhpbGlueF9nbWlpMnJnbWlpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDMgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSAmIzQzOz0geHBvd2Vycy1hY3gwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4wMWY3MWY2MzU0ZmUxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpAQCAtMCwwICYjNDM7MSwzMTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhICZsdDthbmRyZS5wcnp5d2FyYUBhcm0uY29tJmd0OykKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUCTMKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaCTI0MDAwMDAwCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcJCQkweDAwMTQKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFCQkJQklUKDEpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRwkJCTB4MDAxNgomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqLwomIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUcJCQkweDgwMDQKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFRwkJCTB4NjAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWgkJQklUKDIpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0sJCQlHRU5NQVNLKDgsIDQpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOwomIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJdTE2IGVwaHlfY3RsOwomIzQzOwl1bnNpZ25lZCBpbnQgcGh5X2FkZHI7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtlcGh5X2N0bCB8CiYjNDM7CQkocHJpdi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCSBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCkgfAomIzQzOwkJRklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtJmd0O3BoeV9hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsCiYjNDM7CQkJCXVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF93cml0ZShwcml2LSZndDtyZWdtYXAsIHJlZywgdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2Vycihwcml2LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXG4mIzM0OywKJiM0MzsJCQlyZWcsIEVSUl9QVFIocmV0KSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCQkgICBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSBBQzIwMF9FUEhZX1JNSUlfU0VMLAomIzQzOwkJCQkJIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXByaXYtJmd0O2ludGVyZmFjZSA9IGludGVyZmFjZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeV9hZGRyICZndDsgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQgJmFtcDsmYW1wOyBwcml2LSZndDtwaHlfYWRkciA9PSBwaHlfYWRkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtwaHlfYWRkciA9IHBoeV9hZGRyOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovCiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLAomIzQzOwkJCQkgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsCiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2Rpc2FibGU6CiYjNDM7CS8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqLwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqCiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwKJiM0MzsJCSAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJdW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjsKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKJiM0MzsJdTggYnBzX2VmZnVzZV9jb2RlOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OywgMCk7CiYjNDM7CWlmICghYWMyMDBfbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXG4mIzM0OykpOwomIzQzOwljbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7CiYjNDM7CWlmICghY2xpZW50KSB7CiYjNDM7CQlyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuJiMzNDspKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV9saW5rX2FkZChkZXYsICZhbXA7Y2xpZW50LSZndDtkZXYsCiYjNDM7CQkJICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2aWNlX3RyeWxvY2soJmFtcDtjbGllbnQtJmd0O2RldikpIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLAomIzQzOwkJCQkgICAgJiMzNDtBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChkZXZpY2VfaXNfYm91bmQoJmFtcDtjbGllbnQtJmd0O2RldikpCiYjNDM7CQlwcml2LSZndDtyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJZGV2aWNlX3VubG9jaygmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFwcml2LSZndDtyZWdtYXApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLAomIzQzOwkJCQkgICAgJiMzNDtBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGFzX2NhbGlicmF0aW9uKSB7CiYjNDM7CQlyZXQgPSByZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VGVVNFX0VQSFlfUkVHLAomIzQzOwkJCQkgICZhbXA7aW50ZXJuYWxfY2FsaWJyYXRpb24pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJCWNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqLwomIzQzOwlicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spOwomIzQzOwlwcml2LSZndDtlcGh5X2N0bCA9CiYjNDM7CQlGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpOwomIzQzOwkvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovCiYjNDM7CiYjNDM7CWNsayA9IGNsa19nZXQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoY2xrKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihjbGspOwomIzQzOwkJZ290byBvdXRfZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCSAgICBjbGtfcmF0ZSk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MztvdXRfZXJyb3I6CiYjNDM7CXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxuJiMzNDspOwomIzQzO291dF9wdXRfY2xpZW50OgomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0YzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCkBAIC0wLDAgJiM0MzsxLDM4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFoJMjUwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaCTI3MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUcJCQkweDAwCiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0sJCQlHRU5NQVNLKDcsIDYpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpCiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFCQkJQklUKDUpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVAkJQklUKDEpCiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE8JCUJJVCgzKQomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLCQlHRU5NQVNLKDIsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHCQkJMHgwMgomIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUJCUJJVCgxNSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUcJCQkweDA1CiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0sJCQlHRU5NQVNLKDExLCAxMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yCQkJMgomIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUcJCQkweDA2CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXAomIzQzOwkoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcCiYjNDM7CSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFwKJiM0MzsJIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXAomIzQzOwkoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSkKJiM0MzsKJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJCSAgIEFDMzAwX0VQSFlfU0hVVERPV04pOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCQkgICAgQUMzMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1OCBwYWNrYWdlX3N0YXR1czsKJiM0MzsJdTE2IHJlc2V0X3ZhbHVlOwomIzQzOwlpbnQgc3lzX2NvbnRyb2w7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqLwomIzQzOwkJZnNsZWVwKDEwMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi8KJiM0MzsJcmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8CiYjNDM7CQkJCSAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi8KJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBwcml2LSZndDtzeXNfY29udHJvbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpOwomIzQzOwlpZiAoc3lzX2NvbnRyb2wgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzeXNfY29udHJvbDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7CiYjNDM7CWlmICgofnBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT0KJiM0MzsJICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgJmFtcDsgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETzsKJiM0MzsJcHJpdi0mZ3Q7cGFja2FnZV9rbm93biA9IHRydWU7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLAomIzQzOwkJCQkgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsCiYjNDM7CQkJCSAgIHByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJCQkgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX1NZU19JT19WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcG93ZXJfb2ZmOgomIzQzOwlhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwcml2LSZndDt2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O3ZjYykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDt2Y2MpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtjbGspKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXG4mIzM0OykpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0OykpOwomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCQkgICAgIGNsa19yYXRlKSk7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jb25maWcgPQomIzQzOwkJRklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKQEAgLTAsMCAmIzQzOzEsNTM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSUQJCQkJMHgwMDQ0MTQwMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSwlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVwlCSVQoOSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFRwkJCTB4MWYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0sJCQlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8wCQkJCTAKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMQkJCQkxCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzIJCQkJMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV82CQkJCTYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOAkJCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQJQklUKDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSwkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTwkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHCQkweDEyCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUJMHg0ODI0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRQkJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRwkweDE3CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFCUJJVCgzKQomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0sJCUdFTk1BU0soMTQsIDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQJMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHCQkweDEwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFCTB4NTUyMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRQkJMHhmMDAwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHCTB4MTQKJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUJMHg3MDhmCiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4YgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHCQkJMHgxNQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcCiYjNDM7CShGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFwKJiM0MzsJQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUJCTB4MDBiYwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcJCTB4MWQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUwkweDAwNDQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcCiYjNDM7CShBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXAomIzQzOwkgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUykKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvcgomIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMAomIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlCiYjNDM7ICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7CiYjNDM7CWJvb2wgaXNfYWMzMDA7CiYjNDM7CWJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7CiYjNDM7CWJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsCiYjNDM7CQkJICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb24ocHJpdi0mZ3Q7Y29udHJvbCwKJiM0MzsJCQkJICAgICAgIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb2ZmKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7c2V0X2ludGVyZmFjZShwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcGh5ZGV2X3dhcm4ocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXG4mIzM0OywKJiM0MzsJCQkgICAgRVJSX1BUUihyZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl1OCAqYnVmOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJY2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNlbGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY2VsbCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CW52bWVtX2NlbGxfcHV0KGNlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihidWYpOwomIzQzOwlpZiAoIWxlbiB8fCBsZW4gJmd0OyBzaXplb2YoKnZhbHVlKSkgewomIzQzOwkJa2ZyZWUoYnVmKTsKJiM0MzsJCXJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXZhbCB8PSAodTE2KWJ1ZltpXSAmbHQ7Jmx0OyAoOCAqIGkpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwkqdmFsdWUgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlOwomIzQzOwlib29sIHNlbGVjdGFibGU7CiYjNDM7CWJvb2wgZml4ZWRfYWMzMDA7CiYjNDM7CWJvb2wgaGFzX2NvbmZpZ3VyYXRpb247CiYjNDM7CXU4IGNhbGlicmF0aW9uOwomIzQzOwl1MzIgYmFzZV9hZGRyOwomIzQzOwl1MTYgY29uZmlndXJhdGlvbiA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LSZndDtvZl9ub2RlKTsKJiM0MzsJaWYgKCFwYWNrYWdlX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2Jhc2VfYWRkcik7CiYjNDM7CWlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi0mZ3Q7bWRpby5hZGRyKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWlmICghc2VsZWN0YWJsZSAmYW1wOyZhbXA7ICFmaXhlZF9hYzMwMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsKJiM0MzsJaGFzX2NvbmZpZ3VyYXRpb24gPQomIzQzOwkJb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgJiMzNDtudm1lbS1jZWxsLW5hbWVzJiMzNDssCiYjNDM7CQkJCQkgJiMzNDtjb25maWd1cmF0aW9uJiMzNDspICZndDs9IDA7CiYjNDM7CWlmIChoYXNfY29uZmlndXJhdGlvbikgewomIzQzOwkJcmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7LAomIzQzOwkJCQkJCSZhbXA7Y29uZmlndXJhdGlvbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDtwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzZWxlY3RhYmxlKSB7CiYjNDM7CQlwcml2LSZndDtpc19hYzMwMCA9CiYjNDM7CQkJY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPSBmaXhlZF9hYzMwMDsKJiM0MzsJCWlmIChoYXNfY29uZmlndXJhdGlvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPQomIzQzOwkJICAgIHByaXYtJmd0O2lzX2FjMzAwKSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLAomIzQzOwkJCQljb25maWd1cmF0aW9uKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPQomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkJISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpOwomIzQzOwlwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkID0KJiM0MzsJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsCiYjNDM7CQkJCSAgICAgICYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwKQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgY2FsaWJyYXRpb24pOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtjb250cm9sID0KJiM0MzsJCQlhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICBoYXNfY29uZmlndXJhdGlvbiwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzOwomIzQzO291dF9wdXRfbm9kZToKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLAomIzQzOwkJCQlBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCUFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O29mX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqLwomIzQzOwlyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwl1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtJmd0O2lzX2FjMzAwID8KJiM0MzsJCUFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOgomIzQzOwkJQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTsKJiM0MzsJdTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTsKJiM0MzsJdTE2IGdsb2JhbF9jb25maWc7CiYjNDM7CWludCBvbGRwYWdlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLAomIzQzOwkJCQkgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTsKJiM0MzsJaWYgKHByaXYtJmd0O3htaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpCiYjNDM7CQlnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQgfAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlhZmVfZXFfcnhfZGV0ZWN0ID0KJiM0MzsJCQlBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7CiYjNDM7CQl0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7CiYjNDM7CWlmIChvbGRwYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssCiYjNDM7CQkJCSAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIGFmZV9lcV9yeF9kZXRlY3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpOwomIzQzOwomIzQzO291dF9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi8KJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi8KJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJlc3VtZV9yZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CQlpZiAocmVzdW1lX3JldCkKJiM0MzsJCQlwaHlkZXZfd2FybihwaHlkZXYsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgIEVSUl9QVFIocmVzdW1lX3JldCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJaWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovCiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OykgfHwKJiM0MzsJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hdGNoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKJiM0MzsJCS5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLAomIzQzOwkJLnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLAomIzQzOwkJLnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsCiYjNDM7CQkuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsCiYjNDM7CQkuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7CiYjNDM7CXsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0phbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQJMTYKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7CiYjNDM7CWludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCXVuc2lnbmVkIGludCBwaHlfYWRkcik7CiYjNDM7CWludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7CiYjNDM7CWludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTsKJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0OTIKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBEcml2ZXIqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gSXQmIzM5O3MgYW4gRXRoZXJuZXQgUEhZLCBzbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gVGhlc2UgUEhZIGRyaXZlcnMgdXN1YWxseSBnZXQgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMsIHJpZ2h0PyBJbiBRRU1VLCB3ZSBjYW4sIGluIHRoZW9yeSwgZW11bGF0ZSBhbiBNRElPIGJ1cywgYnV0IGl0IG5lZWRzIHRvIGJlIHN1cHBvcnRlZCBieSB0aGUgZW11bGF0ZWQgTUFDLCBvciB3ZSBjYW4gdXNlIGEgZHVtbXkgTURJTyBidXMgaWYgbmVjZXNzYXJ5LiBNb3JlIHNwZWNpZmljYWxseSwgUEhZIGRyaXZlcnMgdHlwaWNhbGx5IG9ubHkgcHJvYmUgaWYgdGhlcmUmIzM5O3MgYSBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGUgb3IgaWYgdGhlIFBIWSBJRCBtYXRjaGVzIG9uIGFuIE1ESU8gYnVzLgoKV2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZSB0cmlja3MgdXAgaXRzIHNsZWV2ZT8gSSBzZWVtIHRvIHJlY2FsbCBpdCBjYW4gaW5qZWN0IE1ESU8gZGV2aWNlcyBpZiB3ZSBjYW4gY3JlYXRlIGFuIE1ESU8gYnVzLCBtYXliZSB0aHJvdWdoIGFuIGVtdWxhdGVkIE5JQy4gRG9lcyBzeXprYWxsZXIgZXZlbiAqZnV6eiogUEhZIGRyaXZlcnM/IFllYWgsIGl0IGRvZXMsIG9yIGF0IGxlYXN0IGl0IGNhbiB0cmlnZ2VyIGEgcHJvYmUgaWYgdGhlIGRyaXZlciBpcyBlbmFibGVkIGFuZCBNRElPIGRldmljZXMgZXhpc3QuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBNRElPIG9yIFBIWS1yZWxhdGVkIHRoaW5ncyBpbiB0aGUgc3l6a2FsbGVyIGRlZmluaXRpb25zLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwcm9tcHQ6IGlmIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGVuIGl0IGlzIG5vdCBXb3J0aEZ1enppbmcuCgpIb3cgY2FuIHRoaXMgZHJpdmVyIGJlIHByb2JlZCBpbiBRRU1VPyBXZSYjMzk7ZCBpZGVhbGx5IG5lZWQgYSBkZXZpY2UgdHJlZSwgYW5kIGl0JiMzOTtzIG5vdCBlYXN5IHRvIGp1c3QgaW5qZWN0ICphbnkqIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlIGF0IHJ1bnRpbWUgaW4gUUVNVSB3aXRob3V0IERUIG92ZXJsYXlzLiBTeXprYWxsZXIgKmhhcyogc29tZSBEVCBvdmVybGF5IHN1cHBvcnQsIGJ1dCBpdCYjMzk7cyBsaW1pdGVkLCBhbmQgSSBkb3VidCBpdCYjMzk7cyBmbGV4aWJsZSBlbm91Z2ggZm9yIHRoaXMuIEhvd2V2ZXIsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGlzIHByb2JlYWJsZSBvbmx5IHdpdGggRFQuIEkgbmVlZCB0byBjaGVjayBob3cgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgd29ya3MuCgpBaCBoYSEgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgKmV4cGxpY2l0bHkqIHJlcXVpcmVzIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgdGhhdCB0aGUgcGFyZW50IG5vZGUgaXMgY29tcGF0aWJsZSB3aXRoIGAmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZSYjMzQ7YCBvciBzaW1pbGFyLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSwgdGhpcyB0aGluZyB3aWxsICpuZXZlciogcHJvYmUuIENhbiBzeXprYWxsZXIgaW5qZWN0IG5vZGVzIHdpdGggdGhlc2Ugc3BlY2lmaWMgY29tcGF0aWJsZXM/IE1heWJlLCBidXQgcHJvYmFibHkgbm90IGVhc2lseTsgRFQgb3ZlcmxheXMgYXJlIHRyaWNreS4KCldhaXQgYSBzZWNvbmQsIGV2ZW4gaWYgaXQgKmNvdWxkKiBiZSBwcm9iZWQsIHRoaXMgaXMgYSAqaGFyZHdhcmUtc3BlY2lmaWMqIFBIWSBkcml2ZXIsIG1lYW50IGZvciB0aG9zZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBjb21wYW5pb24gSUNzLiBUaGVzZSBhcmUgcGh5c2ljYWwgY2hpcHMhIFRoZXkgY29tbXVuaWNhdGUgdmlhIE1ESU8gYW5kLCBmb3IgQUMyMDAsIEkyQy4gSXMgaXQgZXZlbiB3b3J0aCBmdXp6aW5nIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGxpa2UgdGhpcz8gSXQmIzM5O3Mgbm90IGxpa2VseSB0byBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbi4gTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlJiMzOTtzIEkyQyBvciBNRElPIGVtdWxhdGlvbiBpbiBRRU1VLiBVbmxpa2VseS4KCkhhbmcgb24uIGBhYzIwMF9lcGh5X2N0bF9jcmVhdGVgLi4uIEl0IHVzZXMgYG9mX3BhcnNlX3BoYW5kbGVgIGFuZCBgb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGVgLiBJdCAqcmVxdWlyZXMqIGFuIEkyQyBjbGllbnQgZGV2aWNlIHRvIGV4aXN0IGFuZCBiZSBsaW5rZWQuIFRoaXMgaXMgKmRlZXBseSogdGllZCB0byB0aGUgc3BlY2lmaWMgaGFyZHdhcmU6IEFsbHdpbm5lciBTb0NzLCBBQzIwMC9BQzMwMCBQTUlDcywgYWxsIHRoYXQuIFRoaXMgd2lsbCBiZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKndpdGhvdXQqIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIG9yIGNvbXBsZXggRFQgb3ZlcmxheXMgdGhhdCBhbHNvIGluc3RhbnRpYXRlIHRoZSBJMkMgZGV2aWNlcyBhbmQgbW9jayB0aGVpciByZWdtYXBzLgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyAqcmVhbGx5KiB1bnJlYWNoYWJsZS4gTGV0JiMzOTtzIGxpc3QgdGhlIGRlcGVuZGVuY2llczoKCjEuICBBIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoZSBQSFkgd2l0aCBhIHBhcmVudCBub2RlIGhhdmluZyBgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDtgLgoyLiAgRm9yIEFDMjAwLCBhbiBJMkMgZGV2aWNlIG5vZGUgcmVmZXJlbmNlZCBieSBgeC1wb3dlcnMsYWMyMDBgLCB3aGljaCBtdXN0IGhhdmUgYSBib3VuZCBkcml2ZXIgcHJvdmlkaW5nIGEgcmVnbWFwLgozLiAgRm9yIEFDMzAwLCBhIGNsb2NrIHJlZmVyZW5jZWQgYnkgYGNsb2Nrc2AgcHJvcGVydHkuCjQuICBBIHJlZ3VsYXRvciByZWZlcmVuY2VkIGJ5IGB2Y2Mtc3VwcGx5YC4KNS4gIEFuIE5WTUVNIGNlbGwgcmVmZXJlbmNlZCBieSBgbnZtZW0tY2VsbHNgLgoKQWxsIHRoZXNlIGRlcGVuZGVuY2llcyBtYWtlIGl0IHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gZ2V0IHRoaXMgZHJpdmVyIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBpbiBhIGdlbmVyaWMgZnV6emluZyBlbnZpcm9ubWVudCB3aXRob3V0IGEgc3BlY2lhbGl6ZWQgZW11bGF0b3IgZm9yIHRoZSBBbGx3aW5uZXIvWC1Qb3dlcnMgaGFyZHdhcmUuCgpUaGVyZWZvcmUsIEkmIzM5O20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29kZSBpcyBub3QgcmVhY2hhYmxlIGluIFFFTVUgb3Igc2ltaWxhciBlbnZpcm9ubWVudHMuIEl0JiMzOTtzIGFsbCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlLWRlcGVuZGVudCBzdHVmZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMC9BQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyJiMzOTtzIHByb2JlIGFuZCBtYXRjaCBmdW5jdGlvbnMgc3RyaWN0bHkgcmVxdWlyZSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcywgY29tcGF0aWJsZXMsIGFuZCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgKHN1Y2ggYXMgSTJDIGNsaWVudHMgd2l0aCByZWdtYXBzLCBjbG9ja3MsIHJlZ3VsYXRvcnMsIGFuZCBOVk1FTSBjZWxscykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgYW5kIG1hdGNoIGZ1bmN0aW9ucyBzdHJpY3RseSByZXF1aXJlIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzLCBjb21wYXRpYmxlcywgYW5kIGhhcmR3YXJlIGRlcGVuZGVuY2llcyAoc3VjaCBhcyBJMkMgY2xpZW50cyB3aXRoIHJlZ21hcHMsIGNsb2NrcywgcmVndWxhdG9ycywgYW5kIE5WTUVNIGNlbGxzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMzozODozNS4yNDE5NTQzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDkyOTMyNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBhbmQgbWF0Y2ggZnVuY3Rpb25zIHN0cmljdGx5IHJlcXVpcmUgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMsIGNvbXBhdGlibGVzLCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIChzdWNoIGFzIEkyQyBjbGllbnRzIHdpdGggcmVnbWFwcywgY2xvY2tzLCByZWd1bGF0b3JzLCBhbmQgTlZNRU0gY2VsbHMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjM1LjI0MTk1OTk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMyODY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YmE3MDI4MmNhYjZmNmQzYTdkNTkzY2RmODBlODI2YjZlNjc0Y2YxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDIzOjM4OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZmU1N2JkMTYzZGQ3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcXG5AQCAtMCwwICsxLDE1NCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOlxcbisgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcXG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXFxuKyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcXG4rICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMncyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxcbisgIGFkZHJlc3MuXFxuK1xcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXFxuKyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGFcXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cXG4rXFxuKyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzXFxuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cXG4rICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGVudW06XFxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxuK1xcbisgIHJlZzpcXG4rICAgIG1heGltdW06IDMxXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcXG4rXFxuKyAgdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcXG4rICAgICAgb24gQUMzMDAuXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgcHJvdmlkaW5nIEkyQyBhY2Nlc3MgdG8gdGhlIHBhY2thZ2VcXG4rICAgICAgY29udHJvbCByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuXFxuK1xcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XFxuKyAgICB0eXBlOiBib29sZWFuXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXFxuKyAgICBwcm9wZXJ0aWVzOlxcbisgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIGNvbXBhdGlibGVcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gdmNjLXN1cHBseVxcbitcXG4rZGVwZW5kZW50UmVxdWlyZWQ6XFxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjbG9ja3M6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6XFxuKyAgICAgICAgICBtYXhpbXVtOiA3XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rXFxuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnB3bSA1XFx1MDAzZTtcXG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcXG4gXFx0aGVscFxcbiBcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxcbiBcXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXFxuK1xcdHRyaXN0YXRlIFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcXFwiXFxuK1xcdGRlcGVuZHMgb24gQ09NTU9OX0NMSyBcXHUwMDI2XFx1MDAyNiBOVk1FTSBcXHUwMDI2XFx1MDAyNiBPRl9NRElPIFxcdTAwMjZcXHUwMDI2IFJFR1VMQVRPUlxcbitcXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbitcXHRoZWxwXFxuK1xcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxcbitcXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXFxuK1xcdCAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sXFxuK1xcdCAgcmVnaXN0ZXJzLlxcbitcXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXFxuIFxcdHRyaXN0YXRlIFxcXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuQEAgLTEwMSw0ICsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXFx0XFx0Kz0gc21zYy5vXFxuIG9iai0kKENPTkZJR19TVEUxMFhQKVxcdFxcdCs9IHN0ZTEwWHAub1xcbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXFx0Kz0gdGVyYW5ldGljcy5vXFxuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcXHQrPSB2aXRlc3NlLm9cXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVxcdCs9IHhwb3dlcnMvXFxuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxuQEAgLTAsMCArMSwzIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgKz0geHBvd2Vycy1hY3gwMC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wMWY3MWY2MzU0ZmUxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcXG5AQCAtMCwwICsxLDMxMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcXHUwMDNjYW5kcmUucHJ6eXdhcmFAYXJtLmNvbVxcdTAwM2UpXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImFjeDAwLmhcXFwiXFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcXHQzXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcXHQyNDAwMDAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rXFxuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcXHRcXHRcXHQweDAwMTRcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXFx0XFx0XFx0QklUKDEpXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXFx0XFx0XFx0MHgwMDE2XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXFxuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcXHRcXHRcXHQweDgwMDRcXG4rXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXFx0XFx0XFx0MHg2MDAwXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDgsIDQpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFxcdFxcdFxcdEJJVCgxMSlcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbitcXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2N0bCB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtXFx1MDAzZXBoeV9hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWcsIEVSUl9QVFIocmV0KSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpIHtcXG4rXFx0XFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHRcXHRcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdHUxNiBlcGh5X2N0bDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlfYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xcbitcXG4rXFx0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9kaXNhYmxlOlxcbitcXHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IHRydWU7XFxuK1xcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxcbitcXHRcXHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHU4IGJwc19lZmZ1c2VfY29kZTtcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcXG4rXFx0aWYgKCFjbGllbnQpIHtcXG4rXFx0XFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXFxcblxcXCIpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldmljZV90cnlsb2NrKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChkZXZpY2VfaXNfYm91bmQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KSlcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0ZGV2aWNlX3VubG9jayhcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXJlZ21hcCkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0XFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY3RsID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0Y2xrID0gY2xrX2dldChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKGNsaykpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihjbGspO1xcbitcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4rXFx0c3dpdGNoIChjbGtfcmF0ZSkge1xcbitcXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxcbitcXHRcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgY2xrX3JhdGUpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cHJpdi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK291dF9lcnJvcjpcXG4rXFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXFxcblxcXCIpO1xcbitvdXRfcHV0X2NsaWVudDpcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcXG5AQCAtMCwwICsxLDM4NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vcGh5bGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlxcdDI1MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcXHQyNzAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDBcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXFx0XFx0R0VOTUFTSygxMSwgOClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcXG4rI2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXFx0XFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXFx0XFx0R0VOTUFTSygyLCAwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXFx0XFx0XFx0MHgwMlxcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXFx0XFx0QklUKDE1KVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXFx0XFx0XFx0MHgwNVxcbisjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCAxMClcXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1xcdFxcdFxcdDB4MDZcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxcXFxuK1xcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcXFxcbitcXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXFxuK1xcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHR1MTYgc3lzX2NvbnRyb2w7XFxuK1xcdHUxNiBlcGh5X2NvbmZpZztcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBwYWNrYWdlX2tub3duO1xcbitcXHRib29sIGludGVybmFsX2RsZG87XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHR1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHQgdTE2IG1hc2ssIHUxNiBzZXQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHR1MTYgdmFsID0gKHJldCBcXHUwMDI2IH5tYXNrKSB8IChzZXQgXFx1MDAyNiBtYXNrKTtcXG4rXFxuK1xcdFxcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcXG4rXFx0XFx0XFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByZWdudW0sIHZhbCk7XFxuK1xcdH1cXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2NvbmZpZyB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxcbitcXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXFxuK1xcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIXByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gP1xcbitcXHRcXHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFxuK1xcdFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1OCBwYWNrYWdlX3N0YXR1cztcXG4rXFx0dTE2IHJlc2V0X3ZhbHVlO1xcbitcXHRpbnQgc3lzX2NvbnRyb2w7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXFxuK1xcdFxcdGZzbGVlcCgxMDAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xcbitcXHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZXN5c19jb250cm9sKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XFxuK1xcdGlmIChzeXNfY29udHJvbCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc3lzX2NvbnRyb2w7XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFx0fVxcbitcXG4rXFx0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xcbitcXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cXG4rXFx0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XFxuK1xcdHByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gPSB0cnVlO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9wb3dlcl9vZmY6XFxuK1xcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcXG4re1xcbitcXHRjbGtfcHV0KGRhdGEpO1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXFxcblxcXCIpKTtcXG4rXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcXFwidmNjXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNldmNjKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cXHUwMDNldmNjKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcXFxuXFxcIikpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWNsaykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcInVuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNsa19yYXRlKSk7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XFxuK1xcbitcXHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXFxuK1xcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcXG4rXFx0cHJpdi1cXHUwMDNlZXBoeV9jb25maWcgPVxcbitcXHRcXHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xcbitcXHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4ZjJiMGI2MzkwOTZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xcbkBAIC0wLDAgKzEsNTM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVxcdTAwM2VcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vcGh5bGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXFx0XFx0XFx0XFx0MHgwMDQ0MTQwMFxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcXHRCSVQoOSlcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXFx0XFx0XFx0MHgxZlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcXHRcXHRcXHRHRU5NQVNLKDEyLCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMFxcdFxcdFxcdFxcdDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcXHRcXHRcXHRcXHQxXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXFx0XFx0XFx0XFx0MlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfNlxcdFxcdFxcdFxcdDZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcXHRcXHRcXHRcXHQ4XFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXFx0QklUKDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1xcdFxcdDJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxMlxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVxcdDB4NDgyNFxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcXHRcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXFx0MHgxN1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcXHRCSVQoMylcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1xcdFxcdEdFTk1BU0soMTQsIDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXFx0MFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcXHRcXHQweDEwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVxcdDB4NTUyM1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRVxcdFxcdDB4ZjAwMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcXHQweDE0XFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVxcdDB4NzA4ZlxcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXFx0XFx0XFx0MHgxNVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1xcdFxcdEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLLCAoXzEwMG0pKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVxcdFxcdDB4MDBiY1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXFx0XFx0MHgxZFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcXHQweDAwNDRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcXFxcbitcXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXFxcXG4rXFx0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXFxuK1xcbisvKlxcbisgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXFxuKyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxcbisgKi9cXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xcbitcXHRib29sIGlzX2FjMzAwO1xcbitcXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xcbitcXHRib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb24ocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXBvd2VyX29mZihwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlc2V0X2ludGVyZmFjZShwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgRVJSX1BUUihyZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xcbitcXHRzaXplX3QgaTtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0dTggKmJ1ZjtcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XFxuK1xcdGlmIChJU19FUlIoY2VsbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xcbitcXG4rXFx0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFxcdTAwMjZsZW4pO1xcbitcXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcXG4rXFx0aWYgKElTX0VSUihidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidWYpO1xcbitcXHRpZiAoIWxlbiB8fCBsZW4gXFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xcbitcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW47IGkrKylcXG4rXFx0XFx0dmFsIHw9ICh1MTYpYnVmW2ldIFxcdTAwM2NcXHUwMDNjICg4ICogaSk7XFxuK1xcdGtmcmVlKGJ1Zik7XFxuK1xcdCp2YWx1ZSA9IHZhbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xcbitcXHRib29sIHNlbGVjdGFibGU7XFxuK1xcdGJvb2wgZml4ZWRfYWMzMDA7XFxuK1xcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XFxuK1xcdHU4IGNhbGlicmF0aW9uO1xcbitcXHR1MzIgYmFzZV9hZGRyO1xcbitcXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuK1xcdGlmICghcGFja2FnZV9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZiYXNlX2FkZHIpO1xcbitcXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcikge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRpZiAoIXNlbGVjdGFibGUgXFx1MDAyNlxcdTAwMjYgIWZpeGVkX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFxuK1xcdGhhc19jb25maWd1cmF0aW9uID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXFxcIm52bWVtLWNlbGwtbmFtZXNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcImNvbmZpZ3VyYXRpb25cXFwiKSBcXHUwMDNlPSAwO1xcbitcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFxcXCJjb25maWd1cmF0aW9uXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2VsZWN0YWJsZSkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9XFxuK1xcdFxcdFxcdGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xcbitcXHRcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlaXNfYWMzMDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiY29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcXG4rXFx0XFx0XFx0XFx0Y29uZmlndXJhdGlvbik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xcbitcXHRwcml2LVxcdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWRcXFwiKTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29udHJvbCA9XFxuK1xcdFxcdFxcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBjYWxpYnJhdGlvbik7XFxuK1xcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rXFxuK291dF9wdXRfbm9kZTpcXG4rXFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcXG4rXFx0XFx0XFx0XFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlb2Zfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtXFx1MDAzZWlzX2FjMzAwID9cXG4rXFx0XFx0QUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6XFxuK1xcdFxcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XFxuK1xcdHUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7XFxuK1xcdHUxNiBnbG9iYWxfY29uZmlnO1xcbitcXHRpbnQgb2xkcGFnZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xcbitcXHRpZiAocHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcXG4rXFx0XFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdGFmZV9lcV9yeF9kZXRlY3QgPVxcbitcXHRcXHRcXHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XFxuK1xcdFxcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcXG4rXFx0fVxcbitcXG4rXFx0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XFxuK1xcdGlmIChvbGRwYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgYWZlX2VxX3J4X2RldGVjdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcXG4rXFxuK291dF9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXFxuK1xcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJlc3VtZV9yZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXN1bWVfcmV0KVxcbitcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBtYXRjaDtcXG4rXFxuK1xcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVxcXCIsXFxuK1xcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxcbitcXHRcXHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxcbitcXHRcXHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcXG4rXFx0XFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXFxuK1xcdFxcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcXG5AQCAtMCwwICsxLDI4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rI2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcXHQxNlxcbitcXG4rc3RydWN0IGRldmljZV9ub2RlO1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XFxuK1xcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xcbitcXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xcbitcXHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xcbit9O1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjM1LjY4NTkyNTE4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5NjQ4OTUwNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlcidzIHByb2JlIGFuZCBtYXRjaCBmdW5jdGlvbnMgc3RyaWN0bHkgcmVxdWlyZSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcywgY29tcGF0aWJsZXMsIGFuZCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgKHN1Y2ggYXMgSTJDIGNsaWVudHMgd2l0aCByZWdtYXBzLCBjbG9ja3MsIHJlZ3VsYXRvcnMsIGFuZCBOVk1FTSBjZWxscykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmJhNzAyODJjYWI2ZjZkM2E3ZDU5M2NkZjgwZTgyNmI2ZTY3NGNmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIzOjM4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZmU1N2JkMTYzZGQ3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5AQCAtMCwwICsxLDE1NCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjpcbisgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbisgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGVcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIHBhY2thZ2UgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkXG4rICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMncyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXG4rICByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2IHBsdXMgdGhlIGxpbmsgUEhZXG4rICBhZGRyZXNzLlxuK1xuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cbisgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cbitcbisgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xuKyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGVudW06XG4rICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4rXG4rICByZWc6XG4rICAgIG1heGltdW06IDMxXG4rXG4rICBjbG9ja3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOiBBQzMwMCBpbnB1dCBjbG9jaywgcnVubmluZyBhdCAyNCwgMjUsIG9yIDI3IE1IelxuK1xuKyAgdmNjLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXG4rICAgICAgb24gQUMzMDAuXG4rXG4rICBudm1lbS1jZWxsczpcbisgICAgbWF4SXRlbXM6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxuKyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwXG4rICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxuKyAgICAgIGNvcHkgaW5zdGVhZC5cbitcbisgIG52bWVtLWNlbGwtbmFtZXM6XG4rICAgIGNvbnN0OiBjb25maWd1cmF0aW9uXG4rXG4rICB4LXBvd2VycyxhYzIwMDpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgcHJvdmlkaW5nIEkyQyBhY2Nlc3MgdG8gdGhlIHBhY2thZ2VcbisgICAgICBjb250cm9sIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS5cbitcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XG4rICAgIHR5cGU6IGJvb2xlYW5cbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxuKyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4rXG4rcGF0dGVyblByb3BlcnRpZXM6XG4rICBeZXRoZXJuZXQtcGh5QFthLWYwLTldKyQ6XG4rICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gdmNjLXN1cHBseVxuK1xuK2RlcGVuZGVudFJlcXVpcmVkOlxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4rXG4rYWxsT2Y6XG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNsb2NrczogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gY2xvY2tzXG4rICAgICAgICAtIG52bWVtLWNlbGxzXG4rICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIGNsb2Nrc1xuKyAgICAgICAgLSBudm1lbS1jZWxsc1xuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcImNvbmZpZ3VyYXRpb25cIjtcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCI7XG4rICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rLi4uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uZDM4MzU1OTdlMzc5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTQ4NCw2ICs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcIlxuK1x0ZGVwZW5kcyBvbiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiBOVk1FTSBcdTAwMjZcdTAwMjYgT0ZfTURJTyBcdTAwMjZcdTAwMjYgUkVHVUxBVE9SXG4rXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuK1x0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxuK1x0ICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2xcbitcdCAgcmVnaXN0ZXJzLlxuK1xuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxuIFx0dHJpc3RhdGUgXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMSw0ICsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXHRcdCs9IHNtc2Mub1xuIG9iai0kKENPTkZJR19TVEUxMFhQKVx0XHQrPSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQrPSB0ZXJhbmV0aWNzLm9cbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXHQrPSB2aXRlc3NlLm9cbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQrPSB4cG93ZXJzL1xuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxuQEAgLTAsMCArMSwzIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgKz0geHBvd2Vycy1hY3gwMC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wMWY3MWY2MzU0ZmUxXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5AQCAtMCwwICsxLDMxMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXHUwMDNjYW5kcmUucHJ6eXdhcmFAYXJtLmNvbVx1MDAzZSlcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcdFx0XHQweDAwMTRcbisjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rI2RlZmluZSBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEVcdFx0XHRCSVQoMSlcbitcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXHRcdFx0MHgwMDE2XG4rI2RlZmluZSBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbitcbisvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXG4rI2RlZmluZSBBQzIwMF9FRlVTRV9FUEhZX1JFR1x0XHRcdDB4ODAwNFxuK1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXHRcdFx0MHg2MDAwXG4rI2RlZmluZSBBQzIwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXHRcdFx0R0VOTUFTSyg4LCA0KVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuK1xuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4rXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4rXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHR1MTYgZXBoeV9jdGw7XG4rXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbitcdGJvb2wgcG93ZXJlZDtcbit9O1xuK1xuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4rXHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCkgfFxuK1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgJSN4OiAlcGVcXG5cIixcbitcdFx0XHRyZWcsIEVSUl9QVFIocmV0KSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdGludCBlcnI7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbitcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0XHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbitcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1xuK1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuK1x0XHRlbHNlIGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXG4rXHRyZXR1cm4gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbit9XG4rXG4rc3RhdGljIGludFxuK2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4rXHRcdFx0XHRcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuK3tcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1x0dTE2IGVwaHlfY3RsO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlfYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHByaXYtXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuK1x0XHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xuK1xuK1x0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2Rpc2FibGU6XG4rXHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cbitcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4rXHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuK1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0dW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDtcbitcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4rXHR1OCBicHNfZWZmdXNlX2NvZGU7XG4rXHRzdHJ1Y3QgY2xrICpjbGs7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuK1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwidmNjXCIpO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNldmNjKSxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cIikpO1xuK1xuK1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcIngtcG93ZXJzLGFjMjAwXCIsIDApO1xuK1x0aWYgKCFhYzIwMF9ub2RlKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCIpKTtcbitcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuK1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4rXHRpZiAoIWNsaWVudCkge1xuK1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cIikpO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuK1x0XHRcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX3RyeWxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4rXHRcdFx0XHQgICAgXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbitcdFx0cHJpdi1cdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGRldmljZV91bmxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4rXHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxuK1x0XHRcdFx0ICAgIFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbitcdH1cbitcbitcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4rXHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbitcdFx0XHRcdCAgXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0XHRjYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uO1xuK1x0fVxuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGlmIChJU19FUlIoY2xrKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4rXHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0fVxuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbitcdGNsa19wdXQoY2xrKTtcbitcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwidW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4rXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4rXHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbitcbitvdXRfZXJyb3I6XG4rXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cIik7XG4rb3V0X3B1dF9jbGllbnQ6XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5AQCAtMCwwICsxLDM4NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcdDI1MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0tcdFx0R0VOTUFTSygxMSwgOClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAxKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbitcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXHRcdEJJVCgxNSlcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbisjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcdFx0XHQweDA2XG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuK1x0KEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4rXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuK1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuK1xuK3N0cnVjdCBhYzMwMF9lcGh5X2N0bCB7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0dTE2IHN5c19jb250cm9sO1xuK1x0dTE2IGVwaHlfY29uZmlnO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgcGFja2FnZV9rbm93bjtcbitcdGJvb2wgaW50ZXJuYWxfZGxkbztcbitcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4rXHRib29sIHBvd2VyZWQ7XG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgaW50XG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbitcdFx0XHRcdHUxNiB2YWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHR1MTYgdmFsID0gKHJldCBcdTAwMjYgfm1hc2spIHwgKHNldCBcdTAwMjYgbWFzayk7XG4rXG4rXHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbitcdFx0XHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuK1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuK1x0fVxuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuK1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbitcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbitcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXG4rXHQgKi9cbitcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuK1x0XHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZWNsayk7XG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxuK1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHU4IHBhY2thZ2Vfc3RhdHVzO1xuK1x0dTE2IHJlc2V0X3ZhbHVlO1xuK1x0aW50IHN5c19jb250cm9sO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbitcdFx0ZnNsZWVwKDEwMDAwKTtcbitcdH1cbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1xuK1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuK1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4rXHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbitcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4rXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuK1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuK1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuK1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuK1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Bvd2VyX29mZjpcbitcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcbit7XG4rXHRjbGtfcHV0KGRhdGEpO1xuK31cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4rXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwiKSk7XG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdHByaXYtXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cIikpO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cIikpO1xuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuK1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwiLFxuK1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4rXHR9XG4rXHRwcml2LVx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jb25maWcgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OGYyYjBiNjM5MDk2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5AQCAtMCwwICsxLDUzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbitcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXHRcdFx0XHQwXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XHRcdFx0XHQ2XG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cdFx0MlxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVx0MHg0ODI0XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXHQweDE3XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVx0MHg3MDhmXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1x0XHRcdDB4MTVcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXG4rXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbitcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcdFx0MHgwMGJjXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcdDB4MDA0NFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4rXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4rXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcbitcbisvKlxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXG4rICovXG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwiLFxuK1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuK1x0c2l6ZV90IGk7XG4rXHRzaXplX3QgbGVuO1xuK1x0dTggKmJ1ZjtcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuK1x0aWYgKElTX0VSUihjZWxsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XG4rXG4rXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbitcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1x0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xuK1x0XHRrZnJlZShidWYpO1xuK1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbitcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuK1x0a2ZyZWUoYnVmKTtcbitcdCp2YWx1ZSA9IHZhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBzZWxlY3RhYmxlO1xuK1x0Ym9vbCBmaXhlZF9hYzMwMDtcbitcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4rXHR1OCBjYWxpYnJhdGlvbjtcbitcdHUzMiBiYXNlX2FkZHI7XG4rXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCJyZWdcIiwgXHUwMDI2YmFzZV9hZGRyKTtcbitcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRpZiAoIXNlbGVjdGFibGUgXHUwMDI2XHUwMDI2ICFmaXhlZF9hYzMwMCBcdTAwMjZcdTAwMjZcbitcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcbitcdGhhc19jb25maWd1cmF0aW9uID1cbitcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCJudm1lbS1jZWxsLW5hbWVzXCIsXG4rXHRcdFx0XHRcdCBcImNvbmZpZ3VyYXRpb25cIikgXHUwMDNlPSAwO1xuK1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4rXHRcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcImNvbmZpZ3VyYXRpb25cIixcbitcdFx0XHRcdFx0XHRcdTAwMjZjb25maWd1cmF0aW9uKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdGlmIChzZWxlY3RhYmxlKSB7XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuK1x0XHRcdGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4rXHRcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4rXHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4rXHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICBcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbitcdFx0XHRcdGNvbmZpZ3VyYXRpb24pO1xuK1xuK1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4rXHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuK1x0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICAgXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCIpO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4rXG4rb3V0X3B1dF9ub2RlOlxuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbitcbitvdXRfcmVzdG9yZV9wYWdlOlxuK1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbitcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbitcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjM1LjY4NTkyNjM1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NjQ4OTI1MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gSXQncyBhbiBFdGhlcm5ldCBQSFksIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBUaGVzZSBQSFkgZHJpdmVycyB1c3VhbGx5IGdldCBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cywgcmlnaHQ/IEluIFFFTVUsIHdlIGNhbiwgaW4gdGhlb3J5LCBlbXVsYXRlIGFuIE1ESU8gYnVzLCBidXQgaXQgbmVlZHMgdG8gYmUgc3VwcG9ydGVkIGJ5IHRoZSBlbXVsYXRlZCBNQUMsIG9yIHdlIGNhbiB1c2UgYSBkdW1teSBNRElPIGJ1cyBpZiBuZWNlc3NhcnkuIE1vcmUgc3BlY2lmaWNhbGx5LCBQSFkgZHJpdmVycyB0eXBpY2FsbHkgb25seSBwcm9iZSBpZiB0aGVyZSdzIGEgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlIG9yIGlmIHRoZSBQSFkgSUQgbWF0Y2hlcyBvbiBhbiBNRElPIGJ1cy5cblxuV2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21lIHRyaWNrcyB1cCBpdHMgc2xlZXZlPyBJIHNlZW0gdG8gcmVjYWxsIGl0IGNhbiBpbmplY3QgTURJTyBkZXZpY2VzIGlmIHdlIGNhbiBjcmVhdGUgYW4gTURJTyBidXMsIG1heWJlIHRocm91Z2ggYW4gZW11bGF0ZWQgTklDLiBEb2VzIHN5emthbGxlciBldmVuICpmdXp6KiBQSFkgZHJpdmVycz8gWWVhaCwgaXQgZG9lcywgb3IgYXQgbGVhc3QgaXQgY2FuIHRyaWdnZXIgYSBwcm9iZSBpZiB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgYW5kIE1ESU8gZGV2aWNlcyBleGlzdC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgTURJTyBvciBQSFktcmVsYXRlZCB0aGluZ3MgaW4gdGhlIHN5emthbGxlciBkZWZpbml0aW9ucy4gQnV0IHdhaXQsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgcHJvbXB0OiBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlbiBpdCBpcyBub3QgV29ydGhGdXp6aW5nLlxuXG5Ib3cgY2FuIHRoaXMgZHJpdmVyIGJlIHByb2JlZCBpbiBRRU1VPyBXZSdkIGlkZWFsbHkgbmVlZCBhIGRldmljZSB0cmVlLCBhbmQgaXQncyBub3QgZWFzeSB0byBqdXN0IGluamVjdCAqYW55KiBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZSBhdCBydW50aW1lIGluIFFFTVUgd2l0aG91dCBEVCBvdmVybGF5cy4gU3l6a2FsbGVyICpoYXMqIHNvbWUgRFQgb3ZlcmxheSBzdXBwb3J0LCBidXQgaXQncyBsaW1pdGVkLCBhbmQgSSBkb3VidCBpdCdzIGZsZXhpYmxlIGVub3VnaCBmb3IgdGhpcy4gSG93ZXZlciwgbGV0J3MgbG9vayBhdCB0aGUgY29kZSB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWFibGUgb25seSB3aXRoIERULiBJIG5lZWQgdG8gY2hlY2sgaG93IGBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2VgIHdvcmtzLlxuXG5BaCBoYSEgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgKmV4cGxpY2l0bHkqIHJlcXVpcmVzIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgdGhhdCB0aGUgcGFyZW50IG5vZGUgaXMgY29tcGF0aWJsZSB3aXRoIGBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiYCBvciBzaW1pbGFyLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSwgdGhpcyB0aGluZyB3aWxsICpuZXZlciogcHJvYmUuIENhbiBzeXprYWxsZXIgaW5qZWN0IG5vZGVzIHdpdGggdGhlc2Ugc3BlY2lmaWMgY29tcGF0aWJsZXM/IE1heWJlLCBidXQgcHJvYmFibHkgbm90IGVhc2lseTsgRFQgb3ZlcmxheXMgYXJlIHRyaWNreS5cblxuV2FpdCBhIHNlY29uZCwgZXZlbiBpZiBpdCAqY291bGQqIGJlIHByb2JlZCwgdGhpcyBpcyBhICpoYXJkd2FyZS1zcGVjaWZpYyogUEhZIGRyaXZlciwgbWVhbnQgZm9yIHRob3NlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZXNlIGFyZSBwaHlzaWNhbCBjaGlwcyEgVGhleSBjb21tdW5pY2F0ZSB2aWEgTURJTyBhbmQsIGZvciBBQzIwMCwgSTJDLiBJcyBpdCBldmVuIHdvcnRoIGZ1enppbmcgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgbGlrZSB0aGlzPyBJdCdzIG5vdCBsaWtlbHkgdG8gaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24uIExldCdzIGNoZWNrIGlmIHRoZXJlJ3MgSTJDIG9yIE1ESU8gZW11bGF0aW9uIGluIFFFTVUuIFVubGlrZWx5LlxuXG5IYW5nIG9uLiBgYWMyMDBfZXBoeV9jdGxfY3JlYXRlYC4uLiBJdCB1c2VzIGBvZl9wYXJzZV9waGFuZGxlYCBhbmQgYG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlYC4gSXQgKnJlcXVpcmVzKiBhbiBJMkMgY2xpZW50IGRldmljZSB0byBleGlzdCBhbmQgYmUgbGlua2VkLiBUaGlzIGlzICpkZWVwbHkqIHRpZWQgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlOiBBbGx3aW5uZXIgU29DcywgQUMyMDAvQUMzMDAgUE1JQ3MsIGFsbCB0aGF0LiBUaGlzIHdpbGwgYmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50ICp3aXRob3V0KiB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBvciBjb21wbGV4IERUIG92ZXJsYXlzIHRoYXQgYWxzbyBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZXMgYW5kIG1vY2sgdGhlaXIgcmVnbWFwcy5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIGl0J3MgKnJlYWxseSogdW5yZWFjaGFibGUuIExldCdzIGxpc3QgdGhlIGRlcGVuZGVuY2llczpcblxuMS4gIEEgZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhlIFBIWSB3aXRoIGEgcGFyZW50IG5vZGUgaGF2aW5nIGBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcImAuXG4yLiAgRm9yIEFDMjAwLCBhbiBJMkMgZGV2aWNlIG5vZGUgcmVmZXJlbmNlZCBieSBgeC1wb3dlcnMsYWMyMDBgLCB3aGljaCBtdXN0IGhhdmUgYSBib3VuZCBkcml2ZXIgcHJvdmlkaW5nIGEgcmVnbWFwLlxuMy4gIEZvciBBQzMwMCwgYSBjbG9jayByZWZlcmVuY2VkIGJ5IGBjbG9ja3NgIHByb3BlcnR5LlxuNC4gIEEgcmVndWxhdG9yIHJlZmVyZW5jZWQgYnkgYHZjYy1zdXBwbHlgLlxuNS4gIEFuIE5WTUVNIGNlbGwgcmVmZXJlbmNlZCBieSBgbnZtZW0tY2VsbHNgLlxuXG5BbGwgdGhlc2UgZGVwZW5kZW5jaWVzIG1ha2UgaXQgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBnZXQgdGhpcyBkcml2ZXIgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IGluIGEgZ2VuZXJpYyBmdXp6aW5nIGVudmlyb25tZW50IHdpdGhvdXQgYSBzcGVjaWFsaXplZCBlbXVsYXRvciBmb3IgdGhlIEFsbHdpbm5lci9YLVBvd2VycyBoYXJkd2FyZS5cblxuVGhlcmVmb3JlLCBJJ20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29kZSBpcyBub3QgcmVhY2hhYmxlIGluIFFFTVUgb3Igc2ltaWxhciBlbnZpcm9ubWVudHMuIEl0J3MgYWxsIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUtZGVwZW5kZW50IHN0dWZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ5MiwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjM6Mzg6NTUuMzM0ODU0ODk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlcidzIHByb2JlIGFuZCBtYXRjaCBmdW5jdGlvbnMgc3RyaWN0bHkgcmVxdWlyZSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcywgY29tcGF0aWJsZXMsIGFuZCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgKHN1Y2ggYXMgSTJDIGNsaWVudHMgd2l0aCByZWdtYXBzLCBjbG9ja3MsIHJlZ3VsYXRvcnMsIGFuZCBOVk1FTSBjZWxscykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBhbmQgbWF0Y2ggZnVuY3Rpb25zIHN0cmljdGx5IHJlcXVpcmUgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMsIGNvbXBhdGlibGVzLCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIChzdWNoIGFzIEkyQyBjbGllbnRzIHdpdGggcmVnbWFwcywgY2xvY2tzLCByZWd1bGF0b3JzLCBhbmQgTlZNRU0gY2VsbHMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjU1LjMzNDg3NzYyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5r2vz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 23:36:40 +0000 UTC FinishedAt: 2026-08-11 23:38:57 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgYW5kIG1hdGNoIGZ1bmN0aW9ucyBzdHJpY3RseSByZXF1aXJlIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzLCBjb21wYXRpYmxlcywgYW5kIGhhcmR3YXJlIGRlcGVuZGVuY2llcyAoc3VjaCBhcyBJMkMgY2xpZW50cyB3aXRoIHJlZ21hcHMsIGNsb2NrcywgcmVndWxhdG9ycywgYW5kIE5WTUVNIGNlbGxzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmJhNzAyODJjYWI2ZjZkM2E3ZDU5M2NkZjgwZTgyNmI2ZTY3NGNmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIzOjM4OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWZlNTdiZDE2M2RkN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbFxuQEAgLTAsMCAmIzQzOzEsMTU0IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbiYjNDM7ICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXG4mIzQzOyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcbiYjNDM7ICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMmIzM5O3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbFxuJiM0MzsgIHJlZ2lzdGVycyBvY2N1cHkgYSBzZWNvbmQgQ2xhdXNlIDIyIGFkZHJlc3MgZml4ZWQgYXQgMTYgcGx1cyB0aGUgbGluayBQSFlcbiYjNDM7ICBhZGRyZXNzLlxuJiM0MztcbiYjNDM7ICBTeXN0ZW1zIHdpdGggYSBrbm93biBwYWNrYWdlIHVzZSB0aGUgY29ycmVzcG9uZGluZyBBQzIwMCBvciBBQzMwMCBjb21wYXRpYmxlLlxuJiM0MzsgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4mIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuXG4mIzQzO1xuJiM0MzsgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmRcbiYjNDM7ICBjaGlsZCB1c2UgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBUaGUgQUMyMDAgZHJpdmVyIHByb2dyYW1zIHRoYXQgYWRkcmVzcyBpbnRvXG4mIzQzOyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhpbXVtOiAzMVxuJiM0MztcbiYjNDM7ICBjbG9ja3M6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MzsgICAgZGVzY3JpcHRpb246IEFDMzAwIGlucHV0IGNsb2NrLCBydW5uaW5nIGF0IDI0LCAyNSwgb3IgMjcgTUh6XG4mIzQzO1xuJiM0MzsgIHZjYy1zdXBwbHk6XG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXG4mIzQzOyAgICAgIG9uIEFDMzAwLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsczpcbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcbiYjNDM7ICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDBcbiYjNDM7ICAgICAgd2hlbiBzZXQgYW5kIEFDMjAwIHdoZW4gY2xlYXIsIGFuZCBiaXQgOSByZXF1ZXN0cyB0aGUgQUMzMDBcbiYjNDM7ICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcbiYjNDM7ICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2VcbiYjNDM7ICAgICAgY29weSBpbnN0ZWFkLlxuJiM0MztcbiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOlxuJiM0MzsgICAgY29uc3Q6IGNvbmZpZ3VyYXRpb25cbiYjNDM7XG4mIzQzOyAgeC1wb3dlcnMsYWMyMDA6XG4mIzQzOyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy9waGFuZGxlXG4mIzQzOyAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIHByb3ZpZGluZyBJMkMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlXG4mIzQzOyAgICAgIGNvbnRyb2wgcmVnaXN0ZXJzIHVzZWQgdG8gcG93ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgRXRoZXJuZXQgUEhZLlxuJiM0MztcbiYjNDM7ICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOlxuJiM0MzsgICAgdHlwZTogYm9vbGVhblxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWVcbiYjNDM7ICAgICAgU29DIGludGVncmF0aW9ucywgaW5jbHVkaW5nIHRoZSBBbGx3aW5uZXIgSDYgQUMyMDAgY29ubmVjdGlvbi5cbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIF5ldGhlcm5ldC1waHlAW2EtZjAtOV0mIzQzOyQ6XG4mIzQzOyAgICAkcmVmOiBldGhlcm5ldC1waHkueWFtbCNcbiYjNDM7ICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgY29uc3Q6IGV0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFxuJiM0MzsgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgIC0gY29tcGF0aWJsZVxuJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7cmVxdWlyZWQ6XG4mIzQzOyAgLSBjb21wYXRpYmxlXG4mIzQzOyAgLSB2Y2Mtc3VwcGx5XG4mIzQzO1xuJiM0MztkZXBlbmRlbnRSZXF1aXJlZDpcbiYjNDM7ICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF1cbiYjNDM7XG4mIzQzO2FsbE9mOlxuJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNsb2NrczogZmFsc2VcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbiYjNDM7ICAgIHRoZW46XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgbWF4aW11bTogN1xuJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZVxuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIGNsb2Nrc1xuJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHNcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7ICAgICAgcmVxdWlyZWQ6XG4mIzQzOyAgICAgICAgLSBjbG9ja3NcbiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzXG4mIzQzOyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4mIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMFxuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICBtZGlvIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gXHUwMDNjXHUwMDI2cmVnXzN2M1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSBcdTAwM2NcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG4mIzQzO1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtNDg0LDYgJiM0Mzs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuJiM0Mztjb25maWcgWFBPV0VSU19BQ1gwMF9QSFlcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIENPTU1PTl9DTEsgXHUwMDI2XHUwMDI2IE5WTUVNIFx1MDAyNlx1MDAyNiBPRl9NRElPIFx1MDAyNlx1MDAyNiBSRUdVTEFUT1JcbiYjNDM7XHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuJiM0MztcdCAgYW5kIEFDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIgY29uZmlndXJlcyB0aGVpciBjb21tb24gTURJTyBQSFlcbiYjNDM7XHQgIHJlZ2lzdGVycyBhbmQgdGhlIHBhY2thZ2Utc3BlY2lmaWMgQUMyMDAgSTJDIG9yIEFDMzAwIE1ESU8gY29udHJvbFxuJiM0MztcdCAgcmVnaXN0ZXJzLlxuJiM0MztcbiBjb25maWcgWElMSU5YX0dNSUkyUkdNSUlcbiBcdHRyaXN0YXRlIFwmIzM0O1hpbGlueCBHTUlJMlJHTUlJIGNvbnZlcnRlciBkcml2ZXJcJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMSw0ICYjNDM7MTAxLDUgQEAgb2JqLSQoQ09ORklHX1NNU0NfUEhZKVx0XHQmIzQzOz0gc21zYy5vXG4gb2JqLSQoQ09ORklHX1NURTEwWFApXHRcdCYjNDM7PSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQmIzQzOz0gdGVyYW5ldGljcy5vXG4gb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKVx0JiM0Mzs9IHZpdGVzc2Uub1xuJiM0MztvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQmIzQzOz0geHBvd2Vycy9cbiBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICYjNDM7PSB4aWxpbnhfZ21paTJyZ21paS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmFlOTc3YTc5NTgzMjVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSwzIEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXG4mIzQzO29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgJiM0Mzs9IHhwb3dlcnMtYWN4MDAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDFmNzFmNjM1NGZlMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhIFx1MDAzY2FuZHJlLnByenl3YXJhQGFybS5jb21cdTAwM2UpXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7YWN4MDAuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXHQzXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcdDI0MDAwMDAwXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcdDI3MDAwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHXHRcdFx0MHgwMDE0XG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEVcdFx0XHRCSVQoMSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUdcdFx0XHQweDAwMTZcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIEFDMjAwLWludGVybmFsIGNvcHkgb2YgdGhlIEV0aGVybmV0IFBIWSBjYWxpYnJhdGlvbiBlRnVzZS4gKi9cbiYjNDM7I2RlZmluZSBBQzIwMF9FRlVTRV9FUEhZX1JFR1x0XHRcdDB4ODAwNFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NUTF9SRUdcdFx0XHQweDYwMDBcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcdFx0XHRHRU5NQVNLKDgsIDQpXG4mIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7XG4mIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xuJiM0MztcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHUxNiBlcGh5X2N0bDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHN1cHBseV9lbmFibGVkO1xuJiM0MztcdGJvb2wgcG93ZXJlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY3RsIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcbiYjNDM7XHRcdEZJRUxEX1BSRVAoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCByZWcsIHZhbHVlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZWcsIEVSUl9QVFIocmV0KSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4mIzQzO1x0XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXG4mIzQzO1x0XHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuJiM0MztcdFx0XHRcdFx0ICAgQUMyMDBfRVBIWV9TSFVURE9XTik7XG4mIzQzO1x0XHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4mIzQzO1x0XHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAoIWVycilcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuJiM0MztcdFx0ZWxzZSBpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgQUMyMDBfRVBIWV9DVExfUkVHLFxuJiM0MztcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1MTYgZXBoeV9jdGw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeV9hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbiYjNDM7XHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRwcml2LVx1MDAzZXBoeV9hZGRyID0gcGh5X2FkZHI7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcGh5X2N0bCA9IGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KTtcbiYjNDM7XG4mIzQzO1x0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcbiYjNDM7XHRcdFx0XHQgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZGlzYWJsZTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9kaXNhYmxlOlxuJiM0MztcdC8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4mIzQzO1x0YWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uO1xuJiM0MztcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqYWMyMDBfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XG4mIzQzO1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xuJiM0MztcdHU4IGJwc19lZmZ1c2VfY29kZTtcbiYjNDM7XHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuJiM0MztcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuJiM0MztcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcJiMzNDt2Y2NcJiMzNDspO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cdTAwM2V2Y2MpLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCYjMzQ7KSk7XG4mIzQzO1xuJiM0MztcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7eC1wb3dlcnMsYWMyMDBcJiMzNDssIDApO1xuJiM0MztcdGlmICghYWMyMDBfbm9kZSlcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDttaXNzaW5nIHgtcG93ZXJzLGFjMjAwIHJlZmVyZW5jZVxcblwmIzM0OykpO1xuJiM0MztcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuJiM0MztcdG9mX25vZGVfcHV0KGFjMjAwX25vZGUpO1xuJiM0MztcdGlmICghY2xpZW50KSB7XG4mIzQzO1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDtBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cJiMzNDspKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZGV2aWNlX2xpbmtfYWRkKGRldiwgXHUwMDI2Y2xpZW50LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWRldmljZV90cnlsb2NrKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXHUwMDI2Y2xpZW50LVx1MDAzZWRldiwgTlVMTCk7XG4mIzQzO1x0ZGV2aWNlX3VubG9jayhcdTAwMjZjbGllbnQtXHUwMDNlZGV2KTtcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7QUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcbiYjNDM7XHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNmludGVybmFsX2NhbGlicmF0aW9uKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2N0bCA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNsaykpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIoY2xrKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbiYjNDM7XHRjbGtfcHV0KGNsayk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbiYjNDM7XHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxuJiM0MztcdFx0cHJpdi1cdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIGNsa19yYXRlKTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlY29udHJvbC5zZXRfaW50ZXJmYWNlID0gYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZTtcbiYjNDM7XHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwcml2LVx1MDAzZWNvbnRyb2w7XG4mIzQzO1xuJiM0MztvdXRfZXJyb3I6XG4mIzQzO1x0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxcblwmIzM0Oyk7XG4mIzQzO291dF9wdXRfY2xpZW50OlxuJiM0MztcdHB1dF9kZXZpY2UoXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYWE1NjA0MzJhMTRjOVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuY1xuQEAgLTAsMCAmIzQzOzEsMzg3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2UgYmFja2VuZFxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlx0MjUwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUdcdFx0XHQweDAwXG4mIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTS1x0XHRHRU5NQVNLKDExLCA4KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFpcdFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXHRcdEZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDEpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VGVVNFX0NMS19FTkFCTEVcdFx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgwKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXHRcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTS1x0XHRHRU5NQVNLKDIsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19CSUFTMV9SRUdcdFx0XHQweDAyXG4mIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEVcdFx0QklUKDE1KVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXHRcdFx0MHgwNVxuJiM0MzsjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbiYjNDM7I2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlx0XHRcdDJcbiYjNDM7I2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXHRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1x0XHRcdDB4MDZcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMXHRcdFx0QklUKDExKVxuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfU0hVVERPV05cdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXFxcbiYjNDM7XHQoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4mIzQzO1x0IEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDMzAwX01ESU9fRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXG4mIzQzO1x0IEZJRUxEX1BSRVAoQUMzMDBfTUlJX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcXFxuJiM0MztcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuJiM0MztcbiYjNDM7c3RydWN0IGFjMzAwX2VwaHlfY3RsIHtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbiYjNDM7XHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4mIzQzO1x0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdHUxNiBzeXNfY29udHJvbDtcbiYjNDM7XHR1MTYgZXBoeV9jb25maWc7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbiYjNDM7XHRib29sIHBhY2thZ2Vfa25vd247XG4mIzQzO1x0Ym9vbCBpbnRlcm5hbF9kbGRvO1xuJiM0MztcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4mIzQzO1x0Ym9vbCBwb3dlcmVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludFxuJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9yZWFkKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0IEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4mIzQzO1x0XHRcdFx0dTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0sIHZhbCk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbiYjNDM7XHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtXHUwMDNlcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdHUxNiB2YWwgPSAocmV0IFx1MDAyNiB+bWFzaykgfCAoc2V0IFx1MDAyNiBtYXNrKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB2YWwgPT0gcmV0ID8gMCA6XG4mIzQzO1x0XHRcdF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuJiM0MztcdFx0XHRcdFx0ICAgIHJlZ251bSwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgYWMzMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZWVwaHlfY29uZmlnIHxcbiYjNDM7XHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4mIzQzO1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbiYjNDM7XHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXG4mIzQzO1x0ICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gIXByaXYtXHUwMDNlcGFja2FnZV9rbm93biB8fCAhcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCkge1xuJiM0MztcdFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbiYjNDM7XHRcdFx0XHRcdCAgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gZXJyO1xuJiM0MztcdFx0ZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vwb3dlcmVkID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuJiM0MztcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKCFlcnIpXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcbiYjNDM7XHRcdGVsc2UgaWYgKCFyZXQpXG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO2FjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4mIzQzO1x0XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbiYjNDM7XHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMIDogMCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbiYjNDM7XHR1OCBwYWNrYWdlX3N0YXR1cztcbiYjNDM7XHR1MTYgcmVzZXRfdmFsdWU7XG4mIzQzO1x0aW50IHN5c19jb250cm9sO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbiYjNDM7XHRcdHJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi1cdTAwM2V2Y2MpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbiYjNDM7XHRcdGZzbGVlcCgxMDAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi1cdTAwM2VjbGspO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0cHJpdi1cdTAwM2Vwb3dlcmVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuJiM0MztcdHJlc2V0X3ZhbHVlID0gYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdik7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdFx0ICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHQvKiBSZXRhaW4gdGhlIHZlbmRvciBjbG9jay1lbmFibGUgZGVmYXVsdHMsIGluY2x1ZGluZyB0aGUgZUZ1c2UgY2xvY2suICovXG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdHN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpO1xuJiM0MztcdGlmIChzeXNfY29udHJvbCBcdTAwM2MgMCkge1xuJiM0MztcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7XG4mIzQzO1x0aWYgKCh+cGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cbiYjNDM7XHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XG4mIzQzO1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcbiYjNDM7XHRcdFx0XHQgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsXG4mIzQzO1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbiYjNDM7XHRcdFx0XHQgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4mIzQzO1xuJiM0MztcdC8qIEtlZXAgdGhlIGRvY3VtZW50ZWQgZGVmYXVsdCBkcml2ZSBsZXZlbCBhbmQgbGVhdmUgdGhlIElSUSBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuJiM0MztcdFx0XHRcdCAgIEFDMzAwX1NZU19JT19WQUxVRSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XG4mIzQzO1x0ZnNsZWVwKDEwMDAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxuJiM0MztcdFx0XHRcdCAgIGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8XG4mIzQzO1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRmc2xlZXAoMTAwMDApO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4mIzQzO1x0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9wb3dlcl9vZmY6XG4mIzQzO1x0YWMzMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWMzMDBfZXBoeV9jbGtfcHV0KHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjbGtfcHV0KGRhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbiYjNDM7YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4mIzQzO1x0dTggYmdzX2VmZnVzZV9jb2RlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7bGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXG5cJiMzNDspKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwmIzM0O3ZjY1wmIzM0Oyk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VjbGsgPSBvZl9jbGtfZ2V0KHBhY2thZ2Vfbm9kZSwgMCk7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZWNsayksXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cJiMzNDspKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXHUwMDNlY2xrKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIGxvY2sgY2xvY2sgcmF0ZVxcblwmIzM0OykpO1xuJiM0MztcbiYjNDM7XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LVx1MDAzZWNsayk7XG4mIzQzO1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6XG4mIzQzO1x0XHRwcml2LVx1MDAzZXN5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgaW5wdXQgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHByaXYtXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi9cbiYjNDM7XHRiZ3NfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4mIzQzO1x0XHRcdCAgIEZJRUxEX01BWChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSyk7XG4mIzQzO1x0cHJpdi1cdTAwM2VlcGh5X2NvbmZpZyA9XG4mIzQzO1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuJiM0MztcdC8qIEVQSFlfTU9ERSBhbmQgQklTVF9DTEtfRU4gc3RheSBjbGVhciBmb3Igbm9ybWFsIG9wZXJhdGlvbi4gKi9cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4mIzQzO1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29mZiA9IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZjtcbiYjNDM7XHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMzAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4mIzQzO1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuJiM0MztcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xuQEAgLTAsMCAmIzQzOzEsNTM2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LypcbiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXHUwMDNjamVybmVqLnNrcmFiZWNAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lbS1jb25zdW1lci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDthY3gwMC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSURcdFx0XHRcdDB4MDA0NDE0MDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTS1x0R0VOTUFTSygzLCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXHRcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMFx0XHRcdFx0MFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMVx0XHRcdFx0MVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfNlx0XHRcdFx0NlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOFx0XHRcdFx0OFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPXHRcdDJcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUVcdDB4NDgyNFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcdFx0MHgxM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFR1x0MHgxN1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcdEJJVCgzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHXHRcdDB4MThcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1x0XHRHRU5NQVNLKDE0LCAxMilcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcdFx0MHgxMFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1x0XHQweDEzXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUVcdFx0MHhmMDAwXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4ZlxuJiM0MzsjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcdDB4NzA4YlxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUdcdFx0XHQweDE1XG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLXHRcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcXFxuJiM0MztcdChGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcXFxuJiM0MztcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDE1LCAweDMwKVxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbiYjNDM7XHRBQ1gwMF9QQUdFNl9UWF9MRVZFTF9WQUxVRSgweDM1LCAweDMzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFXHRcdDB4MDBiY1xuJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXHRcdDB4MWRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfQ0FMX09QQVFVRV9CSVRTXHQweDAwNDRcbiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcbiYjNDM7XHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4mIzQzO1x0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcbiYjNDM7ICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXG4mIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4mIzQzOyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xuJiM0MztcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbiYjNDM7XHRib29sIGlzX2FjMzAwO1xuJiM0MztcdGJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7XG4mIzQzO1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcGFnZSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vbihwcml2LVx1MDAzZWNvbnRyb2wsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHByaXYtXHUwMDNlcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2Vwb3dlcl9vZmYocHJpdi1cdTAwM2Vjb250cm9sKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXNldF9pbnRlcmZhY2UocHJpdi1cdTAwM2Vjb250cm9sLFxuJiM0MztcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IGRhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2X3dhcm4ocHJpdi1cdTAwM2VwaHlkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIEVSUl9QVFIocmV0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7XG4mIzQzO1x0c2l6ZV90IGk7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHR1OCAqYnVmO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihjZWxsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xuJiM0MztcbiYjNDM7XHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbiYjNDM7XHRudm1lbV9jZWxsX3B1dChjZWxsKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuJiM0MztcdGlmICghbGVuIHx8IGxlbiBcdTAwM2Ugc2l6ZW9mKCp2YWx1ZSkpIHtcbiYjNDM7XHRcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuJiM0MztcdGtmcmVlKGJ1Zik7XG4mIzQzO1x0KnZhbHVlID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XG4mIzQzO1x0Ym9vbCBzZWxlY3RhYmxlO1xuJiM0MztcdGJvb2wgZml4ZWRfYWMzMDA7XG4mIzQzO1x0Ym9vbCBoYXNfY29uZmlndXJhdGlvbjtcbiYjNDM7XHR1OCBjYWxpYnJhdGlvbjtcbiYjNDM7XHR1MzIgYmFzZV9hZGRyO1xuJiM0MztcdHUxNiBjb25maWd1cmF0aW9uID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cdTAwM2VvZl9ub2RlKTtcbiYjNDM7XHRpZiAoIXBhY2thZ2Vfbm9kZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZiYXNlX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbiYjNDM7XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFwmIzM0O3gtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwmIzM0Oyk7XG4mIzQzO1x0aWYgKCFzZWxlY3RhYmxlIFx1MDAyNlx1MDAyNiAhZml4ZWRfYWMzMDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbiYjNDM7XG4mIzQzO1x0aGFzX2NvbmZpZ3VyYXRpb24gPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7bnZtZW0tY2VsbC1uYW1lc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtjb25maWd1cmF0aW9uXCYjMzQ7KSBcdTAwM2U9IDA7XG4mIzQzO1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4mIzQzO1x0XHRyZXQgPSBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHBhY2thZ2Vfbm9kZSwgXCYjMzQ7Y29uZmlndXJhdGlvblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2Y29uZmlndXJhdGlvbik7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfcHV0X25vZGU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4mIzQzO1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGVjdGFibGUpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuJiM0MztcdFx0XHRjb25maWd1cmF0aW9uIFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4mIzQzO1x0XHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfVkFSSUFOVF9BQzMwMCkgIT1cbiYjNDM7XHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4mIzQzO1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgIFwmIzM0O2NvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X3B1dF9ub2RlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbiYjNDM7XHRcdFx0XHRjb25maWd1cmF0aW9uKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ISEoY29uZmlndXJhdGlvbiBcdTAwMjYgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XKTtcbiYjNDM7XHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuJiM0MztcdFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICBcJiMzNDt4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbnRyb2wgPVxuJiM0MztcdFx0XHRhYzMwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2Vjb250cm9sID1cbiYjNDM7XHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaGFzX2NvbmZpZ3VyYXRpb24sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4mIzQzO1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4mIzQzO1xuJiM0MztvdXRfcHV0X25vZGU6XG4mIzQzO1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4mIzQzO1x0XHRcdFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZW9mX25vZGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHBvd2VyIG9uIGNvbnRyb2wgYmxvY2tcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4mIzQzO1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0dTE2IGFmZV9lcV9yeF9kZXRlY3QgPSBwcml2LVx1MDAzZWlzX2FjMzAwID9cbiYjNDM7XHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuJiM0MztcdFx0QUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTtcbiYjNDM7XHR1MTYgdHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9ERUZBVUxUX1ZBTFVFO1xuJiM0MztcdHUxNiBnbG9iYWxfY29uZmlnO1xuJiM0MztcdGludCBvbGRwYWdlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbiYjNDM7XHRcdGdsb2JhbF9jb25maWcgfD0gQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4mIzQzO1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcbiYjNDM7XHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2Vpc19hYzMwMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xuJiM0MztcdFx0YWZlX2VxX3J4X2RldGVjdCA9XG4mIzQzO1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHRcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZHBhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzEpO1xuJiM0MztcdGlmIChvbGRwYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0UxX0FQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEUsIDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbiYjNDM7XHRcdFx0ICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdCAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHQgIGFmZV9lcV9yeF9kZXRlY3QpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHLFxuJiM0MztcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUcsXG4mIzQzO1x0XHRcdCAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpO1xuJiM0MztcbiYjNDM7b3V0X3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXQgPSBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbiYjNDM7XHRyZXR1cm4gZ2VucGh5X2M0NV9hbl9jb25maWdfZWVlX2FuZWcocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0YWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBQb3dlcmluZyBvZmYgdGhlIGNvbnRyb2wgYmxvY2sgbG9zZXMgdGhlIHZlbmRvci1wYWdlIHN0YXRlLiAqL1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmVzdW1lX3JldDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdHJlc3VtZV9yZXQgPSBhY3gwMF9lcGh5X3Bvd2VyX29uX2FuZF9yZXN1bWUocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXN1bWVfcmV0KVxuJiM0MztcdFx0XHRwaHlkZXZfd2FybihwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbiYjNDM7XHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xuJiM0MztcdGlmICghcGFja2FnZV9ub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0bWF0Y2ggPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcJiMzNDspIHx8XG4mIzQzO1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcJiMzNDspO1xuJiM0MztcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtYXRjaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFUEhZXCYjMzQ7LFxuJiM0MztcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4mIzQzO1x0XHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxuJiM0MztcdFx0LnJlYWRfcGFnZSA9IGFjeDAwX2VwaHlfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IGFjeDAwX2VwaHlfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbiYjNDM7XHRcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IGFjeDAwX2VwaHlfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIGFjeDAwX2VwaHlfdGJsKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgJiM0MzsxLDI4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7I2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbiYjNDM7XG4mIzQzO3N0cnVjdCBkZXZpY2Vfbm9kZTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wge1xuJiM0MztcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuJiM0MztcdGludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7XG4mIzQzO1x0aW50ICgqc2V0X2ludGVyZmFjZSkoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbiYjNDM7XHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuJiM0MzthYzIwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuJiM0MztcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4mIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBhbmQgbWF0Y2ggZnVuY3Rpb25zIHN0cmljdGx5IHJlcXVpcmUgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMsIGNvbXBhdGlibGVzLCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIChzdWNoIGFzIEkyQyBjbGllbnRzIHdpdGggcmVnbWFwcywgY2xvY2tzLCByZWd1bGF0b3JzLCBhbmQgTlZNRU0gY2VsbHMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YmE3MDI4MmNhYjZmNmQzYTdkNTkzY2RmODBlODI2YjZlNjc0Y2YxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMjM6Mzg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5hZmU1N2JkMTYzZGQ3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbApAQCAtMCwwICYjNDM7MSwxNTQgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlcwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnQKJiM0MzsgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGUKJiM0MzsgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIHBhY2thZ2UgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkCiYjNDM7ICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMmIzM5O3MgSTJDIHJlZ2lzdGVyIGludGVyZmFjZSwgd2hpbGUgQUMzMDAgY29udHJvbAomIzQzOyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWQomIzQzOyAgYWRkcmVzcy4KJiM0MzsKJiM0MzsgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuCiYjNDM7ICBTeXN0ZW1zIHdoaWNoIGNhbiBjb250YWluIGVpdGhlciBwYWNrYWdlIHVzZSB0aGUgQUN4MDAgY29tcGF0aWJsZSBhbmQgYQomIzQzOyAgcGFja2VkIE5WTUVNIGNvbmZpZ3VyYXRpb24gZmllbGQgdG8gc2VsZWN0IHRoZSBiYWNrZW5kIGF0IHJ1bnRpbWUuCiYjNDM7CiYjNDM7ICBUaGUgbGluayBQSFkgY2Fubm90IHJlcG9ydCBpdHMgSUQgdW50aWwgdGhlIHBhY2thZ2UgY29udHJvbCBzZXF1ZW5jZSBoYXMKJiM0MzsgIGNvbXBsZXRlZCwgc28gaXRzIGNoaWxkIG5vZGUgc3VwcGxpZXMgdGhlIGRvY3VtZW50ZWQgUEhZIElELiBUaGUgcGFja2FnZSBhbmQKJiM0MzsgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG8KJiM0MzsgIHRoZSBwYWNrYWdlLCB3aGlsZSB0aGUgQUMzMDAgZHJpdmVyIGRlcml2ZXMgaXRzIGNvbnRyb2wgYWRkcmVzcyBmcm9tIGl0LgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBlbnVtOgomIzQzOyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlCiYjNDM7ICAgICAgLSB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgICAtIHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhpbXVtOiAzMQomIzQzOwomIzQzOyAgY2xvY2tzOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHoKJiM0MzsKJiM0MzsgIHZjYy1zdXBwbHk6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIDMuMyBWIHBhY2thZ2Ugc3VwcGx5LiBUaGlzIGlzIGNvbm5lY3RlZCB0byBFUEhZX1ZDQyBvbiBBQzIwMCBhbmQgVkNDMQomIzQzOyAgICAgIG9uIEFDMzAwLgomIzQzOwomIzQzOyAgbnZtZW0tY2VsbHM6CiYjNDM7ICAgIG1heEl0ZW1zOiAxCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIFBhY2tlZCBFUEhZIGNvbmZpZ3VyYXRpb24gZmllbGQuIEJpdHMgMyB0aHJvdWdoIDAgY29udGFpbiB0aGUgYW5hbG9nCiYjNDM7ICAgICAgY2FsaWJyYXRpb24gY29kZSwgYml0cyA3IHRocm91Z2ggNCBhcmUgcmVzZXJ2ZWQsIGJpdCA4IHNlbGVjdHMgQUMzMDAKJiM0MzsgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMAomIzQzOyAgICAgIGxvdy1jYWxpYnJhdGlvbiB0dW5pbmcgc2VxdWVuY2UuIEEgZml4ZWQgQUMyMDAgcGFja2FnZSBtYXkgcHJvdmlkZSBvbmx5CiYjNDM7ICAgICAgdGhlIGxvdyBjYWxpYnJhdGlvbiBiaXRzIG9yIG9taXQgdGhlIGNlbGwgYW5kIHVzZSBpdHMgaW50ZXJuYWwgZUZ1c2UKJiM0MzsgICAgICBjb3B5IGluc3RlYWQuCiYjNDM7CiYjNDM7ICBudm1lbS1jZWxsLW5hbWVzOgomIzQzOyAgICBjb25zdDogY29uZmlndXJhdGlvbgomIzQzOwomIzQzOyAgeC1wb3dlcnMsYWMyMDA6CiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGUKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgUGhhbmRsZSB0byB0aGUgQUMyMDAgY29tcGFuaW9uIElDIHByb3ZpZGluZyBJMkMgYWNjZXNzIHRvIHRoZSBwYWNrYWdlCiYjNDM7ICAgICAgY29udHJvbCByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuCiYjNDM7CiYjNDM7ICB4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkOgomIzQzOyAgICB0eXBlOiBib29sZWFuCiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEludmVydCB0aGUgeE1JSSByZWNlaXZlIGNsb2NrIGluc2lkZSB0aGUgUEhZLiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHNvbWUKJiM0MzsgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLgomIzQzOwomIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSYjNDM7JDoKJiM0MzsgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjCiYjNDM7ICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDAKJiM0MzsgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgLSBjb21wYXRpYmxlCiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSB2Y2Mtc3VwcGx5CiYjNDM7CiYjNDM7ZGVwZW5kZW50UmVxdWlyZWQ6CiYjNDM7ICBudm1lbS1jZWxsczogWyBudm1lbS1jZWxsLW5hbWVzIF0KJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCMKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY2xvY2tzOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSB4LXBvd2VycyxhYzIwMAomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICAgIHgtcG93ZXJzLGFjMjAwOiBmYWxzZQomIzQzOyAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgLSBjbG9ja3MKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbHMKJiM0MzsgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lcwomIzQzOyAgLSBpZjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZQomIzQzOyAgICB0aGVuOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICByZWc6CiYjNDM7ICAgICAgICAgIG1heGltdW06IDcKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gY2xvY2tzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGxzCiYjNDM7ICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXMKJiM0MzsgICAgICAgIC0geC1wb3dlcnMsYWMyMDAKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgIGNsb2NrcyA9ICZsdDsmYW1wO3B3bSA1Jmd0OzsKJiM0MzsgICAgICAgICAgICB2Y2Mtc3VwcGx5ID0gJmx0OyZhbXA7cmVnXzN2MyZndDs7CiYjNDM7ICAgICAgICAgICAgbnZtZW0tY2VsbHMgPSAmbHQ7JmFtcDtlcGh5X2NvbmZpZ3VyYXRpb24mZ3Q7OwomIzQzOyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAmIzM0O2NvbmZpZ3VyYXRpb24mIzM0OzsKJiM0MzsgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9ICZsdDsmYW1wO2FjMjAwJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlAMCB7CiYjNDM7ICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O2V0aGVybmV0LXBoeS1pZDAwNDQuMTQwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7ICAgIH07CiYjNDM7CiYjNDM7Li4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGI0ZWY5MjdmZDRhNjcuLmQzODM1NTk3ZTM3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC00ODQsNiAmIzQzOzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFkKIAloZWxwCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIHZzYzgyNDQKIAomIzQzO2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWQomIzQzOwl0cmlzdGF0ZSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQ09NTU9OX0NMSyAmYW1wOyZhbXA7IE5WTUVNICZhbXA7JmFtcDsgT0ZfTURJTyAmYW1wOyZhbXA7IFJFR1VMQVRPUgomIzQzOwlkZXBlbmRzIG9uIEkyQyB8fCAhSTJDCiYjNDM7CXNlbGVjdCBQSFlfUEFDS0FHRQomIzQzOwloZWxwCiYjNDM7CSAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMAomIzQzOwkgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZCiYjNDM7CSAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sCiYjNDM7CSAgcmVnaXN0ZXJzLgomIzQzOwogY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJCiAJdHJpc3RhdGUgJiMzNDtYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKaW5kZXggMjVjNGEzYzI0MjlmNy4uNDk1NzVmYTE4NTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQpAQCAtMTAxLDQgJiM0MzsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpCQkmIzQzOz0gc21zYy5vCiBvYmotJChDT05GSUdfU1RFMTBYUCkJCSYjNDM7PSBzdGUxMFhwLm8KIG9iai0kKENPTkZJR19URVJBTkVUSUNTX1BIWSkJJiM0Mzs9IHRlcmFuZXRpY3Mubwogb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKQkmIzQzOz0gdml0ZXNzZS5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKQkmIzQzOz0geHBvd2Vycy8KIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgJiM0Mzs9IHhpbGlueF9nbWlpMnJnbWlpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYWU5NzdhNzk1ODMyNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDMgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7eHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vCiYjNDM7b2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKSAmIzQzOz0geHBvd2Vycy1hY3gwMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4wMWY3MWY2MzU0ZmUxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYwpAQCAtMCwwICYjNDM7MSwzMTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBYLVBvd2VycyBBQzIwMCBFdGhlcm5ldCBQSFkgcGFja2FnZSBiYWNrZW5kCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQXJtIEx0ZC4gKEFuZHJlIFByenl3YXJhICZsdDthbmRyZS5wcnp5d2FyYUBhcm0uY29tJmd0OykKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgJmx0O2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb20mZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pMmMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7YWN4MDAuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUCTMKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaCTI0MDAwMDAwCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWgkyNzAwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcJCQkweDAwMTQKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFCQkJQklUKDEpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRwkJCTB4MDAxNgomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7LyogQUMyMDAtaW50ZXJuYWwgY29weSBvZiB0aGUgRXRoZXJuZXQgUEhZIGNhbGlicmF0aW9uIGVGdXNlLiAqLwomIzQzOyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUcJCQkweDgwMDQKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMjAwX0VQSFlfQ1RMX1JFRwkJCTB4NjAwMAomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWgkJQklUKDIpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0sJCQlHRU5NQVNLKDgsIDQpCiYjNDM7I2RlZmluZSBBQzIwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0sJCUdFTk1BU0soMTUsIDEyKQomIzQzOwomIzQzO3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgY29udHJvbDsKJiM0MzsJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwomIzQzOwlzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldjsKJiM0MzsJdTE2IGVwaHlfY3RsOwomIzQzOwl1bnNpZ25lZCBpbnQgcGh5X2FkZHI7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiBwcml2LSZndDtlcGh5X2N0bCB8CiYjNDM7CQkocHJpdi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID8KJiM0MzsJCSBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCkgfAomIzQzOwkJRklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtJmd0O3BoeV9hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsCiYjNDM7CQkJCXVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlZ21hcF93cml0ZShwcml2LSZndDtyZWdtYXAsIHJlZywgdmFsdWUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2Vycihwcml2LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXG4mIzM0OywKJiM0MzsJCQlyZWcsIEVSUl9QVFIocmV0KSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpIHsKJiM0MzsJCXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSAgIGFjMjAwX2VwaHlfY3RsX2NvbmZpZyhwcml2KSB8CiYjNDM7CQkJCQkgICBBQzIwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCWVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMjAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRywKJiM0MzsJCQkJCSBBQzIwMF9FUEhZX1JNSUlfU0VMLAomIzQzOwkJCQkJIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkJCQkgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCXByaXYtJmd0O2ludGVyZmFjZSA9IGludGVyZmFjZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCQkgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7CiYjNDM7CXUxNiBlcGh5X2N0bDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeV9hZGRyICZndDsgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQgJmFtcDsmYW1wOyBwcml2LSZndDtwaHlfYWRkciA9PSBwaHlfYWRkcikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtwaHlfYWRkciA9IHBoeV9hZGRyOwomIzQzOwomIzQzOwlpZiAoIXByaXYtJmd0O3N1cHBseV9lbmFibGVkKSB7CiYjNDM7CQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXBoeV9jdGwgPSBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdik7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IGZyb20gYSBkaXNhYmxlZCBzdGF0ZSBiZWZvcmUgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyYXRpb24uICovCiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2Rpc2FibGU7CiYjNDM7CiYjNDM7CXJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHLAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLAomIzQzOwkJCQkgICBlcGh5X2N0bCB8IEFDMjAwX0VQSFlfU0hVVERPV04pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsCiYjNDM7CQkJCSAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfAomIzQzOwkJCQkgICBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfZGlzYWJsZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLCBlcGh5X2N0bCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9kaXNhYmxlOwomIzQzOwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2Rpc2FibGU6CiYjNDM7CS8qIEF0dGVtcHQgZXZlcnkgc3RlcCBvZiB0aGUgc2h1dGRvd24gc2VxdWVuY2UgYWZ0ZXIgYSBwYXJ0aWFsIHN0YXJ0LiAqLwomIzQzOwlwcml2LSZndDtwb3dlcmVkID0gdHJ1ZTsKJiM0MzsJYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqCiYjNDM7YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwKJiM0MzsJCSAgICAgIGJvb2wgaGFzX2NhbGlicmF0aW9uLCB1OCBjYWxpYnJhdGlvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJdW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmFjMjAwX25vZGU7CiYjNDM7CXN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdjsKJiM0MzsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsKJiM0MzsJdTggYnBzX2VmZnVzZV9jb2RlOwomIzQzOwlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CXByaXYtJmd0O2RldiA9IGRldjsKJiM0MzsJcHJpdi0mZ3Q7dmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCAmIzM0O3ZjYyYjMzQ7KTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt2Y2MpKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7dmNjKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XG4mIzM0OykpOwomIzQzOwomIzQzOwlhYzIwMF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwYWNrYWdlX25vZGUsICYjMzQ7eC1wb3dlcnMsYWMyMDAmIzM0OywgMCk7CiYjNDM7CWlmICghYWMyMDBfbm9kZSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O21pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXG4mIzM0OykpOwomIzQzOwljbGllbnQgPSBvZl9maW5kX2kyY19kZXZpY2VfYnlfbm9kZShhYzIwMF9ub2RlKTsKJiM0MzsJb2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7CiYjNDM7CWlmICghY2xpZW50KSB7CiYjNDM7CQlyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LAomIzQzOwkJCQkJICAgICAmIzM0O0FDMjAwIGRldmljZSBpcyBub3QgcmVnaXN0ZXJlZFxuJiMzNDspKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWRldmljZV9saW5rX2FkZChkZXYsICZhbXA7Y2xpZW50LSZndDtkZXYsCiYjNDM7CQkJICAgICBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxpbmsgQUMyMDAgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZGV2aWNlX3RyeWxvY2soJmFtcDtjbGllbnQtJmd0O2RldikpIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLAomIzQzOwkJCQkgICAgJiMzNDtBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChkZXZpY2VfaXNfYm91bmQoJmFtcDtjbGllbnQtJmd0O2RldikpCiYjNDM7CQlwcml2LSZndDtyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcCgmYW1wO2NsaWVudC0mZ3Q7ZGV2LCBOVUxMKTsKJiM0MzsJZGV2aWNlX3VubG9jaygmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKCFwcml2LSZndDtyZWdtYXApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLAomIzQzOwkJCQkgICAgJiMzNDtBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghaGFzX2NhbGlicmF0aW9uKSB7CiYjNDM7CQlyZXQgPSByZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIEFDMjAwX0VGVVNFX0VQSFlfUkVHLAomIzQzOwkJCQkgICZhbXA7aW50ZXJuYWxfY2FsaWJyYXRpb24pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9lcnJvcjsKJiM0MzsJCWNhbGlicmF0aW9uID0gaW50ZXJuYWxfY2FsaWJyYXRpb247CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqLwomIzQzOwlicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gJiM0MzsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgJmFtcDsKJiM0MzsJCQkgICBGSUVMRF9NQVgoQUMyMDBfRVBIWV9CUFNfRUZGVVNFX01BU0spOwomIzQzOwlwcml2LSZndDtlcGh5X2N0bCA9CiYjNDM7CQlGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpOwomIzQzOwkvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovCiYjNDM7CiYjNDM7CWNsayA9IGNsa19nZXQoJmFtcDtjbGllbnQtJmd0O2RldiwgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoY2xrKSkgewomIzQzOwkJcmV0ID0gUFRSX0VSUihjbGspOwomIzQzOwkJZ290byBvdXRfZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKJiM0MzsJY2xrX3B1dChjbGspOwomIzQzOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yN19NSFo6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDt1bnN1cHBvcnRlZCBBQzIwMCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCSAgICBjbGtfcmF0ZSk7CiYjNDM7CQlnb3RvIG91dF9wdXRfY2xpZW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjsKJiM0MzsJcHJpdi0mZ3Q7Y29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7CiYjNDM7CS8qIE1JSSBpcyB0aGUgcmVzZXQgZGVmYXVsdCB1c2VkIHVudGlsIHRoZSBNQUMgc3VwcGxpZXMgaXRzIGludGVyZmFjZS4gKi8KJiM0MzsJcHJpdi0mZ3Q7aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKJiM0MzsJcHV0X2RldmljZSgmYW1wO2NsaWVudC0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cHJpdi0mZ3Q7Y29udHJvbDsKJiM0MzsKJiM0MztvdXRfZXJyb3I6CiYjNDM7CXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgQUMyMDAgY29udHJvbFxuJiMzNDspOwomIzQzO291dF9wdXRfY2xpZW50OgomIzQzOwlwdXRfZGV2aWNlKCZhbXA7Y2xpZW50LSZndDtkZXYpOwomIzQzOwlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmFhNTYwNDMyYTE0YzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jCkBAIC0wLDAgJiM0MzsxLDM4NyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmQKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCAmbHQ7amFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2FjeDAwLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVAkzCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWgkyNDAwMDAwMAomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFoJMjUwMDAwMDAKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaCTI3MDAwMDAwCiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9SRUcJCQkweDAwCiYjNDM7I2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMX01BU0sJCQlHRU5NQVNLKDcsIDYpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaCQlGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWgkJRklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSkKJiM0MzsjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFoJCUZJRUxEX1BSRVAoQUMzMDBfRVBIWV9DTEtfU0VMX01BU0ssIDIpCiYjNDM7I2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFCQkJQklUKDUpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFCQlCSVQoNCkKJiM0MzsjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVAkJQklUKDEpCiYjNDM7I2RlZmluZSBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE8JCUJJVCgzKQomIzQzOyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLCQlHRU5NQVNLKDIsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHCQkJMHgwMgomIzQzOyNkZWZpbmUgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUJCUJJVCgxNSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDMzAwX1NZU19JT19SRUcJCQkweDA1CiYjNDM7I2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0sJCQlHRU5NQVNLKDExLCAxMCkKJiM0MzsjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yCQkJMgomIzQzOyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFCQkJQklUKDApCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUcJCQkweDA2CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSwkJR0VOTUFTSygxNSwgMTIpCiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX1JNSUlfU0VMCQkJQklUKDExKQomIzQzOyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTgkJCUJJVCgwKQomIzQzOwomIzQzOyNkZWZpbmUgQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFMgXAomIzQzOwkoQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRSB8IEFDMzAwX0VQSFlfUkVHX0NMS19FTkFCTEUgfCBcCiYjNDM7CSBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFwKJiM0MzsJIEFDMzAwX0NISVBfUkVTRVRfREVBU1NFUlQpCiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9TWVNfSU9fVkFMVUUgXAomIzQzOwkoRklFTERfUFJFUChBQzMwMF9NRElPX0RSVl9NQVNLLCBBQzMwMF9JT19EUlZfTEVWRUxfMikgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXAomIzQzOwkgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRSB8IEFDMzAwX0VQSFlfTUlJX0lPX0VOQUJMRSkKJiM0MzsKJiM0MztzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCByZWd1bGF0b3IgKnZjYzsKJiM0MzsJc3RydWN0IGNsayAqY2xrOwomIzQzOwl1MTYgc3lzX2NvbnRyb2w7CiYjNDM7CXUxNiBlcGh5X2NvbmZpZzsKJiM0MzsJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZTsKJiM0MzsJYm9vbCBwYWNrYWdlX2tub3duOwomIzQzOwlib29sIGludGVybmFsX2RsZG87CiYjNDM7CWJvb2wgc3VwcGx5X2VuYWJsZWQ7CiYjNDM7CWJvb2wgcG93ZXJlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CXJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHByaXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfbW9kaWZ5KHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSwKJiM0MzsJCQkJIHUxNiBtYXNrLCB1MTYgc2V0KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocHJpdi0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV9yZWFkKHByaXYtJmd0O3BoeWRldiwKJiM0MzsJCQkJIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1MTYgdmFsID0gKHJldCAmYW1wOyB+bWFzaykgfCAoc2V0ICZhbXA7IG1hc2spOwomIzQzOwomIzQzOwkJcmV0ID0gdmFsID09IHJldCA/IDAgOgomIzQzOwkJCV9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwKJiM0MzsJCQkJCSAgICByZWdudW0sIHZhbCk7CiYjNDM7CX0KJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwcml2LSZndDtwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7ZXBoeV9jb25maWcgfAomIzQzOwkJKHByaXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/CiYjNDM7CQkgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEEgY2hpcCByZXNldCByZXN0b3JlcyBETERPRU4gdG8gb25lLiBVbnRpbCBQS0dfU1RBVFVTIGhhcyBpZGVudGlmaWVkCiYjNDM7CSAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGUKJiM0MzsJICogYm9vdGxvYWRlciBieSBhc3NlcnRpbmcgb25seSB0aGUgRVBIWSByZXNldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhcHJpdi0mZ3Q7cGFja2FnZV9rbm93biB8fCAhcHJpdi0mZ3Q7aW50ZXJuYWxfZGxkbyA/CiYjNDM7CQlBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdikKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkgewomIzQzOwkJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJCSAgIEFDMzAwX0VQSFlfU0hVVERPV04pOwomIzQzOwkJZXJyID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0lPX1JFRywgMCk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CQllcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCQkgICBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CiYjNDM7CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJCXByaXYtJmd0O3Bvd2VyZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQpIHsKJiM0MzsJCWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtJmd0O3ZjYyk7CiYjNDM7CQlpZiAoIWVycikKJiM0MzsJCQlwcml2LSZndDtzdXBwbHlfZW5hYmxlZCA9IGZhbHNlOwomIzQzOwkJZWxzZSBpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0MzthYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICZhbXA7JmFtcDsKJiM0MzsJICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlID09IGludGVyZmFjZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cG93ZXJlZCkKJiM0MzsJCXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsCiYjNDM7CQkJCQkgICAgQUMzMDBfRVBIWV9STUlJX1NFTCwKJiM0MzsJCQkJCSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgPwomIzQzOwkJCQkJICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlwcml2LSZndDtpbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpOwomIzQzOwl1OCBwYWNrYWdlX3N0YXR1czsKJiM0MzsJdTE2IHJlc2V0X3ZhbHVlOwomIzQzOwlpbnQgc3lzX2NvbnRyb2w7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Bvd2VyZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzdXBwbHlfZW5hYmxlZCkgewomIzQzOwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LSZndDt2Y2MpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcHJpdi0mZ3Q7c3VwcGx5X2VuYWJsZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJLyogV2FpdCBmb3IgdGhlIHBvd2VyLW9uIHJlc2V0IGludGVydmFsIHNwZWNpZmllZCBieSB0aGUgbWFudWFsLiAqLwomIzQzOwkJZnNsZWVwKDEwMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0mZ3Q7Y2xrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJcHJpdi0mZ3Q7cG93ZXJlZCA9IHRydWU7CiYjNDM7CiYjNDM7CS8qIEtlZXAgdGhlIGV4dGVybmFsLXN1cHBseSBjb25maWd1cmF0aW9uIGFjcm9zcyBjaGlwIHJlc2V0cy4gKi8KJiM0MzsJcmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLCByZXNldF92YWx1ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFRoZSBtYW51YWwgcmVxdWlyZXMgYm90aCByZXNldHMgdG8gYmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBjbG9ja3MuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywKJiM0MzsJCQkJICAgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8CiYjNDM7CQkJCSAgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CS8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi8KJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgICBwcml2LSZndDtzeXNfY29udHJvbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CXN5c19jb250cm9sID0gYWMzMDBfZXBoeV9jdGxfcmVhZChwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcpOwomIzQzOwlpZiAoc3lzX2NvbnRyb2wgJmx0OyAwKSB7CiYjNDM7CQlyZXQgPSBzeXNfY29udHJvbDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWNrYWdlX3N0YXR1cyA9IEZJRUxEX0dFVChBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLLCBzeXNfY29udHJvbCk7CiYjNDM7CWlmICgofnBhY2thZ2Vfc3RhdHVzICZhbXA7IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT0KJiM0MzsJICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsJfQomIzQzOwomIzQzOwlwcml2LSZndDtpbnRlcm5hbF9kbGRvID0gcGFja2FnZV9zdGF0dXMgJmFtcDsgQUMzMDBfUEFDS0FHRV9QT1JfSU5URVJOQUxfRExETzsKJiM0MzsJcHJpdi0mZ3Q7cGFja2FnZV9rbm93biA9IHRydWU7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLAomIzQzOwkJCQkgICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUsCiYjNDM7CQkJCSAgIHByaXYtJmd0O2ludGVybmFsX2RsZG8gPwomIzQzOwkJCQkgICBBQzMwMF9JTlRFUk5BTF9ETERPX0VOQUJMRSA6IDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwkvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovCiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsCiYjNDM7CQkJCSAgIEFDMzAwX1NZU19JT19WQUxVRSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9wb3dlcl9vZmY7CiYjNDM7CiYjNDM7CWZzbGVlcCgxMDAwMCk7CiYjNDM7CiYjNDM7CXJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRywKJiM0MzsJCQkJICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHwKJiM0MzsJCQkJICBBQzMwMF9FUEhZX1NIVVRET1dOKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKJiM0MzsKJiM0MzsJZnNsZWVwKDEwMDAwKTsKJiM0MzsKJiM0MzsJcmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLAomIzQzOwkJCQkgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfcG93ZXJfb2ZmOgomIzQzOwlhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWNsa19wdXQoZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7CiYjNDM7CXU4IGJnc19lZmZ1c2VfY29kZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5hZGRyICZndDsgRklFTERfTUFYKEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDtsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxuJiMzNDspKTsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwomIzQzOwlwcml2LSZndDt2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsICYjMzQ7dmNjJiMzNDspOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O3ZjYykpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LSZndDt2Y2MpLAomIzQzOwkJCQkJICAgICAmIzM0O2ZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcbiYjMzQ7KSk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2NsayA9IG9mX2Nsa19nZXQocGFja2FnZV9ub2RlLCAwKTsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDtjbGspKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi0mZ3Q7Y2xrKSwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gZ2V0IGlucHV0IGNsb2NrXG4mIzM0OykpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhYzMwMF9lcGh5X2Nsa19wdXQsIHByaXYtJmd0O2Nsayk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXQgPSBkZXZtX2Nsa19yYXRlX2V4Y2x1c2l2ZV9nZXQoZGV2LCBwcml2LSZndDtjbGspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gbG9jayBjbG9jayByYXRlXG4mIzM0OykpOwomIzQzOwomIzQzOwljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwcml2LSZndDtjbGspOwomIzQzOwlzd2l0Y2ggKGNsa19yYXRlKSB7CiYjNDM7CWNhc2UgQUMzMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6CiYjNDM7CQlwcml2LSZndDtzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjoKJiM0MzsJCXByaXYtJmd0O3N5c19jb250cm9sID0gQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOgomIzQzOwkJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxuJiMzNDssCiYjNDM7CQkJCQkgICAgIGNsa19yYXRlKSk7CiYjNDM7CX0KJiM0MzsJcHJpdi0mZ3Q7c3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7CiYjNDM7CiYjNDM7CS8qIFRoZSB2ZW5kb3IgZHJpdmVyIHN1cHBsaWVzIG5vIHRyYW5zZmVyIGZ1bmN0aW9uIGJleW9uZCB0aGlzIG9mZnNldC4gKi8KJiM0MzsJYmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICYjNDM7IEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpICZhbXA7CiYjNDM7CQkJICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTsKJiM0MzsJcHJpdi0mZ3Q7ZXBoeV9jb25maWcgPQomIzQzOwkJRklFTERfUFJFUChBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTSywgYmdzX2VmZnVzZV9jb2RlKTsKJiM0MzsJLyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqLwomIzQzOwomIzQzOwlwcml2LSZndDtjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247CiYjNDM7CXByaXYtJmd0O2NvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmOwomIzQzOwlwcml2LSZndDtjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlOwomIzQzOwkvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovCiYjNDM7CXByaXYtJmd0O2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3ByaXYtJmd0O2NvbnRyb2w7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOThmMmIwYjYzOTA5NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMKQEAgLTAsMCAmIzQzOzEsNTM2IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOy8qCiYjNDM7ICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlcgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDE5IEplcm5laiBTa3JhYmVjICZsdDtqZXJuZWouc2tyYWJlY0BnbWFpbC5jb20mZ3Q7CiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L252bWVtLWNvbnN1bWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDsuLi9waHlsaWIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthY3gwMC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfSUQJCQkJMHgwMDQ0MTQwMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSwlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwCQlCSVQoOCkKJiM0MzsjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVwlCSVQoOSkKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFRwkJCTB4MWYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0sJCQlHRU5NQVNLKDEyLCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV8wCQkJCTAKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfMQkJCQkxCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFXzIJCQkJMgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRV82CQkJCTYKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0VfOAkJCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRwkJMHgxMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQJQklUKDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSwkJR0VOTUFTSygxLCAwKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUTwkJMgomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHCQkweDEyCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUJMHg0ODI0CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRQkJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9DT05UUk9MX1JFRwkweDE3CiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFCUJJVCgzKQomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0sJCUdFTk1BU0soMTQsIDEyKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQJMAomIzQzOwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHCQkweDEwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFCTB4NTUyMwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHCQkweDEzCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRQkJMHhmMDAwCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0NPTlRST0xfUkVHCTB4MTQKJiM0MzsjZGVmaW5lIEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUJMHg3MDhmCiYjNDM7I2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFCTB4NzA4YgomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9MT1dfQ0FMX1ZBTFVFIDB4NzgwOQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHCQkJMHgxNQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0sJCUdFTk1BU0soNywgMCkKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKF8xMDBtLCBfMTBtKSBcCiYjNDM7CShGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTSywgKF8xMDBtKSkgfCBcCiYjNDM7CSBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcCiYjNDM7CUFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApCiYjNDM7I2RlZmluZSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFIFwKJiM0MzsJQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgzNSwgMHgzMykKJiM0MzsKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRwkJMHgxOAomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUJCTB4MDBiYwomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcJCTB4MWQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKQomIzQzOyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUwkweDAwNDQKJiM0MzsjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19WQUxVRSBcCiYjNDM7CShBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIHwgXAomIzQzOwkgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUykKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvcgomIzQzOyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMAomIzQzOyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlCiYjNDM7ICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2w7CiYjNDM7CWJvb2wgaXNfYWMzMDA7CiYjNDM7CWJvb2wgdXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmc7CiYjNDM7CWJvb2wgeG1paV9yeF9jbG9ja19pbnZlcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcsCiYjNDM7CQkJICAgRklFTERfUFJFUChBQ1gwMF9QQUdFX1NFTEVDVF9NQVNLLCBwYWdlKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb24ocHJpdi0mZ3Q7Y29udHJvbCwKJiM0MzsJCQkJICAgICAgIHByaXYtJmd0O3BoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7cG93ZXJfb2ZmKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwaHlkZXYtJmd0O2ludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7Y29udHJvbC0mZ3Q7c2V0X2ludGVyZmFjZShwcml2LSZndDtjb250cm9sLAomIzQzOwkJCQkJICAgIHBoeWRldi0mZ3Q7aW50ZXJmYWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcGh5ZGV2X3dhcm4ocHJpdi0mZ3Q7cGh5ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXG4mIzM0OywKJiM0MzsJCQkgICAgRVJSX1BUUihyZXQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG52bWVtX2NlbGwgKmNlbGw7CiYjNDM7CXNpemVfdCBpOwomIzQzOwlzaXplX3QgbGVuOwomIzQzOwl1OCAqYnVmOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJY2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNlbGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoY2VsbCk7CiYjNDM7CiYjNDM7CWJ1ZiA9IG52bWVtX2NlbGxfcmVhZChjZWxsLCAmYW1wO2xlbik7CiYjNDM7CW52bWVtX2NlbGxfcHV0KGNlbGwpOwomIzQzOwlpZiAoSVNfRVJSKGJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihidWYpOwomIzQzOwlpZiAoIWxlbiB8fCBsZW4gJmd0OyBzaXplb2YoKnZhbHVlKSkgewomIzQzOwkJa2ZyZWUoYnVmKTsKJiM0MzsJCXJldHVybiBsZW4gPyAtRVJBTkdFIDogLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGVuOyBpJiM0MzsmIzQzOykKJiM0MzsJCXZhbCB8PSAodTE2KWJ1ZltpXSAmbHQ7Jmx0OyAoOCAqIGkpOwomIzQzOwlrZnJlZShidWYpOwomIzQzOwkqdmFsdWUgPSB2YWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlOwomIzQzOwlib29sIHNlbGVjdGFibGU7CiYjNDM7CWJvb2wgZml4ZWRfYWMzMDA7CiYjNDM7CWJvb2wgaGFzX2NvbmZpZ3VyYXRpb247CiYjNDM7CXU4IGNhbGlicmF0aW9uOwomIzQzOwl1MzIgYmFzZV9hZGRyOwomIzQzOwl1MTYgY29uZmlndXJhdGlvbiA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQoZGV2LSZndDtvZl9ub2RlKTsKJiM0MzsJaWYgKCFwYWNrYWdlX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJaWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCAmIzM0O2V0aGVybmV0LXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7UEhZIGlzIG5vdCBpbiBhbiBFdGhlcm5ldCBQSFkgcGFja2FnZVxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2Jhc2VfYWRkcik7CiYjNDM7CWlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi0mZ3Q7bWRpby5hZGRyKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7cGFja2FnZSBhbmQgbGluayBQSFkgYWRkcmVzc2VzIGRpZmZlclxuJiMzNDspOwomIzQzOwkJZ290byBvdXRfcHV0X25vZGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VsZWN0YWJsZSA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSAgICAgJiMzNDt4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWZpeGVkX2FjMzAwID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgJiMzNDt4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2UmIzM0Oyk7CiYjNDM7CWlmICghc2VsZWN0YWJsZSAmYW1wOyZhbXA7ICFmaXhlZF9hYzMwMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkgICAgICYjMzQ7eC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlJiMzNDspKSB7CiYjNDM7CQlyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICYjMzQ7dW5zdXBwb3J0ZWQgRXRoZXJuZXQgUEhZIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsKJiM0MzsJaGFzX2NvbmZpZ3VyYXRpb24gPQomIzQzOwkJb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgJiMzNDtudm1lbS1jZWxsLW5hbWVzJiMzNDssCiYjNDM7CQkJCQkgJiMzNDtjb25maWd1cmF0aW9uJiMzNDspICZndDs9IDA7CiYjNDM7CWlmIChoYXNfY29uZmlndXJhdGlvbikgewomIzQzOwkJcmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsICYjMzQ7Y29uZmlndXJhdGlvbiYjMzQ7LAomIzQzOwkJCQkJCSZhbXA7Y29uZmlndXJhdGlvbik7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwKJiM0MzsJCQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxuJiMzNDspOwomIzQzOwkJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgaWYgKHNlbGVjdGFibGUgfHwgZml4ZWRfYWMzMDApIHsKJiM0MzsJCXJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgJiMzNDtwYWNrYWdlIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0X3B1dF9ub2RlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzZWxlY3RhYmxlKSB7CiYjNDM7CQlwcml2LSZndDtpc19hYzMwMCA9CiYjNDM7CQkJY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgPSBmaXhlZF9hYzMwMDsKJiM0MzsJCWlmIChoYXNfY29uZmlndXJhdGlvbiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPQomIzQzOwkJICAgIHByaXYtJmd0O2lzX2FjMzAwKSB7CiYjNDM7CQkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgJiMzNDtjb25maWd1cmF0aW9uIGRvZXMgbm90IG1hdGNoIHBhY2thZ2VcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG91dF9wdXRfbm9kZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwljYWxpYnJhdGlvbiA9IEZJRUxEX0dFVChBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLLAomIzQzOwkJCQljb25maWd1cmF0aW9uKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcgPQomIzQzOwkJcHJpdi0mZ3Q7aXNfYWMzMDAgJmFtcDsmYW1wOwomIzQzOwkJISEoY29uZmlndXJhdGlvbiAmYW1wOyBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpOwomIzQzOwlwcml2LSZndDt4bWlpX3J4X2Nsb2NrX2ludmVydGVkID0KJiM0MzsJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChwYWNrYWdlX25vZGUsCiYjNDM7CQkJCSAgICAgICYjMzQ7eC1wb3dlcnMseG1paS1yeC1jbG9jay1pbnZlcnRlZCYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwKQomIzQzOwkJcHJpdi0mZ3Q7Y29udHJvbCA9CiYjNDM7CQkJYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLAomIzQzOwkJCQkJICAgICAgY2FsaWJyYXRpb24pOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtjb250cm9sID0KJiM0MzsJCQlhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkgICAgICBoYXNfY29uZmlndXJhdGlvbiwKJiM0MzsJCQkJCSAgICAgIGNhbGlicmF0aW9uKTsKJiM0MzsJcmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtJmd0O2NvbnRyb2wpOwomIzQzOwomIzQzO291dF9wdXRfbm9kZToKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8xLAomIzQzOwkJCQlBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCUFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O29mX25vZGUpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5ZGV2ID0gcGh5ZGV2OwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShwaHlkZXYsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwcml2ID0gcHJpdjsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCSAgICAgJiMzNDtmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogQUN4MDAgY2FuIGFja25vd2xlZGdlIHJlc2V0IGluIHBvd2VyLWRvd24gd2l0aG91dCByZXN0YXJ0aW5nLiAqLwomIzQzOwlyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X3NvZnRfcmVzZXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwl1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtJmd0O2lzX2FjMzAwID8KJiM0MzsJCUFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOgomIzQzOwkJQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRTsKJiM0MzsJdTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTsKJiM0MzsJdTE2IGdsb2JhbF9jb25maWc7CiYjNDM7CWludCBvbGRwYWdlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlnbG9iYWxfY29uZmlnID0gRklFTERfUFJFUChBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLAomIzQzOwkJCQkgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9BVVRPKTsKJiM0MzsJaWYgKHByaXYtJmd0O3htaWlfcnhfY2xvY2tfaW52ZXJ0ZWQpCiYjNDM7CQlnbG9iYWxfY29uZmlnIHw9IEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X3BhZ2VkKHBoeWRldiwgQUNYMDBfUEFHRV8wLAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRywKJiM0MzsJCQkgICAgICAgQUNYMDBfUEFHRTBfWE1JSV9SWF9DTE9DS19JTlZFUlQgfAomIzQzOwkJCSAgICAgICBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLLCBnbG9iYWxfY29uZmlnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpc19hYzMwMCAmYW1wOyZhbXA7IHByaXYtJmd0O3VzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7CiYjNDM7CQlhZmVfZXFfcnhfZGV0ZWN0ID0KJiM0MzsJCQlBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7CiYjNDM7CQl0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7CiYjNDM7CWlmIChvbGRwYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsCiYjNDM7CQkJICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFLCAwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEUsIDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLAomIzQzOwkJCSAgIEZJRUxEX1BSRVAoQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0ssCiYjNDM7CQkJCSAgICAgIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUKSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIGFmZV9lcV9yeF9kZXRlY3QpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFRywKJiM0MzsJCQkgIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHLAomIzQzOwkJCQkgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIG91dF9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0KJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9SRUcsIHR4X2xldmVsX3ZhbHVlKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV84KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX2FjMzAwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7dXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHsKJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsCiYjNDM7CQkJCSAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBvdXRfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLAomIzQzOwkJCSAgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUUpOwomIzQzOwomIzQzO291dF9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi8KJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi8KJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY3gwMF9lcGh5X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShwaHlkZXYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjeDAwX2VwaHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJlc3VtZV9yZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9zdXNwZW5kKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7CiYjNDM7CQlpZiAocmVzdW1lX3JldCkKJiM0MzsJCQlwaHlkZXZfd2FybihwaHlkZXYsCiYjNDM7CQkJCSAgICAmIzM0O2ZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXG4mIzM0OywKJiM0MzsJCQkJICAgIEVSUl9QVFIocmVzdW1lX3JldCkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LSZndDttZGlvLmRldi5vZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJaWYgKCFnZW5waHlfbWF0Y2hfcGh5X2RldmljZShwaHlkZXYsIHBoeWRydikgfHwgIW5vZGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogUks2MzAgcmVwb3J0cyB0aGUgc2FtZSBQSFkgSUQsIHNvIGFsc28gbWF0Y2ggdGhlIHBhY2thZ2UgaWRlbnRpdHkuICovCiYjNDM7CXBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7CiYjNDM7CWlmICghcGFja2FnZV9ub2RlKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLAomIzQzOwkJCQkJJiMzNDt4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2UmIzM0OykgfHwKJiM0MzsJCW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSwKJiM0MzsJCQkJCSYjMzQ7eC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlJiMzNDspIHx8CiYjNDM7CQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsCiYjNDM7CQkJCQkmIzM0O3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZSYjMzQ7KTsKJiM0MzsJb2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG1hdGNoOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWN4MDBfZXBoeV9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1gtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFkmIzM0OywKJiM0MzsJCS5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLAomIzQzOwkJLnByb2JlID0gYWN4MDBfZXBoeV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLAomIzQzOwkJLnNvZnRfcmVzZXQgPSBhY3gwMF9lcGh5X3NvZnRfcmVzZXQsCiYjNDM7CQkuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LAomIzQzOwkJLmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsCiYjNDM7CQkuc3VzcGVuZCA9IGFjeDAwX2VwaHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzO21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIGFjeDAwX2VwaHlfdGJsW10gPSB7CiYjNDM7CXsgUEhZX0lEX01BVENIX01PREVMKEFDWDAwX0VQSFlfSUQpIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0phbWVzIEhpbGxpYXJkICZsdDtqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaCBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uN2RmNjA4NGM3YTc3MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmgKQEAgLTAsMCAmIzQzOzEsMjggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7I2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0gKJiM0MzsjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQJMTYKJiM0MzsKJiM0MztzdHJ1Y3QgZGV2aWNlX25vZGU7CiYjNDM7CiYjNDM7c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7CiYjNDM7CWludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLAomIzQzOwkJCXVuc2lnbmVkIGludCBwaHlfYWRkcik7CiYjNDM7CWludCAoKnBvd2VyX29mZikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCk7CiYjNDM7CWludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsCiYjNDM7CQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsCiYjNDM7CQkgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pOwomIzQzO3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKgomIzQzO2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTsKJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0OTIKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMTcxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBEcml2ZXIqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gSXQmIzM5O3MgYW4gRXRoZXJuZXQgUEhZLCBzbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gVGhlc2UgUEhZIGRyaXZlcnMgdXN1YWxseSBnZXQgcHJvYmVkIHZpYSB0aGUgTURJTyBidXMsIHJpZ2h0PyBJbiBRRU1VLCB3ZSBjYW4sIGluIHRoZW9yeSwgZW11bGF0ZSBhbiBNRElPIGJ1cywgYnV0IGl0IG5lZWRzIHRvIGJlIHN1cHBvcnRlZCBieSB0aGUgZW11bGF0ZWQgTUFDLCBvciB3ZSBjYW4gdXNlIGEgZHVtbXkgTURJTyBidXMgaWYgbmVjZXNzYXJ5LiBNb3JlIHNwZWNpZmljYWxseSwgUEhZIGRyaXZlcnMgdHlwaWNhbGx5IG9ubHkgcHJvYmUgaWYgdGhlcmUmIzM5O3MgYSBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlIG5vZGUgb3IgaWYgdGhlIFBIWSBJRCBtYXRjaGVzIG9uIGFuIE1ESU8gYnVzLgoKV2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZSB0cmlja3MgdXAgaXRzIHNsZWV2ZT8gSSBzZWVtIHRvIHJlY2FsbCBpdCBjYW4gaW5qZWN0IE1ESU8gZGV2aWNlcyBpZiB3ZSBjYW4gY3JlYXRlIGFuIE1ESU8gYnVzLCBtYXliZSB0aHJvdWdoIGFuIGVtdWxhdGVkIE5JQy4gRG9lcyBzeXprYWxsZXIgZXZlbiAqZnV6eiogUEhZIGRyaXZlcnM/IFllYWgsIGl0IGRvZXMsIG9yIGF0IGxlYXN0IGl0IGNhbiB0cmlnZ2VyIGEgcHJvYmUgaWYgdGhlIGRyaXZlciBpcyBlbmFibGVkIGFuZCBNRElPIGRldmljZXMgZXhpc3QuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBNRElPIG9yIFBIWS1yZWxhdGVkIHRoaW5ncyBpbiB0aGUgc3l6a2FsbGVyIGRlZmluaXRpb25zLiBCdXQgd2FpdCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwcm9tcHQ6IGlmIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGVuIGl0IGlzIG5vdCBXb3J0aEZ1enppbmcuCgpIb3cgY2FuIHRoaXMgZHJpdmVyIGJlIHByb2JlZCBpbiBRRU1VPyBXZSYjMzk7ZCBpZGVhbGx5IG5lZWQgYSBkZXZpY2UgdHJlZSwgYW5kIGl0JiMzOTtzIG5vdCBlYXN5IHRvIGp1c3QgaW5qZWN0ICphbnkqIGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlIGF0IHJ1bnRpbWUgaW4gUUVNVSB3aXRob3V0IERUIG92ZXJsYXlzLiBTeXprYWxsZXIgKmhhcyogc29tZSBEVCBvdmVybGF5IHN1cHBvcnQsIGJ1dCBpdCYjMzk7cyBsaW1pdGVkLCBhbmQgSSBkb3VidCBpdCYjMzk7cyBmbGV4aWJsZSBlbm91Z2ggZm9yIHRoaXMuIEhvd2V2ZXIsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGlzIHByb2JlYWJsZSBvbmx5IHdpdGggRFQuIEkgbmVlZCB0byBjaGVjayBob3cgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgd29ya3MuCgpBaCBoYSEgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgKmV4cGxpY2l0bHkqIHJlcXVpcmVzIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgdGhhdCB0aGUgcGFyZW50IG5vZGUgaXMgY29tcGF0aWJsZSB3aXRoIGAmIzM0O3gtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZSYjMzQ7YCBvciBzaW1pbGFyLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSwgdGhpcyB0aGluZyB3aWxsICpuZXZlciogcHJvYmUuIENhbiBzeXprYWxsZXIgaW5qZWN0IG5vZGVzIHdpdGggdGhlc2Ugc3BlY2lmaWMgY29tcGF0aWJsZXM/IE1heWJlLCBidXQgcHJvYmFibHkgbm90IGVhc2lseTsgRFQgb3ZlcmxheXMgYXJlIHRyaWNreS4KCldhaXQgYSBzZWNvbmQsIGV2ZW4gaWYgaXQgKmNvdWxkKiBiZSBwcm9iZWQsIHRoaXMgaXMgYSAqaGFyZHdhcmUtc3BlY2lmaWMqIFBIWSBkcml2ZXIsIG1lYW50IGZvciB0aG9zZSBYLVBvd2VycyBBQzIwMC9BQzMwMCBjb21wYW5pb24gSUNzLiBUaGVzZSBhcmUgcGh5c2ljYWwgY2hpcHMhIFRoZXkgY29tbXVuaWNhdGUgdmlhIE1ESU8gYW5kLCBmb3IgQUMyMDAsIEkyQy4gSXMgaXQgZXZlbiB3b3J0aCBmdXp6aW5nIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGxpa2UgdGhpcz8gSXQmIzM5O3Mgbm90IGxpa2VseSB0byBoYXZlIHNvZnR3YXJlIGVtdWxhdGlvbi4gTGV0JiMzOTtzIGNoZWNrIGlmIHRoZXJlJiMzOTtzIEkyQyBvciBNRElPIGVtdWxhdGlvbiBpbiBRRU1VLiBVbmxpa2VseS4KCkhhbmcgb24uIGBhYzIwMF9lcGh5X2N0bF9jcmVhdGVgLi4uIEl0IHVzZXMgYG9mX3BhcnNlX3BoYW5kbGVgIGFuZCBgb2ZfZmluZF9pMmNfZGV2aWNlX2J5X25vZGVgLiBJdCAqcmVxdWlyZXMqIGFuIEkyQyBjbGllbnQgZGV2aWNlIHRvIGV4aXN0IGFuZCBiZSBsaW5rZWQuIFRoaXMgaXMgKmRlZXBseSogdGllZCB0byB0aGUgc3BlY2lmaWMgaGFyZHdhcmU6IEFsbHdpbm5lciBTb0NzLCBBQzIwMC9BQzMwMCBQTUlDcywgYWxsIHRoYXQuIFRoaXMgd2lsbCBiZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKndpdGhvdXQqIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIG9yIGNvbXBsZXggRFQgb3ZlcmxheXMgdGhhdCBhbHNvIGluc3RhbnRpYXRlIHRoZSBJMkMgZGV2aWNlcyBhbmQgbW9jayB0aGVpciByZWdtYXBzLgoKT2theSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyAqcmVhbGx5KiB1bnJlYWNoYWJsZS4gTGV0JiMzOTtzIGxpc3QgdGhlIGRlcGVuZGVuY2llczoKCjEuICBBIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoZSBQSFkgd2l0aCBhIHBhcmVudCBub2RlIGhhdmluZyBgY29tcGF0aWJsZSA9ICYjMzQ7eC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlJiMzNDtgLgoyLiAgRm9yIEFDMjAwLCBhbiBJMkMgZGV2aWNlIG5vZGUgcmVmZXJlbmNlZCBieSBgeC1wb3dlcnMsYWMyMDBgLCB3aGljaCBtdXN0IGhhdmUgYSBib3VuZCBkcml2ZXIgcHJvdmlkaW5nIGEgcmVnbWFwLgozLiAgRm9yIEFDMzAwLCBhIGNsb2NrIHJlZmVyZW5jZWQgYnkgYGNsb2Nrc2AgcHJvcGVydHkuCjQuICBBIHJlZ3VsYXRvciByZWZlcmVuY2VkIGJ5IGB2Y2Mtc3VwcGx5YC4KNS4gIEFuIE5WTUVNIGNlbGwgcmVmZXJlbmNlZCBieSBgbnZtZW0tY2VsbHNgLgoKQWxsIHRoZXNlIGRlcGVuZGVuY2llcyBtYWtlIGl0IHByYWN0aWNhbGx5IGltcG9zc2libGUgdG8gZ2V0IHRoaXMgZHJpdmVyIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBpbiBhIGdlbmVyaWMgZnV6emluZyBlbnZpcm9ubWVudCB3aXRob3V0IGEgc3BlY2lhbGl6ZWQgZW11bGF0b3IgZm9yIHRoZSBBbGx3aW5uZXIvWC1Qb3dlcnMgaGFyZHdhcmUuCgpUaGVyZWZvcmUsIEkmIzM5O20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29kZSBpcyBub3QgcmVhY2hhYmxlIGluIFFFTVUgb3Igc2ltaWxhciBlbnZpcm9ubWVudHMuIEl0JiMzOTtzIGFsbCB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlLWRlcGVuZGVudCBzdHVmZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMC9BQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyJiMzOTtzIHByb2JlIGFuZCBtYXRjaCBmdW5jdGlvbnMgc3RyaWN0bHkgcmVxdWlyZSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcywgY29tcGF0aWJsZXMsIGFuZCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgKHN1Y2ggYXMgSTJDIGNsaWVudHMgd2l0aCByZWdtYXBzLCBjbG9ja3MsIHJlZ3VsYXRvcnMsIGFuZCBOVk1FTSBjZWxscykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGtlcm5lbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXImIzM5O3MgcHJvYmUgYW5kIG1hdGNoIGZ1bmN0aW9ucyBzdHJpY3RseSByZXF1aXJlIHNwZWNpZmljIERldmljZSBUcmVlIG5vZGVzLCBjb21wYXRpYmxlcywgYW5kIGhhcmR3YXJlIGRlcGVuZGVuY2llcyAoc3VjaCBhcyBJMkMgY2xpZW50cyB3aXRoIHJlZ21hcHMsIGNsb2NrcywgcmVndWxhdG9ycywgYW5kIE5WTUVNIGNlbGxzKSB0aGF0IGFyZSBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRS4gQ29uc2VxdWVudGx5LCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGdlbmVyaWMga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDIzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQyMzozODozNS4yNDE5NTQzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDkyOTMyNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBhbmQgbWF0Y2ggZnVuY3Rpb25zIHN0cmljdGx5IHJlcXVpcmUgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMsIGNvbXBhdGlibGVzLCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIChzdWNoIGFzIEkyQyBjbGllbnRzIHdpdGggcmVnbWFwcywgY2xvY2tzLCByZWd1bGF0b3JzLCBhbmQgTlZNRU0gY2VsbHMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjM1LjI0MTk1OTk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMyODY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YmE3MDI4MmNhYjZmNmQzYTdkNTkzY2RmODBlODI2YjZlNjc0Y2YxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDIzOjM4OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZmU1N2JkMTYzZGQ3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcXG5AQCAtMCwwICsxLDE1NCBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcXG4rJVlBTUwgMS4yXFxuKy0tLVxcbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogWC1Qb3dlcnMgQUMyMDAgYW5kIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlc1xcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOlxcbisgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcXG4rICB0aGUgc2FtZSBDbGF1c2UgMjIgUEhZIElEIGFuZCB1c2UgdGhlIHNhbWUgbGluay1zaWRlIHJlZ2lzdGVyIGxheW91dC4gVGhlXFxuKyAgcGFja2FnZSBjb250cm9sIHBhdGhzIGRpZmZlci4gQUMyMDAgcGFja2FnZSBjb250cm9sIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWRcXG4rICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMncyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXFxuKyAgcmVnaXN0ZXJzIG9jY3VweSBhIHNlY29uZCBDbGF1c2UgMjIgYWRkcmVzcyBmaXhlZCBhdCAxNiBwbHVzIHRoZSBsaW5rIFBIWVxcbisgIGFkZHJlc3MuXFxuK1xcbisgIFN5c3RlbXMgd2l0aCBhIGtub3duIHBhY2thZ2UgdXNlIHRoZSBjb3JyZXNwb25kaW5nIEFDMjAwIG9yIEFDMzAwIGNvbXBhdGlibGUuXFxuKyAgU3lzdGVtcyB3aGljaCBjYW4gY29udGFpbiBlaXRoZXIgcGFja2FnZSB1c2UgdGhlIEFDeDAwIGNvbXBhdGlibGUgYW5kIGFcXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cXG4rXFxuKyAgVGhlIGxpbmsgUEhZIGNhbm5vdCByZXBvcnQgaXRzIElEIHVudGlsIHRoZSBwYWNrYWdlIGNvbnRyb2wgc2VxdWVuY2UgaGFzXFxuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxcbisgIGNoaWxkIHVzZSB0aGUgc2FtZSBiYXNlIGFkZHJlc3MuIFRoZSBBQzIwMCBkcml2ZXIgcHJvZ3JhbXMgdGhhdCBhZGRyZXNzIGludG9cXG4rICB0aGUgcGFja2FnZSwgd2hpbGUgdGhlIEFDMzAwIGRyaXZlciBkZXJpdmVzIGl0cyBjb250cm9sIGFkZHJlc3MgZnJvbSBpdC5cXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGVudW06XFxuKyAgICAgIC0geC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxuK1xcbisgIHJlZzpcXG4rICAgIG1heGltdW06IDMxXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIG1heEl0ZW1zOiAxXFxuKyAgICBkZXNjcmlwdGlvbjogQUMzMDAgaW5wdXQgY2xvY2ssIHJ1bm5pbmcgYXQgMjQsIDI1LCBvciAyNyBNSHpcXG4rXFxuKyAgdmNjLXN1cHBseTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAzLjMgViBwYWNrYWdlIHN1cHBseS4gVGhpcyBpcyBjb25uZWN0ZWQgdG8gRVBIWV9WQ0Mgb24gQUMyMDAgYW5kIFZDQzFcXG4rICAgICAgb24gQUMzMDAuXFxuK1xcbisgIG52bWVtLWNlbGxzOlxcbisgICAgbWF4SXRlbXM6IDFcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQYWNrZWQgRVBIWSBjb25maWd1cmF0aW9uIGZpZWxkLiBCaXRzIDMgdGhyb3VnaCAwIGNvbnRhaW4gdGhlIGFuYWxvZ1xcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxcbisgICAgICB3aGVuIHNldCBhbmQgQUMyMDAgd2hlbiBjbGVhciwgYW5kIGJpdCA5IHJlcXVlc3RzIHRoZSBBQzMwMFxcbisgICAgICBsb3ctY2FsaWJyYXRpb24gdHVuaW5nIHNlcXVlbmNlLiBBIGZpeGVkIEFDMjAwIHBhY2thZ2UgbWF5IHByb3ZpZGUgb25seVxcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxcbisgICAgICBjb3B5IGluc3RlYWQuXFxuK1xcbisgIG52bWVtLWNlbGwtbmFtZXM6XFxuKyAgICBjb25zdDogY29uZmlndXJhdGlvblxcbitcXG4rICB4LXBvd2VycyxhYzIwMDpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3BoYW5kbGVcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgcHJvdmlkaW5nIEkyQyBhY2Nlc3MgdG8gdGhlIHBhY2thZ2VcXG4rICAgICAgY29udHJvbCByZWdpc3RlcnMgdXNlZCB0byBwb3dlciBhbmQgY29uZmlndXJlIHRoZSBFdGhlcm5ldCBQSFkuXFxuK1xcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XFxuKyAgICB0eXBlOiBib29sZWFuXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxcbisgICAgICBTb0MgaW50ZWdyYXRpb25zLCBpbmNsdWRpbmcgdGhlIEFsbHdpbm5lciBINiBBQzIwMCBjb25uZWN0aW9uLlxcbitcXG4rcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgXmV0aGVybmV0LXBoeUBbYS1mMC05XSskOlxcbisgICAgJHJlZjogZXRoZXJuZXQtcGh5LnlhbWwjXFxuKyAgICBwcm9wZXJ0aWVzOlxcbisgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgIGNvbnN0OiBldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXG4rICAgIHJlcXVpcmVkOlxcbisgICAgICAtIGNvbXBhdGlibGVcXG4rICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK3JlcXVpcmVkOlxcbisgIC0gY29tcGF0aWJsZVxcbisgIC0gdmNjLXN1cHBseVxcbitcXG4rZGVwZW5kZW50UmVxdWlyZWQ6XFxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjbG9ja3M6IGZhbHNlXFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIHJlZzpcXG4rICAgICAgICAgIG1heGltdW06IDdcXG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcXG4rICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgLSBjbG9ja3NcXG4rICAgICAgICAtIG52bWVtLWNlbGxzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXFxuKyAgLSBpZjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBjb21wYXRpYmxlOlxcbisgICAgICAgICAgY29uc3Q6IHgtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICByZWc6XFxuKyAgICAgICAgICBtYXhpbXVtOiA3XFxuKyAgICAgIHJlcXVpcmVkOlxcbisgICAgICAgIC0gY2xvY2tzXFxuKyAgICAgICAgLSBudm1lbS1jZWxsc1xcbisgICAgICAgIC0gbnZtZW0tY2VsbC1uYW1lc1xcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcXG4rXFxuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcXG4rXFxuK2V4YW1wbGVzOlxcbisgIC0gfFxcbisgICAgbWRpbyB7XFxuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcXHUwMDNjMFxcdTAwM2U7XFxuK1xcbisgICAgICAgIGV0aGVybmV0LXBoeS1wYWNrYWdlQDAge1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjbG9ja3MgPSBcXHUwMDNjXFx1MDAyNnB3bSA1XFx1MDAzZTtcXG4rICAgICAgICAgICAgdmNjLXN1cHBseSA9IFxcdTAwM2NcXHUwMDI2cmVnXzN2M1xcdTAwM2U7XFxuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXFx1MDAzY1xcdTAwMjZlcGh5X2NvbmZpZ3VyYXRpb25cXHUwMDNlO1xcbisgICAgICAgICAgICBudm1lbS1jZWxsLW5hbWVzID0gXFxcImNvbmZpZ3VyYXRpb25cXFwiO1xcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFxcdTAwM2NcXHUwMDI2YWMyMDBcXHUwMDNlO1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJldGhlcm5ldC1waHktaWQwMDQ0LjE0MDBcXFwiO1xcbisgICAgICAgICAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbitcXG4rLi4uXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5pbmRleCBiNGVmOTI3ZmQ0YTY3Li5kMzgzNTU5N2UzNzk1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG5AQCAtNDg0LDYgKzQ4NCwxNyBAQCBjb25maWcgVklURVNTRV9QSFlcXG4gXFx0aGVscFxcbiBcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxcbiBcXG4rY29uZmlnIFhQT1dFUlNfQUNYMDBfUEhZXFxuK1xcdHRyaXN0YXRlIFxcXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcXFwiXFxuK1xcdGRlcGVuZHMgb24gQ09NTU9OX0NMSyBcXHUwMDI2XFx1MDAyNiBOVk1FTSBcXHUwMDI2XFx1MDAyNiBPRl9NRElPIFxcdTAwMjZcXHUwMDI2IFJFR1VMQVRPUlxcbitcXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbitcXHRoZWxwXFxuK1xcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxcbitcXHQgIGFuZCBBQzMwMCBjb21wYW5pb24gSUNzLiBUaGUgZHJpdmVyIGNvbmZpZ3VyZXMgdGhlaXIgY29tbW9uIE1ESU8gUEhZXFxuK1xcdCAgcmVnaXN0ZXJzIGFuZCB0aGUgcGFja2FnZS1zcGVjaWZpYyBBQzIwMCBJMkMgb3IgQUMzMDAgTURJTyBjb250cm9sXFxuK1xcdCAgcmVnaXN0ZXJzLlxcbitcXG4gY29uZmlnIFhJTElOWF9HTUlJMlJHTUlJXFxuIFxcdHRyaXN0YXRlIFxcXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXFxuQEAgLTEwMSw0ICsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXFx0XFx0Kz0gc21zYy5vXFxuIG9iai0kKENPTkZJR19TVEUxMFhQKVxcdFxcdCs9IHN0ZTEwWHAub1xcbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXFx0Kz0gdGVyYW5ldGljcy5vXFxuIG9iai0kKENPTkZJR19WSVRFU1NFX1BIWSlcXHQrPSB2aXRlc3NlLm9cXG4rb2JqLSQoQ09ORklHX1hQT1dFUlNfQUNYMDBfUEhZKVxcdCs9IHhwb3dlcnMvXFxuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlXFxuQEAgLTAsMCArMSwzIEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4reHBvd2Vycy1hY3gwMC15IDo9IGFjeDAwLm8gYWMyMDAubyBhYzMwMC5vXFxuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgKz0geHBvd2Vycy1hY3gwMC5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wMWY3MWY2MzU0ZmUxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcXG5AQCAtMCwwICsxLDMxMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDIyIEFybSBMdGQuIChBbmRyZSBQcnp5d2FyYSBcXHUwMDNjYW5kcmUucHJ6eXdhcmFAYXJtLmNvbVxcdTAwM2UpXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaTJjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImFjeDAwLmhcXFwiXFxuK1xcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9PRkZTRVRcXHQzXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFpcXHQyNDAwMDAwMFxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXFx0MjcwMDAwMDBcXG4rXFxuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcXHRcXHRcXHQweDAwMTRcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDApXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFXFx0XFx0XFx0QklUKDEpXFxuK1xcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXFx0XFx0XFx0MHgwMDE2XFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXFxuKyNkZWZpbmUgQUMyMDBfRUZVU0VfRVBIWV9SRUdcXHRcXHRcXHQweDgwMDRcXG4rXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXFx0XFx0XFx0MHg2MDAwXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1NFTF8yNF9NSFpcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzIwMF9FUEhZX1BIWV9BRERSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDgsIDQpXFxuKyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFxcdFxcdFxcdEJJVCgxMSlcXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbitcXG4rc3RydWN0IGFjMjAwX2VwaHlfY3RsIHtcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCBjb250cm9sO1xcbitcXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbitcXHR1MTYgZXBoeV9jdGw7XFxuK1xcdHVuc2lnbmVkIGludCBwaHlfYWRkcjtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcXG4rXFx0Ym9vbCBwb3dlcmVkO1xcbit9O1xcbitcXG4rc3RhdGljIHUxNiBhYzIwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2N0bCB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApIHxcXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0ssIHByaXYtXFx1MDAzZXBoeV9hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF93cml0ZShzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXYsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyICUjeDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyZWcsIEVSUl9QVFIocmV0KSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpIHtcXG4rXFx0XFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxcbitcXHRcXHRcXHRcXHRcXHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHRcXHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcXG4rXFx0XFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRywgMCk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMyMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHRcXHRcXHRcXHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcGh5X2FkZHIpXFxuK3tcXG4rXFx0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdHUxNiBlcGh5X2N0bDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlfYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzIwMF9FUEhZX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXBoeV9hZGRyID09IHBoeV9hZGRyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xcbitcXG4rXFx0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUcsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9kaXNhYmxlO1xcbitcXG4rXFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIGVwaHlfY3RsIHwgQUMyMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgQUMyMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8XFxuK1xcdFxcdFxcdFxcdCAgIEFDMjAwX0VQSFlfU1lTQ0xLX0VOQUJMRSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2Rpc2FibGU7XFxuK1xcbitcXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZGlzYWJsZTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9kaXNhYmxlOlxcbitcXHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cXG4rXFx0cHJpdi1cXHUwMDNlcG93ZXJlZCA9IHRydWU7XFxuK1xcdGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxcbitcXHRcXHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xcbitcXHRzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwgKnByaXY7XFxuK1xcdHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XFxuK1xcdHU4IGJwc19lZmZ1c2VfY29kZTtcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXByaXYpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdHByaXYtXFx1MDAzZXZjYyA9IGRldm1fb2ZfcmVndWxhdG9yX2dldChkZXYsIHBhY2thZ2Vfbm9kZSwgXFxcInZjY1xcXCIpO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXZjYykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZXZjYyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGFjMjAwX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBhY2thZ2Vfbm9kZSwgXFxcIngtcG93ZXJzLGFjMjAwXFxcIiwgMCk7XFxuK1xcdGlmICghYWMyMDBfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxcXG5cXFwiKSk7XFxuK1xcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xcbitcXHRvZl9ub2RlX3B1dChhYzIwMF9ub2RlKTtcXG4rXFx0aWYgKCFjbGllbnQpIHtcXG4rXFx0XFx0cmV0ID0gSVNfRU5BQkxFRChDT05GSUdfSTJDKSA/IC1FUFJPQkVfREVGRVIgOiAtRU5PREVWO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXFxcblxcXCIpKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbGluayBBQzIwMCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIWRldmljZV90cnlsb2NrKFxcdTAwMjZjbGllbnQtXFx1MDAzZWRldikpIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChkZXZpY2VfaXNfYm91bmQoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KSlcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcmVnbWFwID0gZGV2X2dldF9yZWdtYXAoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2LCBOVUxMKTtcXG4rXFx0ZGV2aWNlX3VubG9jayhcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXJlZ21hcCkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVQUk9CRV9ERUZFUixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X2NsaWVudDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFoYXNfY2FsaWJyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gcmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBcXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0XFx0Y2FsaWJyYXRpb24gPSBpbnRlcm5hbF9jYWxpYnJhdGlvbjtcXG4rXFx0fVxcbitcXG4rXFx0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xcbitcXHRicHNfZWZmdXNlX2NvZGUgPSAoY2FsaWJyYXRpb24gKyBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUKSBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgIEZJRUxEX01BWChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSyk7XFxuK1xcdHByaXYtXFx1MDAzZWVwaHlfY3RsID1cXG4rXFx0XFx0RklFTERfUFJFUChBQzIwMF9FUEhZX0JQU19FRkZVU0VfTUFTSywgYnBzX2VmZnVzZV9jb2RlKTtcXG4rXFx0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xcbitcXG4rXFx0Y2xrID0gY2xrX2dldChcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYsIE5VTEwpO1xcbitcXHRpZiAoSVNfRVJSKGNsaykpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihjbGspO1xcbitcXHRcXHRnb3RvIG91dF9lcnJvcjtcXG4rXFx0fVxcbitcXG4rXFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4rXFx0Y2xrX3B1dChjbGspO1xcbitcXG4rXFx0c3dpdGNoIChjbGtfcmF0ZSkge1xcbitcXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaOlxcbitcXHRcXHRwcml2LVxcdTAwM2VlcGh5X2N0bCB8PSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInVuc3VwcG9ydGVkIEFDMjAwIGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgY2xrX3JhdGUpO1xcbitcXHRcXHRnb3RvIG91dF9wdXRfY2xpZW50O1xcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzIwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdHB1dF9kZXZpY2UoXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdHJldHVybiBcXHUwMDI2cHJpdi1cXHUwMDNlY29udHJvbDtcXG4rXFxuK291dF9lcnJvcjpcXG4rXFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXFxcblxcXCIpO1xcbitvdXRfcHV0X2NsaWVudDpcXG4rXFx0cHV0X2RldmljZShcXHUwMDI2Y2xpZW50LVxcdTAwM2VkZXYpO1xcbitcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmMgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcXG5AQCAtMCwwICsxLDM4NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8qXFxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcXG4rICpcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vcGh5bGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfT0ZGU0VUXFx0M1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXFx0MjQwMDAwMDBcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWlxcdDI1MDAwMDAwXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yN19NSFpcXHQyNzAwMDAwMFxcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1xcdFxcdFxcdDB4MDBcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1NUQVRVU19NQVNLXFx0XFx0R0VOTUFTSygxMSwgOClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfTUFTS1xcdFxcdFxcdEdFTk1BU0soNywgNilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMClcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMSlcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaXFx0XFx0RklFTERfUFJFUChBQzMwMF9FUEhZX0NMS19TRUxfTUFTSywgMilcXG4rI2RlZmluZSBBQzMwMF9FRlVTRV9DTEtfRU5BQkxFXFx0XFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLXFx0XFx0R0VOTUFTSygyLCAwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQklBUzFfUkVHXFx0XFx0XFx0MHgwMlxcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXFx0XFx0QklUKDE1KVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfSU9fUkVHXFx0XFx0XFx0MHgwNVxcbisjZGVmaW5lIEFDMzAwX01ESU9fRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCAxMClcXG4rI2RlZmluZSBBQzMwMF9JT19EUlZfTEVWRUxfMlxcdFxcdFxcdDJcXG4rI2RlZmluZSBBQzMwMF9DTEtJTl9QQURfRU5BQkxFXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXFx0XFx0XFx0QklUKDApXFxuK1xcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09ORklHX1JFR1xcdFxcdFxcdDB4MDZcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDEyKVxcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcXHRcXHRcXHRCSVQoMTEpXFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9TSFVURE9XTlxcdFxcdFxcdEJJVCgwKVxcbitcXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxcXFxuK1xcdChBQzMwMF9FRlVTRV9DTEtfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHwgXFxcXFxcbitcXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcXG4rXFxuKyNkZWZpbmUgQUMzMDBfU1lTX0lPX1ZBTFVFIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcXFxcbitcXHQgRklFTERfUFJFUChBQzMwMF9NSUlfRFJWX01BU0ssIEFDMzAwX0lPX0RSVl9MRVZFTF8yKSB8IFxcXFxcXG4rXFx0IEFDMzAwX0NMS0lOX1BBRF9FTkFCTEUgfCBBQzMwMF9FUEhZX01JSV9JT19FTkFCTEUpXFxuK1xcbitzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwge1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XFxuK1xcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuK1xcdHN0cnVjdCByZWd1bGF0b3IgKnZjYztcXG4rXFx0c3RydWN0IGNsayAqY2xrO1xcbitcXHR1MTYgc3lzX2NvbnRyb2w7XFxuK1xcdHUxNiBlcGh5X2NvbmZpZztcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcXG4rXFx0Ym9vbCBwYWNrYWdlX2tub3duO1xcbitcXHRib29sIGludGVybmFsX2RsZG87XFxuK1xcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XFxuK1xcdGJvb2wgcG93ZXJlZDtcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcmVhZChzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocHJpdi1cXHUwMDNlcGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHR1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXFx1MDAzZXBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSwgdmFsKTtcXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9tb2RpZnkoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtLFxcbitcXHRcXHRcXHRcXHQgdTE2IG1hc2ssIHUxNiBzZXQpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXFx1MDAzZXBoeWRldik7XFxuK1xcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbitcXHRcXHR1MTYgdmFsID0gKHJldCBcXHUwMDI2IH5tYXNrKSB8IChzZXQgXFx1MDAyNiBtYXNrKTtcXG4rXFxuK1xcdFxcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcXG4rXFx0XFx0XFx0X19waHlfcGFja2FnZV93cml0ZShwcml2LVxcdTAwM2VwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICByZWdudW0sIHZhbCk7XFxuK1xcdH1cXG4rXFx0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBhYzMwMF9lcGh5X2N0bF9jb25maWcoY29uc3Qgc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2KVxcbit7XFxuK1xcdHJldHVybiBwcml2LVxcdTAwM2VlcGh5X2NvbmZpZyB8XFxuK1xcdFxcdChwcml2LVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xcbitcXHRcXHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBBIGNoaXAgcmVzZXQgcmVzdG9yZXMgRExET0VOIHRvIG9uZS4gVW50aWwgUEtHX1NUQVRVUyBoYXMgaWRlbnRpZmllZFxcbitcXHQgKiB0aGUgc3VwcGx5IGFycmFuZ2VtZW50LCBwcmVzZXJ2ZSBhbnkgZXh0ZXJuYWwtVkREIHNldHVwIGxlZnQgYnkgdGhlXFxuK1xcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIXByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gfHwgIXByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gP1xcbitcXHRcXHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKSB7XFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XFxuK1xcdFxcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHRcXHRlcnIgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGVycjtcXG4rXFxuK1xcdFxcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vwb3dlcmVkID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xcbitcXHRcXHRlcnIgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAoIWVycilcXG4rXFx0XFx0XFx0cHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQgPSBmYWxzZTtcXG4rXFx0XFx0ZWxzZSBpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3Bvd2VyX29mZihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXG4rXFx0cmV0dXJuIGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuK3tcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzMwMF9lcGh5X2N0bCwgY29udHJvbCk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWludGVyZmFjZSA9PSBpbnRlcmZhY2UpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXBvd2VyZWQpXFxuK1xcdFxcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcXG4rXFx0aWYgKCFyZXQpXFxuK1xcdFxcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xcbitcXHR1OCBwYWNrYWdlX3N0YXR1cztcXG4rXFx0dTE2IHJlc2V0X3ZhbHVlO1xcbitcXHRpbnQgc3lzX2NvbnRyb2w7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAocGh5X2FkZHIgIT0gYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vwb3dlcmVkKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcXG4rXFx0XFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVxcdTAwM2V2Y2MpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XFxuK1xcbitcXHRcXHQvKiBXYWl0IGZvciB0aGUgcG93ZXItb24gcmVzZXQgaW50ZXJ2YWwgc3BlY2lmaWVkIGJ5IHRoZSBtYW51YWwuICovXFxuK1xcdFxcdGZzbGVlcCgxMDAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVxcdTAwM2VjbGspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdHByaXYtXFx1MDAzZXBvd2VyZWQgPSB0cnVlO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xcbitcXHRyZXNldF92YWx1ZSA9IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKHByaXYpO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsIHJlc2V0X3ZhbHVlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfU1lTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUIHxcXG4rXFx0XFx0XFx0XFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogUmV0YWluIHRoZSB2ZW5kb3IgY2xvY2stZW5hYmxlIGRlZmF1bHRzLCBpbmNsdWRpbmcgdGhlIGVGdXNlIGNsb2NrLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZXN5c19jb250cm9sKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XFxuK1xcdGlmIChzeXNfY29udHJvbCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cmV0ID0gc3lzX2NvbnRyb2w7XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4rXFx0fVxcbitcXG4rXFx0cGFja2FnZV9zdGF0dXMgPSBGSUVMRF9HRVQoQUMzMDBfUEFDS0FHRV9TVEFUVVNfTUFTSywgc3lzX2NvbnRyb2wpO1xcbitcXHRpZiAoKH5wYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUEhZX0FERFJfTUFTSykgIT1cXG4rXFx0ICAgIGFjMzAwX2VwaHlfY3RsX2xpbmtfYWRkcihwcml2KSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZWludGVybmFsX2RsZG8gPSBwYWNrYWdlX3N0YXR1cyBcXHUwMDI2IEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE87XFxuK1xcdHByaXYtXFx1MDAzZXBhY2thZ2Vfa25vd24gPSB0cnVlO1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF9tb2RpZnkocHJpdiwgQUMzMDBfU1lTX0JJQVMxX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxcbitcXHRcXHRcXHRcXHQgICBwcml2LVxcdTAwM2VpbnRlcm5hbF9kbGRvID9cXG4rXFx0XFx0XFx0XFx0ICAgQUMzMDBfSU5URVJOQUxfRExET19FTkFCTEUgOiAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcG93ZXJfb2ZmO1xcbitcXG4rXFx0LyogS2VlcCB0aGUgZG9jdW1lbnRlZCBkZWZhdWx0IGRyaXZlIGxldmVsIGFuZCBsZWF2ZSB0aGUgSVJRIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxcbitcXHRcXHRcXHRcXHQgICBBQzMwMF9TWVNfSU9fVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxcbitcXHRcXHRcXHRcXHQgIEFDMzAwX0VQSFlfU0hVVERPV04pO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRmc2xlZXAoMTAwMDApO1xcbitcXG4rXFx0cmV0ID0gYWMzMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMzMDBfRVBIWV9DT05GSUdfUkVHLFxcbitcXHRcXHRcXHRcXHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9wb3dlcl9vZmY6XFxuK1xcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcXG4re1xcbitcXHRjbGtfcHV0KGRhdGEpO1xcbit9XFxuK1xcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcXG4rYWMzMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLCB1OCBjYWxpYnJhdGlvbilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGh5ZGV2LVxcdTAwM2VtZGlvLmRldjtcXG4rXFx0c3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2O1xcbitcXHR1bnNpZ25lZCBsb25nIGNsa19yYXRlO1xcbitcXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciBcXHUwMDNlIEZJRUxEX01BWChBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwibGluayBhZGRyZXNzIGlzIG91dHNpZGUgdGhlIHBhY2thZ2UgcmFuZ2VcXFxcblxcXCIpKTtcXG4rXFx0cHJpdi1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcXFwidmNjXFxcIik7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNldmNjKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHJpdi1cXHUwMDNldmNjKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHN1cHBseVxcXFxuXFxcIikpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xcbitcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZWNsaykpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXFx1MDAzZWNsayksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXFxcblxcXCIpKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIGFjMzAwX2VwaHlfY2xrX3B1dCwgcHJpdi1cXHUwMDNlY2xrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcXG4rXFxuK1xcdHJldCA9IGRldm1fY2xrX3JhdGVfZXhjbHVzaXZlX2dldChkZXYsIHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXFxcblxcXCIpKTtcXG4rXFxuK1xcdGNsa19yYXRlID0gY2xrX2dldF9yYXRlKHByaXYtXFx1MDAzZWNsayk7XFxuK1xcdHN3aXRjaCAoY2xrX3JhdGUpIHtcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjRfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjVfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgPSBBQzMwMF9FUEhZX0NMS19TRUxfMjdfTUhaO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcInVuc3VwcG9ydGVkIGlucHV0IGNsb2NrIHJhdGUgJWx1IEh6XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNsa19yYXRlKSk7XFxuK1xcdH1cXG4rXFx0cHJpdi1cXHUwMDNlc3lzX2NvbnRyb2wgfD0gQUMzMDBfU1lTX0NPTlRST0xfRU5BQkxFX0JJVFM7XFxuK1xcbitcXHQvKiBUaGUgdmVuZG9yIGRyaXZlciBzdXBwbGllcyBubyB0cmFuc2ZlciBmdW5jdGlvbiBiZXlvbmQgdGhpcyBvZmZzZXQuICovXFxuK1xcdGJnc19lZmZ1c2VfY29kZSA9IChjYWxpYnJhdGlvbiArIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVQpIFxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcXG4rXFx0cHJpdi1cXHUwMDNlZXBoeV9jb25maWcgPVxcbitcXHRcXHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xcbitcXHQvKiBFUEhZX01PREUgYW5kIEJJU1RfQ0xLX0VOIHN0YXkgY2xlYXIgZm9yIG5vcm1hbCBvcGVyYXRpb24uICovXFxuK1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XFxuK1xcdHByaXYtXFx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xcbitcXHRwcml2LVxcdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xcbitcXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXFxuK1xcdHByaXYtXFx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnByaXYtXFx1MDAzZWNvbnRyb2w7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4ZjJiMGI2MzkwOTZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuY1xcbkBAIC0wLDAgKzEsNTM2IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSmVybmVqIFNrcmFiZWMgXFx1MDAzY2plcm5lai5za3JhYmVjQGdtYWlsLmNvbVxcdTAwM2VcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEphbWVzIEhpbGxpYXJkIFxcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L252bWVtLWNvbnN1bWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiLi4vcGh5bGliLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJhY3gwMC5oXFxcIlxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXFx0XFx0XFx0XFx0MHgwMDQ0MTQwMFxcbitcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXFx0R0VOTUFTSygzLCAwKVxcbisjZGVmaW5lIEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDBcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1dcXHRCSVQoOSlcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHXFx0XFx0XFx0MHgxZlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcXHRcXHRcXHRHRU5NQVNLKDEyLCA4KVxcbisjZGVmaW5lIEFDWDAwX1BBR0VfMFxcdFxcdFxcdFxcdDBcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcXHRcXHRcXHRcXHQxXFxuKyNkZWZpbmUgQUNYMDBfUEFHRV8yXFx0XFx0XFx0XFx0MlxcbisjZGVmaW5lIEFDWDAwX1BBR0VfNlxcdFxcdFxcdFxcdDZcXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcXHRcXHRcXHRcXHQ4XFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXFx0XFx0MHgxM1xcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXFx0QklUKDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0tcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTBfTURJX01PREVfQVVUT1xcdFxcdDJcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXFx0XFx0MHgxMlxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVxcdDB4NDgyNFxcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfQ09OVFJPTF9SRUdcXHRcXHQweDEzXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfVUFQU19FTkFCTEVcXHRcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXFx0MHgxN1xcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0lOVEVMTElHRU5UX0VFRV9FTkFCTEVcXHRCSVQoMylcXG4rXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTS1xcdFxcdEdFTk1BU0soMTQsIDEyKVxcbisjZGVmaW5lIEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9ERUZBVUxUXFx0MFxcbitcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUdcXHRcXHQweDEwXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfTE9XX0NBTF9WQUxVRVxcdDB4NTUyM1xcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1JFR1xcdFxcdDB4MTNcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9WQUxVRVxcdFxcdDB4ZjAwMFxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUdcXHQweDE0XFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVxcdDB4NzA4ZlxcbisjZGVmaW5lIEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUVcXHQweDcwOGJcXG4rI2RlZmluZSBBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUUgMHg3ODA5XFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHXFx0XFx0XFx0MHgxNVxcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1xcdFxcdEdFTk1BU0soMTUsIDgpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXFxcXG4rXFx0KEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTAwTV9NQVNLLCAoXzEwMG0pKSB8IFxcXFxcXG4rXFx0IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0ssIChfMTBtKSkpXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MTUsIDB4MzApXFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRSBcXFxcXFxuK1xcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXFxuK1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFR1xcdFxcdDB4MThcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9WQUxVRVxcdFxcdDB4MDBiY1xcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0NPTlRST0xfUkVHXFx0XFx0MHgxZFxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX1RYX0xFVkVMX0FESlVTVF9CWVBBU1MgQklUKDExKVxcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcXHQweDAwNDRcXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9MT1dfVkFMVUUgXFxcXFxcbitcXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXFxcXG4rXFx0IEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFMpXFxuK1xcbisvKlxcbisgKiBBbm90aGVyIGludGVncmF0aW9uIG9mIHRoaXMgZXhhY3QtSUQgUEhZIGRvY3VtZW50cyBpdHMgZGlnaXRhbCB2ZW5kb3JcXG4rICogcmVnaXN0ZXIgbWFwLCB3aGljaCBhbHNvIG1hdGNoZXMgdGhlIG9ic2VydmVkIEFDeDAwIHJlc2V0IHZhbHVlcy4gVGhlIEFDeDAwXFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXFxuKyAqIHZlbmRvciBpbml0aWFsaXphdGlvbiB2YWx1ZXMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgYml0IGRlZmluaXRpb25zLlxcbisgKi9cXG4rXFxuK3N0cnVjdCBhY3gwMF9lcGh5X3ByaXYge1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sO1xcbitcXHRib29sIGlzX2FjMzAwO1xcbitcXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xcbitcXHRib29sIHhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBBQ1gwMF9QQUdFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBGSUVMRF9HRVQoQUNYMDBfUEFHRV9TRUxFQ1RfTUFTSywgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHLFxcbitcXHRcXHRcXHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcXG4re1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlcG93ZXJfb24ocHJpdi1cXHUwMDNlY29udHJvbCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHByaXYtXFx1MDAzZXBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0cmV0dXJuIHByaXYtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZXBvd2VyX29mZihwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwaHlkZXYtXFx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlY29udHJvbC1cXHUwMDNlc2V0X2ludGVyZmFjZShwcml2LVxcdTAwM2Vjb250cm9sLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcGh5ZGV2LVxcdTAwM2VpbnRlcmZhY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocHJpdi1cXHUwMDNlcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcImZhaWxlZCB0byBwb3dlciBvZmYgY29udHJvbCBibG9jazogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgRVJSX1BUUihyZXQpKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfbnZtZW1fdTE2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xcbitcXHRzaXplX3QgaTtcXG4rXFx0c2l6ZV90IGxlbjtcXG4rXFx0dTggKmJ1ZjtcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRjZWxsID0gb2ZfbnZtZW1fY2VsbF9nZXQobm9kZSwgbmFtZSk7XFxuK1xcdGlmIChJU19FUlIoY2VsbCkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGNlbGwpO1xcbitcXG4rXFx0YnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsIFxcdTAwMjZsZW4pO1xcbitcXHRudm1lbV9jZWxsX3B1dChjZWxsKTtcXG4rXFx0aWYgKElTX0VSUihidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihidWYpO1xcbitcXHRpZiAoIWxlbiB8fCBsZW4gXFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xcbitcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsZW47IGkrKylcXG4rXFx0XFx0dmFsIHw9ICh1MTYpYnVmW2ldIFxcdTAwM2NcXHUwMDNjICg4ICogaSk7XFxuK1xcdGtmcmVlKGJ1Zik7XFxuK1xcdCp2YWx1ZSA9IHZhbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xcbitcXHRib29sIHNlbGVjdGFibGU7XFxuK1xcdGJvb2wgZml4ZWRfYWMzMDA7XFxuK1xcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XFxuK1xcdHU4IGNhbGlicmF0aW9uO1xcbitcXHR1MzIgYmFzZV9hZGRyO1xcbitcXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KGRldi1cXHUwMDNlb2Zfbm9kZSk7XFxuK1xcdGlmICghcGFja2FnZV9ub2RlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0aWYgKCFvZl9ub2RlX25hbWVfZXEocGFja2FnZV9ub2RlLCBcXFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZiYXNlX2FkZHIpO1xcbitcXHRpZiAocmV0IHx8IGJhc2VfYWRkciAhPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcikge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIngtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxcXCIpO1xcbitcXHRpZiAoIXNlbGVjdGFibGUgXFx1MDAyNlxcdTAwMjYgIWZpeGVkX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcXFwiKSkge1xcbitcXHRcXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJ1bnN1cHBvcnRlZCBFdGhlcm5ldCBQSFkgcGFja2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9wdXRfbm9kZTtcXG4rXFxuK1xcdGhhc19jb25maWd1cmF0aW9uID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXFxcIm52bWVtLWNlbGwtbmFtZXNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcImNvbmZpZ3VyYXRpb25cXFwiKSBcXHUwMDNlPSAwO1xcbitcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24pIHtcXG4rXFx0XFx0cmV0ID0gYWN4MDBfZXBoeV9yZWFkX252bWVtX3UxNihwYWNrYWdlX25vZGUsIFxcXCJjb25maWd1cmF0aW9uXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNvbmZpZ3VyYXRpb24pO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlYWQgcGFja2FnZSBjb25maWd1cmF0aW9uXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XFxuK1xcdFxcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBhY2thZ2UgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9ub2RlO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2VsZWN0YWJsZSkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9XFxuK1xcdFxcdFxcdGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19hYzMwMCA9IGZpeGVkX2FjMzAwO1xcbitcXHRcXHRpZiAoaGFzX2NvbmZpZ3VyYXRpb24gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwKSAhPVxcbitcXHRcXHQgICAgcHJpdi1cXHUwMDNlaXNfYWMzMDApIHtcXG4rXFx0XFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXFwiY29uZmlndXJhdGlvbiBkb2VzIG5vdCBtYXRjaCBwYWNrYWdlXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBvdXRfcHV0X25vZGU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcXG4rXFx0XFx0XFx0XFx0Y29uZmlndXJhdGlvbik7XFxuK1xcbitcXHRwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XFxuK1xcdFxcdHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCEhKGNvbmZpZ3VyYXRpb24gXFx1MDAyNiBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9MT1cpO1xcbitcXHRwcml2LVxcdTAwM2V4bWlpX3J4X2Nsb2NrX2ludmVydGVkID1cXG4rXFx0XFx0b2ZfcHJvcGVydHlfcmVhZF9ib29sKHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFxcIngtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWRcXFwiKTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMClcXG4rXFx0XFx0cHJpdi1cXHUwMDNlY29udHJvbCA9XFxuK1xcdFxcdFxcdGFjMzAwX2VwaHlfY3RsX2NyZWF0ZShwaHlkZXYsIHBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgY2FsaWJyYXRpb24pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbnRyb2wgPVxcbitcXHRcXHRcXHRhYzIwMF9lcGh5X2N0bF9jcmVhdGUocGh5ZGV2LCBwYWNrYWdlX25vZGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGhhc19jb25maWd1cmF0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBjYWxpYnJhdGlvbik7XFxuK1xcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhwcml2LVxcdTAwM2Vjb250cm9sKTtcXG4rXFxuK291dF9wdXRfbm9kZTpcXG4rXFx0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9wYWdlZChwaHlkZXYsIEFDWDAwX1BBR0VfMSxcXG4rXFx0XFx0XFx0XFx0QUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHRcXHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlb2Zfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlkZXYgPSBwaHlkZXY7XFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSwgcHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcG93ZXIgb24gY29udHJvbCBibG9ja1xcXFxuXFxcIik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9zZXRfaW50ZXJmYWNlKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXFxuK1xcdHJldCA9IGdlbnBoeV9yZXN1bWUocGh5ZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfc29mdF9yZXNldChwaHlkZXYpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHR1MTYgYWZlX2VxX3J4X2RldGVjdCA9IHByaXYtXFx1MDAzZWlzX2FjMzAwID9cXG4rXFx0XFx0QUMzMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRSA6XFxuK1xcdFxcdEFDMjAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUU7XFxuK1xcdHUxNiB0eF9sZXZlbF92YWx1ZSA9IEFDWDAwX1BBR0U2X1RYX0xFVkVMX0RFRkFVTFRfVkFMVUU7XFxuK1xcdHUxNiBnbG9iYWxfY29uZmlnO1xcbitcXHRpbnQgb2xkcGFnZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGdsb2JhbF9jb25maWcgPSBGSUVMRF9QUkVQKEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssXFxuK1xcdFxcdFxcdFxcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xcbitcXHRpZiAocHJpdi1cXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcXG4rXFx0XFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcXG4rXFxuK1xcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXFxuK1xcdFxcdFxcdCAgICAgICBBQ1gwMF9QQUdFMF9HTE9CQUxfQ09ORklHX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUIHxcXG4rXFx0XFx0XFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdGFmZV9lcV9yeF9kZXRlY3QgPVxcbitcXHRcXHRcXHRBQ1gwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX0xPV19DQUxfVkFMVUU7XFxuK1xcdFxcdHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfTE9XX0NBTF9WQUxVRTtcXG4rXFx0fVxcbitcXG4rXFx0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XFxuK1xcdGlmIChvbGRwYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTFfQVBTX0RJU0FCTEVEXzRTX1ZBTFVFKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV8yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMl9UWF9EQVRBX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0ICAgRklFTERfUFJFUChBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlKHBoeWRldiwgQUNYMDBfUEFHRV82KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgYWZlX2VxX3J4X2RldGVjdCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRkVfUlhfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChwcml2LVxcdTAwM2Vpc19hYzMwMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZykge1xcbitcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9MT1dfQ0FMX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfOCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlzX2FjMzAwIFxcdTAwMjZcXHUwMDI2IHByaXYtXFx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQVVUT19DQUxfQ09OVFJPTF9SRUcsXFxuK1xcdFxcdFxcdFxcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfUkVHLFxcbitcXHRcXHRcXHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcXG4rXFxuK291dF9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldCA9IHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRwYWdlLCByZXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cXG4rXFx0cmV0dXJuIGdlbnBoeV9jNDVfYW5fY29uZmlnX2VlZV9hbmVnKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29uKHByaXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFBvd2VyaW5nIG9mZiB0aGUgY29udHJvbCBibG9jayBsb3NlcyB0aGUgdmVuZG9yLXBhZ2Ugc3RhdGUuICovXFxuK1xcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IHJlc3VtZV9yZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfc3VzcGVuZChwaHlkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gYWN4MDBfZXBoeV9jb250cm9sX3Bvd2VyX29mZihwcml2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXN1bWVfcmV0KVxcbitcXHRcXHRcXHRwaHlkZXZfd2FybihwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIHJlY292ZXIgZnJvbSBzdXNwZW5kIGVycm9yOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBFUlJfUFRSKHJlc3VtZV9yZXQpKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcXG4rXFx0Ym9vbCBtYXRjaDtcXG4rXFxuK1xcdGlmICghZ2VucGh5X21hdGNoX3BoeV9kZXZpY2UocGh5ZGV2LCBwaHlkcnYpIHx8ICFub2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFJLNjMwIHJlcG9ydHMgdGhlIHNhbWUgUEhZIElELCBzbyBhbHNvIG1hdGNoIHRoZSBwYWNrYWdlIGlkZW50aXR5LiAqL1xcbitcXHRwYWNrYWdlX25vZGUgPSBvZl9nZXRfcGFyZW50KG5vZGUpO1xcbitcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdG1hdGNoID0gb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWMzMDAtZXBoeS1wYWNrYWdlXFxcIikgfHxcXG4rXFx0XFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRcXFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXFxcIik7XFxuK1xcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gbWF0Y2g7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBhY3gwMF9lcGh5X2RyaXZlcltdID0ge1xcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRVBIWVxcXCIsXFxuK1xcdFxcdC5tYXRjaF9waHlfZGV2aWNlID0gYWN4MDBfZXBoeV9tYXRjaF9waHlfZGV2aWNlLFxcbitcXHRcXHQucHJvYmUgPSBhY3gwMF9lcGh5X3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlID0gYWN4MDBfZXBoeV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlID0gYWN4MDBfZXBoeV93cml0ZV9wYWdlLFxcbitcXHRcXHQuc29mdF9yZXNldCA9IGFjeDAwX2VwaHlfc29mdF9yZXNldCxcXG4rXFx0XFx0LmNvbmZpZ19pbml0ID0gYWN4MDBfZXBoeV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LmRpc2FibGVfYXV0b25vbW91c19lZWUgPSBhY3gwMF9lcGh5X2Rpc2FibGVfYXV0b25vbW91c19lZWUsXFxuK1xcdFxcdC5zdXNwZW5kID0gYWN4MDBfZXBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lID0gYWN4MDBfZXBoeV9yZXN1bWUsXFxuK1xcdH0sXFxuK307XFxuK21vZHVsZV9waHlfZHJpdmVyKGFjeDAwX2VwaHlfZHJpdmVyKTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYWN4MDBfZXBoeV90YmxbXSA9IHtcXG4rXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcXG4rXFx0eyB9XFxuK307XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYWN4MDBfZXBoeV90YmwpO1xcbitcXG4rTU9EVUxFX0FVVEhPUihcXFwiSmFtZXMgSGlsbGlhcmQgXFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmggYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi43ZGY2MDg0YzdhNzcyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcXG5AQCAtMCwwICsxLDI4IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rI2RlZmluZSBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVRcXHQxNlxcbitcXG4rc3RydWN0IGRldmljZV9ub2RlO1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XFxuK1xcdGludCAoKnBvd2VyX29uKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xcbitcXHRpbnQgKCpwb3dlcl9vZmYpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpO1xcbitcXHRpbnQgKCpzZXRfaW50ZXJmYWNlKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxcbitcXHRcXHRcXHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpO1xcbit9O1xcbitcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcXG4rXFx0XFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXFxuK2FjMzAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSwgdTggY2FsaWJyYXRpb24pO1xcbitcXG4rI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjM1LjY4NTkyNTE4M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE5NjQ4OTUwNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlcidzIHByb2JlIGFuZCBtYXRjaCBmdW5jdGlvbnMgc3RyaWN0bHkgcmVxdWlyZSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcywgY29tcGF0aWJsZXMsIGFuZCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgKHN1Y2ggYXMgSTJDIGNsaWVudHMgd2l0aCByZWdtYXBzLCBjbG9ja3MsIHJlZ3VsYXRvcnMsIGFuZCBOVk1FTSBjZWxscykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmJhNzAyODJjYWI2ZjZkM2E3ZDU5M2NkZjgwZTgyNmI2ZTY3NGNmMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDIzOjM4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2UueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZmU1N2JkMTYzZGQ3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sXG5AQCAtMCwwICsxLDE1NCBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3gtcG93ZXJzLGFjeDAwLWVwaHktcGFja2FnZS55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgRXRoZXJuZXQgUEhZIHBhY2thZ2VzXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjpcbisgIFRoZSBBQzIwMCBhbmQgQUMzMDAgY29udGFpbiBjb21wYXRpYmxlIEZhc3QgRXRoZXJuZXQgUEhZIGJsb2NrcyB3aGljaCByZXBvcnRcbisgIHRoZSBzYW1lIENsYXVzZSAyMiBQSFkgSUQgYW5kIHVzZSB0aGUgc2FtZSBsaW5rLXNpZGUgcmVnaXN0ZXIgbGF5b3V0LiBUaGVcbisgIHBhY2thZ2UgY29udHJvbCBwYXRocyBkaWZmZXIuIEFDMjAwIHBhY2thZ2UgY29udHJvbCByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkXG4rICB0aHJvdWdoIHRoZSBjb21wYW5pb24gSUMncyBJMkMgcmVnaXN0ZXIgaW50ZXJmYWNlLCB3aGlsZSBBQzMwMCBjb250cm9sXG4rICByZWdpc3RlcnMgb2NjdXB5IGEgc2Vjb25kIENsYXVzZSAyMiBhZGRyZXNzIGZpeGVkIGF0IDE2IHBsdXMgdGhlIGxpbmsgUEhZXG4rICBhZGRyZXNzLlxuK1xuKyAgU3lzdGVtcyB3aXRoIGEga25vd24gcGFja2FnZSB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQUMyMDAgb3IgQUMzMDAgY29tcGF0aWJsZS5cbisgIFN5c3RlbXMgd2hpY2ggY2FuIGNvbnRhaW4gZWl0aGVyIHBhY2thZ2UgdXNlIHRoZSBBQ3gwMCBjb21wYXRpYmxlIGFuZCBhXG4rICBwYWNrZWQgTlZNRU0gY29uZmlndXJhdGlvbiBmaWVsZCB0byBzZWxlY3QgdGhlIGJhY2tlbmQgYXQgcnVudGltZS5cbitcbisgIFRoZSBsaW5rIFBIWSBjYW5ub3QgcmVwb3J0IGl0cyBJRCB1bnRpbCB0aGUgcGFja2FnZSBjb250cm9sIHNlcXVlbmNlIGhhc1xuKyAgY29tcGxldGVkLCBzbyBpdHMgY2hpbGQgbm9kZSBzdXBwbGllcyB0aGUgZG9jdW1lbnRlZCBQSFkgSUQuIFRoZSBwYWNrYWdlIGFuZFxuKyAgY2hpbGQgdXNlIHRoZSBzYW1lIGJhc2UgYWRkcmVzcy4gVGhlIEFDMjAwIGRyaXZlciBwcm9ncmFtcyB0aGF0IGFkZHJlc3MgaW50b1xuKyAgdGhlIHBhY2thZ2UsIHdoaWxlIHRoZSBBQzMwMCBkcml2ZXIgZGVyaXZlcyBpdHMgY29udHJvbCBhZGRyZXNzIGZyb20gaXQuXG4rXG4rcHJvcGVydGllczpcbisgIGNvbXBhdGlibGU6XG4rICAgIGVudW06XG4rICAgICAgLSB4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcbisgICAgICAtIHgtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVxuKyAgICAgIC0geC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXG4rXG4rICByZWc6XG4rICAgIG1heGltdW06IDMxXG4rXG4rICBjbG9ja3M6XG4rICAgIG1heEl0ZW1zOiAxXG4rICAgIGRlc2NyaXB0aW9uOiBBQzMwMCBpbnB1dCBjbG9jaywgcnVubmluZyBhdCAyNCwgMjUsIG9yIDI3IE1IelxuK1xuKyAgdmNjLXN1cHBseTpcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgMy4zIFYgcGFja2FnZSBzdXBwbHkuIFRoaXMgaXMgY29ubmVjdGVkIHRvIEVQSFlfVkNDIG9uIEFDMjAwIGFuZCBWQ0MxXG4rICAgICAgb24gQUMzMDAuXG4rXG4rICBudm1lbS1jZWxsczpcbisgICAgbWF4SXRlbXM6IDFcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgUGFja2VkIEVQSFkgY29uZmlndXJhdGlvbiBmaWVsZC4gQml0cyAzIHRocm91Z2ggMCBjb250YWluIHRoZSBhbmFsb2dcbisgICAgICBjYWxpYnJhdGlvbiBjb2RlLCBiaXRzIDcgdGhyb3VnaCA0IGFyZSByZXNlcnZlZCwgYml0IDggc2VsZWN0cyBBQzMwMFxuKyAgICAgIHdoZW4gc2V0IGFuZCBBQzIwMCB3aGVuIGNsZWFyLCBhbmQgYml0IDkgcmVxdWVzdHMgdGhlIEFDMzAwXG4rICAgICAgbG93LWNhbGlicmF0aW9uIHR1bmluZyBzZXF1ZW5jZS4gQSBmaXhlZCBBQzIwMCBwYWNrYWdlIG1heSBwcm92aWRlIG9ubHlcbisgICAgICB0aGUgbG93IGNhbGlicmF0aW9uIGJpdHMgb3Igb21pdCB0aGUgY2VsbCBhbmQgdXNlIGl0cyBpbnRlcm5hbCBlRnVzZVxuKyAgICAgIGNvcHkgaW5zdGVhZC5cbitcbisgIG52bWVtLWNlbGwtbmFtZXM6XG4rICAgIGNvbnN0OiBjb25maWd1cmF0aW9uXG4rXG4rICB4LXBvd2VycyxhYzIwMDpcbisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvcGhhbmRsZVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBQaGFuZGxlIHRvIHRoZSBBQzIwMCBjb21wYW5pb24gSUMgcHJvdmlkaW5nIEkyQyBhY2Nlc3MgdG8gdGhlIHBhY2thZ2VcbisgICAgICBjb250cm9sIHJlZ2lzdGVycyB1c2VkIHRvIHBvd2VyIGFuZCBjb25maWd1cmUgdGhlIEV0aGVybmV0IFBIWS5cbitcbisgIHgtcG93ZXJzLHhtaWktcngtY2xvY2staW52ZXJ0ZWQ6XG4rICAgIHR5cGU6IGJvb2xlYW5cbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgSW52ZXJ0IHRoZSB4TUlJIHJlY2VpdmUgY2xvY2sgaW5zaWRlIHRoZSBQSFkuIFRoaXMgaXMgcmVxdWlyZWQgYnkgc29tZVxuKyAgICAgIFNvQyBpbnRlZ3JhdGlvbnMsIGluY2x1ZGluZyB0aGUgQWxsd2lubmVyIEg2IEFDMjAwIGNvbm5lY3Rpb24uXG4rXG4rcGF0dGVyblByb3BlcnRpZXM6XG4rICBeZXRoZXJuZXQtcGh5QFthLWYwLTldKyQ6XG4rICAgICRyZWY6IGV0aGVybmV0LXBoeS55YW1sI1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICBjb25zdDogZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gdmNjLXN1cHBseVxuK1xuK2RlcGVuZGVudFJlcXVpcmVkOlxuKyAgbnZtZW0tY2VsbHM6IFsgbnZtZW0tY2VsbC1uYW1lcyBdXG4rXG4rYWxsT2Y6XG4rICAtICRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb25zdDogeC1wb3dlcnMsYWMyMDAtZXBoeS1wYWNrYWdlXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNsb2NrczogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0geC1wb3dlcnMsYWMyMDBcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgICB4LXBvd2VycyxhYzIwMDogZmFsc2VcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gY2xvY2tzXG4rICAgICAgICAtIG52bWVtLWNlbGxzXG4rICAgICAgICAtIG52bWVtLWNlbGwtbmFtZXNcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGNvbnN0OiB4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgcmVnOlxuKyAgICAgICAgICBtYXhpbXVtOiA3XG4rICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAtIGNsb2Nrc1xuKyAgICAgICAgLSBudm1lbS1jZWxsc1xuKyAgICAgICAgLSBudm1lbS1jZWxsLW5hbWVzXG4rICAgICAgICAtIHgtcG93ZXJzLGFjMjAwXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNnB3bSA1XHUwMDNlO1xuKyAgICAgICAgICAgIHZjYy1zdXBwbHkgPSBcdTAwM2NcdTAwMjZyZWdfM3YzXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGxzID0gXHUwMDNjXHUwMDI2ZXBoeV9jb25maWd1cmF0aW9uXHUwMDNlO1xuKyAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSBcImNvbmZpZ3VyYXRpb25cIjtcbisgICAgICAgICAgICB4LXBvd2VycyxhYzIwMCA9IFx1MDAzY1x1MDAyNmFjMjAwXHUwMDNlO1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUAwIHtcbisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwiZXRoZXJuZXQtcGh5LWlkMDA0NC4xNDAwXCI7XG4rICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgfTtcbisgICAgICAgIH07XG4rICAgIH07XG4rXG4rLi4uXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggYjRlZjkyN2ZkNGE2Ny4uZDM4MzU1OTdlMzc5NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTQ4NCw2ICs0ODQsMTcgQEAgY29uZmlnIFZJVEVTU0VfUEhZXG4gXHRoZWxwXG4gXHQgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgdnNjODI0NFxuIFxuK2NvbmZpZyBYUE9XRVJTX0FDWDAwX1BIWVxuK1x0dHJpc3RhdGUgXCJYLVBvd2VycyBBQzIwMC9BQzMwMCBFdGhlcm5ldCBQSFlcIlxuK1x0ZGVwZW5kcyBvbiBDT01NT05fQ0xLIFx1MDAyNlx1MDAyNiBOVk1FTSBcdTAwMjZcdTAwMjYgT0ZfTURJTyBcdTAwMjZcdTAwMjYgUkVHVUxBVE9SXG4rXHRkZXBlbmRzIG9uIEkyQyB8fCAhSTJDXG4rXHRzZWxlY3QgUEhZX1BBQ0tBR0VcbitcdGhlbHBcbitcdCAgRW5hYmxlIHRoZSBGYXN0IEV0aGVybmV0IFBIWSBkcml2ZXIgc2hhcmVkIGJ5IHRoZSBYLVBvd2VycyBBQzIwMFxuK1x0ICBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlciBjb25maWd1cmVzIHRoZWlyIGNvbW1vbiBNRElPIFBIWVxuK1x0ICByZWdpc3RlcnMgYW5kIHRoZSBwYWNrYWdlLXNwZWNpZmljIEFDMjAwIEkyQyBvciBBQzMwMCBNRElPIGNvbnRyb2xcbitcdCAgcmVnaXN0ZXJzLlxuK1xuIGNvbmZpZyBYSUxJTlhfR01JSTJSR01JSVxuIFx0dHJpc3RhdGUgXCJYaWxpbnggR01JSTJSR01JSSBjb252ZXJ0ZXIgZHJpdmVyXCJcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbmluZGV4IDI1YzRhM2MyNDI5ZjcuLjQ5NTc1ZmExODUyMjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVxuQEAgLTEwMSw0ICsxMDEsNSBAQCBvYmotJChDT05GSUdfU01TQ19QSFkpXHRcdCs9IHNtc2Mub1xuIG9iai0kKENPTkZJR19TVEUxMFhQKVx0XHQrPSBzdGUxMFhwLm9cbiBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpXHQrPSB0ZXJhbmV0aWNzLm9cbiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpXHQrPSB2aXRlc3NlLm9cbitvYmotJChDT05GSUdfWFBPV0VSU19BQ1gwMF9QSFkpXHQrPSB4cG93ZXJzL1xuIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hZTk3N2E3OTU4MzI1XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9NYWtlZmlsZVxuQEAgLTAsMCArMSwzIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuK3hwb3dlcnMtYWN4MDAteSA6PSBhY3gwMC5vIGFjMjAwLm8gYWMzMDAub1xuK29iai0kKENPTkZJR19YUE9XRVJTX0FDWDAwX1BIWSkgKz0geHBvd2Vycy1hY3gwMC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMyMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMjAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wMWY3MWY2MzU0ZmUxXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzIwMC5jXG5AQCAtMCwwICsxLDMxMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMjAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbisgKlxuKyAqIENvcHlyaWdodCAoYykgMjAyMiBBcm0gTHRkLiAoQW5kcmUgUHJ6eXdhcmEgXHUwMDNjYW5kcmUucHJ6eXdhcmFAYXJtLmNvbVx1MDAzZSlcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2kyYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQzIwMF9FUEhZX0JQU19FRkZVU0VfT0ZGU0VUXHQzXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19SQVRFXzI0X01IWlx0MjQwMDAwMDBcbisjZGVmaW5lIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaXHQyNzAwMDAwMFxuK1xuKyNkZWZpbmUgQUMyMDBfU1lTX0VQSFlfQ1RMMF9SRUdcdFx0XHQweDAwMTRcbisjZGVmaW5lIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlRcdFx0QklUKDApXG4rI2RlZmluZSBBQzIwMF9FUEhZX1NZU0NMS19FTkFCTEVcdFx0XHRCSVQoMSlcbitcbisjZGVmaW5lIEFDMjAwX1NZU19FUEhZX0NUTDFfUkVHXHRcdFx0MHgwMDE2XG4rI2RlZmluZSBBQzIwMF9FUEhZX01JSV9JT19FTkFCTEVcdFx0XHRCSVQoMClcbitcbisvKiBBQzIwMC1pbnRlcm5hbCBjb3B5IG9mIHRoZSBFdGhlcm5ldCBQSFkgY2FsaWJyYXRpb24gZUZ1c2UuICovXG4rI2RlZmluZSBBQzIwMF9FRlVTRV9FUEhZX1JFR1x0XHRcdDB4ODAwNFxuK1xuKyNkZWZpbmUgQUMyMDBfRVBIWV9DVExfUkVHXHRcdFx0MHg2MDAwXG4rI2RlZmluZSBBQzIwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4rI2RlZmluZSBBQzIwMF9FUEhZX0NMS19TRUxfMjRfTUhaXHRcdEJJVCgyKVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9QSFlfQUREUl9NQVNLXHRcdFx0R0VOTUFTSyg4LCA0KVxuKyNkZWZpbmUgQUMyMDBfRVBIWV9STUlJX1NFTFx0XHRcdEJJVCgxMSlcbisjZGVmaW5lIEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLXHRcdEdFTk1BU0soMTUsIDEyKVxuK1xuK3N0cnVjdCBhYzIwMF9lcGh5X2N0bCB7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4rXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4rXHRzdHJ1Y3QgcmVndWxhdG9yICp2Y2M7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4rXHR1MTYgZXBoeV9jdGw7XG4rXHR1bnNpZ25lZCBpbnQgcGh5X2FkZHI7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlO1xuK1x0Ym9vbCBzdXBwbHlfZW5hYmxlZDtcbitcdGJvb2wgcG93ZXJlZDtcbit9O1xuK1xuK3N0YXRpYyB1MTYgYWMyMDBfZXBoeV9jdGxfY29uZmlnKGNvbnN0IHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VlcGh5X2N0bCB8XG4rXHRcdChwcml2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA/XG4rXHRcdCBBQzIwMF9FUEhZX1JNSUlfU0VMIDogMCkgfFxuK1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSywgcHJpdi1cdTAwM2VwaHlfYWRkcik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfd3JpdGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2LFxuK1x0XHRcdFx0dW5zaWduZWQgaW50IHJlZywgdTE2IHZhbHVlKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIHJlZywgdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gd3JpdGUgcmVnaXN0ZXIgJSN4OiAlcGVcXG5cIixcbitcdFx0XHRyZWcsIEVSUl9QVFIocmV0KSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUoc3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2KVxuK3tcbitcdGludCBlcnI7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpIHtcbitcdFx0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0XHQgICBhYzIwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0XHQgICBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbitcdFx0ZXJyID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfU1lTX0VQSFlfQ1RMMV9SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVyciA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1xuK1x0XHRwcml2LVx1MDAzZXBvd2VyZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkKSB7XG4rXHRcdGVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKCFlcnIpXG4rXHRcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IGZhbHNlO1xuK1x0XHRlbHNlIGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGVycjtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMyMDBfZXBoeV9jdGxfcG93ZXJfb2ZmKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXG4rXHRyZXR1cm4gYWMyMDBfZXBoeV9jdGxfZGlzYWJsZShwcml2KTtcbit9XG4rXG4rc3RhdGljIGludFxuK2FjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2Uoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRyb2wsIHN0cnVjdCBhYzIwMF9lcGh5X2N0bCwgY29udHJvbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSBcdTAwMjZcdTAwMjZcbitcdCAgICBpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlID09IGludGVyZmFjZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKVxuK1x0XHRyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIEFDMjAwX0VQSFlfQ1RMX1JFRyxcbitcdFx0XHRcdFx0IEFDMjAwX0VQSFlfUk1JSV9TRUwsXG4rXHRcdFx0XHRcdCBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHRcdFx0XHQgQUMyMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlID0gaW50ZXJmYWNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbihzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IHBoeV9hZGRyKVxuK3tcbitcdHN0cnVjdCBhYzIwMF9lcGh5X2N0bCAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250cm9sLCBzdHJ1Y3QgYWMyMDBfZXBoeV9jdGwsIGNvbnRyb2wpO1xuK1x0dTE2IGVwaHlfY3RsO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlfYWRkciBcdTAwM2UgRklFTERfTUFYKEFDMjAwX0VQSFlfUEhZX0FERFJfTUFTSykpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VwaHlfYWRkciA9PSBwaHlfYWRkcilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMjAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHByaXYtXHUwMDNlcGh5X2FkZHIgPSBwaHlfYWRkcjtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCkge1xuK1x0XHRyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtXHUwMDNldmNjKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gdHJ1ZTtcbitcdH1cbitcbitcdGVwaHlfY3RsID0gYWMyMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpO1xuK1xuK1x0LyogU3RhcnQgZnJvbSBhIGRpc2FibGVkIHN0YXRlIGJlZm9yZSBhcHBseWluZyB0aGUgY29uZmlndXJhdGlvbi4gKi9cbitcdHJldCA9IGFjMjAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMjAwX1NZU19FUEhZX0NUTDBfUkVHLCAwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwxX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfTUlJX0lPX0VOQUJMRSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9kaXNhYmxlO1xuK1xuK1x0cmV0ID0gYWMyMDBfZXBoeV9jdGxfd3JpdGUocHJpdiwgQUMyMDBfRVBIWV9DVExfUkVHLFxuK1x0XHRcdFx0ICAgZXBoeV9jdGwgfCBBQzIwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9TWVNfRVBIWV9DVEwwX1JFRyxcbitcdFx0XHRcdCAgIEFDMjAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICAgQUMyMDBfRVBIWV9TWVNDTEtfRU5BQkxFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRyZXQgPSBhYzIwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzIwMF9FUEhZX0NUTF9SRUcsIGVwaHlfY3RsKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2Rpc2FibGU7XG4rXG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2Rpc2FibGU6XG4rXHQvKiBBdHRlbXB0IGV2ZXJ5IHN0ZXAgb2YgdGhlIHNodXRkb3duIHNlcXVlbmNlIGFmdGVyIGEgcGFydGlhbCBzdGFydC4gKi9cbitcdHByaXYtXHUwMDNlcG93ZXJlZCA9IHRydWU7XG4rXHRhYzIwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqXG4rYWMyMDBfZXBoeV9jdGxfY3JlYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdCAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlLFxuK1x0XHQgICAgICBib29sIGhhc19jYWxpYnJhdGlvbiwgdTggY2FsaWJyYXRpb24pXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0dW5zaWduZWQgaW50IGludGVybmFsX2NhbGlicmF0aW9uO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICphYzIwMF9ub2RlO1xuK1x0c3RydWN0IGFjMjAwX2VwaHlfY3RsICpwcml2O1xuK1x0c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDtcbitcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4rXHR1OCBicHNfZWZmdXNlX2NvZGU7XG4rXHRzdHJ1Y3QgY2xrICpjbGs7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuK1x0cHJpdi1cdTAwM2V2Y2MgPSBkZXZtX29mX3JlZ3VsYXRvcl9nZXQoZGV2LCBwYWNrYWdlX25vZGUsIFwidmNjXCIpO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXZjYykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNldmNjKSxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgcGFja2FnZSBzdXBwbHlcXG5cIikpO1xuK1xuK1x0YWMyMDBfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGFja2FnZV9ub2RlLCBcIngtcG93ZXJzLGFjMjAwXCIsIDApO1xuK1x0aWYgKCFhYzIwMF9ub2RlKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcIm1pc3NpbmcgeC1wb3dlcnMsYWMyMDAgcmVmZXJlbmNlXFxuXCIpKTtcbitcdGNsaWVudCA9IG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlKGFjMjAwX25vZGUpO1xuK1x0b2Zfbm9kZV9wdXQoYWMyMDBfbm9kZSk7XG4rXHRpZiAoIWNsaWVudCkge1xuK1x0XHRyZXQgPSBJU19FTkFCTEVEKENPTkZJR19JMkMpID8gLUVQUk9CRV9ERUZFUiA6IC1FTk9ERVY7XG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJBQzIwMCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcXG5cIikpO1xuK1x0fVxuK1xuK1x0aWYgKCFkZXZpY2VfbGlua19hZGQoZGV2LCBcdTAwMjZjbGllbnQtXHUwMDNlZGV2LFxuK1x0XHRcdCAgICAgRExfRkxBR19BVVRPUkVNT1ZFX0NPTlNVTUVSKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBsaW5rIEFDMjAwIGRldmljZVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbitcdH1cbitcbitcdGlmICghZGV2aWNlX3RyeWxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FUFJPQkVfREVGRVIsXG4rXHRcdFx0XHQgICAgXCJBQzIwMCBkcml2ZXIgaXMgbm90IHJlYWR5XFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfY2xpZW50O1xuK1x0fVxuK1xuK1x0aWYgKGRldmljZV9pc19ib3VuZChcdTAwMjZjbGllbnQtXHUwMDNlZGV2KSlcbitcdFx0cHJpdi1cdTAwM2VyZWdtYXAgPSBkZXZfZ2V0X3JlZ21hcChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGRldmljZV91bmxvY2soXHUwMDI2Y2xpZW50LVx1MDAzZWRldik7XG4rXHRpZiAoIXByaXYtXHUwMDNlcmVnbWFwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRVBST0JFX0RFRkVSLFxuK1x0XHRcdFx0ICAgIFwiQUMyMDAgZHJpdmVyIGlzIG5vdCByZWFkeVxcblwiKTtcbitcdFx0Z290byBvdXRfcHV0X2NsaWVudDtcbitcdH1cbitcbitcdGlmICghaGFzX2NhbGlicmF0aW9uKSB7XG4rXHRcdHJldCA9IHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBBQzIwMF9FRlVTRV9FUEhZX1JFRyxcbitcdFx0XHRcdCAgXHUwMDI2aW50ZXJuYWxfY2FsaWJyYXRpb24pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0XHRjYWxpYnJhdGlvbiA9IGludGVybmFsX2NhbGlicmF0aW9uO1xuK1x0fVxuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YnBzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMyMDBfRVBIWV9CUFNfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jdGwgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMjAwX0VQSFlfQlBTX0VGRlVTRV9NQVNLLCBicHNfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0Y2xrID0gY2xrX2dldChcdTAwMjZjbGllbnQtXHUwMDNlZGV2LCBOVUxMKTtcbitcdGlmIChJU19FUlIoY2xrKSkge1xuK1x0XHRyZXQgPSBQVFJfRVJSKGNsayk7XG4rXHRcdGdvdG8gb3V0X2Vycm9yO1xuK1x0fVxuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcbitcdGNsa19wdXQoY2xrKTtcbitcbitcdHN3aXRjaCAoY2xrX3JhdGUpIHtcbitcdGNhc2UgQUMyMDBfRVBIWV9DTEtfUkFURV8yNF9NSFo6XG4rXHRcdHByaXYtXHUwMDNlZXBoeV9jdGwgfD0gQUMyMDBfRVBIWV9DTEtfU0VMXzI0X01IWjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDMjAwX0VQSFlfQ0xLX1JBVEVfMjdfTUhaOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwidW5zdXBwb3J0ZWQgQUMyMDAgY2xvY2sgcmF0ZSAlbHUgSHpcXG5cIixcbitcdFx0XHRcdCAgICBjbGtfcmF0ZSk7XG4rXHRcdGdvdG8gb3V0X3B1dF9jbGllbnQ7XG4rXHR9XG4rXG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb24gPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vbjtcbitcdHByaXYtXHUwMDNlY29udHJvbC5wb3dlcl9vZmYgPSBhYzIwMF9lcGh5X2N0bF9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wuc2V0X2ludGVyZmFjZSA9IGFjMjAwX2VwaHlfY3RsX3NldF9pbnRlcmZhY2U7XG4rXHQvKiBNSUkgaXMgdGhlIHJlc2V0IGRlZmF1bHQgdXNlZCB1bnRpbCB0aGUgTUFDIHN1cHBsaWVzIGl0cyBpbnRlcmZhY2UuICovXG4rXHRwcml2LVx1MDAzZWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbitcbitvdXRfZXJyb3I6XG4rXHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBpbml0aWFsaXplIEFDMjAwIGNvbnRyb2xcXG5cIik7XG4rb3V0X3B1dF9jbGllbnQ6XG4rXHRwdXRfZGV2aWNlKFx1MDAyNmNsaWVudC1cdTAwM2VkZXYpO1xuK1x0cmV0dXJuIEVSUl9QVFIocmV0KTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWMzMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjMzAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5hYTU2MDQzMmExNGM5XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hYzMwMC5jXG5AQCAtMCwwICsxLDM4NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMzAwIEV0aGVybmV0IFBIWSBwYWNrYWdlIGJhY2tlbmRcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBKYW1lcyBIaWxsaWFyZCBcdTAwM2NqYW1lcy5oaWxsaWFyZDFAZ21haWwuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCIuLi9waHlsaWIuaFwiXG4rI2luY2x1ZGUgXCJhY3gwMC5oXCJcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9PRkZTRVRcdDNcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1JBVEVfMjRfTUhaXHQyNDAwMDAwMFxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfUkFURV8yNV9NSFpcdDI1MDAwMDAwXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWlx0MjcwMDAwMDBcbisjZGVmaW5lIEFDMzAwX1NZU19DT05UUk9MX1JFR1x0XHRcdDB4MDBcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0tcdFx0R0VOTUFTSygxMSwgOClcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLXHRcdFx0R0VOTUFTSyg3LCA2KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI1X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAwKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI3X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAxKVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9DTEtfU0VMXzI0X01IWlx0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQ0xLX1NFTF9NQVNLLCAyKVxuKyNkZWZpbmUgQUMzMDBfRUZVU0VfQ0xLX0VOQUJMRVx0XHRcdEJJVCg1KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9SRUdfQ0xLX0VOQUJMRVx0XHRCSVQoNClcbisjZGVmaW5lIEFDMzAwX0NMS0lOX0dBVElOR19FTkFCTEVcdFx0QklUKDIpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1JFU0VUX0RFQVNTRVJUXHRcdEJJVCgxKVxuKyNkZWZpbmUgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVFx0XHRCSVQoMClcbitcbisjZGVmaW5lIEFDMzAwX1BBQ0tBR0VfUE9SX0lOVEVSTkFMX0RMRE9cdFx0QklUKDMpXG4rI2RlZmluZSBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0tcdFx0R0VOTUFTSygyLCAwKVxuK1xuKyNkZWZpbmUgQUMzMDBfU1lTX0JJQVMxX1JFR1x0XHRcdDB4MDJcbisjZGVmaW5lIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFXHRcdEJJVCgxNSlcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19SRUdcdFx0XHQweDA1XG4rI2RlZmluZSBBQzMwMF9NRElPX0RSVl9NQVNLXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4rI2RlZmluZSBBQzMwMF9NSUlfRFJWX01BU0tcdFx0XHRHRU5NQVNLKDExLCAxMClcbisjZGVmaW5lIEFDMzAwX0lPX0RSVl9MRVZFTF8yXHRcdFx0MlxuKyNkZWZpbmUgQUMzMDBfQ0xLSU5fUEFEX0VOQUJMRVx0XHRcdEJJVCg0KVxuKyNkZWZpbmUgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9FUEhZX0NPTkZJR19SRUdcdFx0XHQweDA2XG4rI2RlZmluZSBBQzMwMF9FUEhZX0JHU19FRkZVU0VfTUFTS1x0XHRHRU5NQVNLKDE1LCAxMilcbisjZGVmaW5lIEFDMzAwX0VQSFlfUk1JSV9TRUxcdFx0XHRCSVQoMTEpXG4rI2RlZmluZSBBQzMwMF9FUEhZX1NIVVRET1dOXHRcdFx0QklUKDApXG4rXG4rI2RlZmluZSBBQzMwMF9TWVNfQ09OVFJPTF9FTkFCTEVfQklUUyBcXFxuK1x0KEFDMzAwX0VGVVNFX0NMS19FTkFCTEUgfCBBQzMwMF9FUEhZX1JFR19DTEtfRU5BQkxFIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9HQVRJTkdfRU5BQkxFIHwgQUMzMDBfRVBIWV9SRVNFVF9ERUFTU0VSVCB8IFxcXG4rXHQgQUMzMDBfQ0hJUF9SRVNFVF9ERUFTU0VSVClcbitcbisjZGVmaW5lIEFDMzAwX1NZU19JT19WQUxVRSBcXFxuK1x0KEZJRUxEX1BSRVAoQUMzMDBfTURJT19EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDMzAwX01JSV9EUlZfTUFTSywgQUMzMDBfSU9fRFJWX0xFVkVMXzIpIHwgXFxcbitcdCBBQzMwMF9DTEtJTl9QQURfRU5BQkxFIHwgQUMzMDBfRVBIWV9NSUlfSU9fRU5BQkxFKVxuK1xuK3N0cnVjdCBhYzMwMF9lcGh5X2N0bCB7XG4rXHRzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sIGNvbnRyb2w7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IHJlZ3VsYXRvciAqdmNjO1xuK1x0c3RydWN0IGNsayAqY2xrO1xuK1x0dTE2IHN5c19jb250cm9sO1xuK1x0dTE2IGVwaHlfY29uZmlnO1xuK1x0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZTtcbitcdGJvb2wgcGFja2FnZV9rbm93bjtcbitcdGJvb2wgaW50ZXJuYWxfZGxkbztcbitcdGJvb2wgc3VwcGx5X2VuYWJsZWQ7XG4rXHRib29sIHBvd2VyZWQ7XG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgaW50XG4rYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3JlYWQoc3RydWN0IGFjMzAwX2VwaHlfY3RsICpwcml2LCB1MzIgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3JlYWQocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULCByZWdudW0pO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdiwgdTMyIHJlZ251bSxcbitcdFx0XHRcdHUxNiB2YWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocHJpdi1cdTAwM2VwaHlkZXYsXG4rXHRcdFx0XHQgIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVCwgcmVnbnVtLCB2YWwpO1xuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjMzAwX2VwaHlfY3RsX21vZGlmeShzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHQgdTE2IG1hc2ssIHUxNiBzZXQpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHBoeV9sb2NrX21kaW9fYnVzKHByaXYtXHUwMDNlcGh5ZGV2KTtcbitcdHJldCA9IF9fcGh5X3BhY2thZ2VfcmVhZChwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHRcdCBBQzMwMF9FUEhZX0NPTlRST0xfQUREUl9PRkZTRVQsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCkge1xuK1x0XHR1MTYgdmFsID0gKHJldCBcdTAwMjYgfm1hc2spIHwgKHNldCBcdTAwMjYgbWFzayk7XG4rXG4rXHRcdHJldCA9IHZhbCA9PSByZXQgPyAwIDpcbitcdFx0XHRfX3BoeV9wYWNrYWdlX3dyaXRlKHByaXYtXHUwMDNlcGh5ZGV2LFxuK1x0XHRcdFx0XHQgICAgQUMzMDBfRVBIWV9DT05UUk9MX0FERFJfT0ZGU0VULFxuK1x0XHRcdFx0XHQgICAgcmVnbnVtLCB2YWwpO1xuK1x0fVxuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwcml2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX2NvbmZpZyhjb25zdCBzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYpXG4re1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlZXBoeV9jb25maWcgfFxuK1x0XHQocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkgP1xuK1x0XHQgQUMzMDBfRVBIWV9STUlJX1NFTCA6IDApO1xuK31cbitcbitzdGF0aWMgdTE2IGFjMzAwX2VwaHlfY3RsX3Jlc2V0X3ZhbHVlKGNvbnN0IHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogQSBjaGlwIHJlc2V0IHJlc3RvcmVzIERMRE9FTiB0byBvbmUuIFVudGlsIFBLR19TVEFUVVMgaGFzIGlkZW50aWZpZWRcbitcdCAqIHRoZSBzdXBwbHkgYXJyYW5nZW1lbnQsIHByZXNlcnZlIGFueSBleHRlcm5hbC1WREQgc2V0dXAgbGVmdCBieSB0aGVcbitcdCAqIGJvb3Rsb2FkZXIgYnkgYXNzZXJ0aW5nIG9ubHkgdGhlIEVQSFkgcmVzZXQuXG4rXHQgKi9cbitcdHJldHVybiAhcHJpdi1cdTAwM2VwYWNrYWdlX2tub3duIHx8ICFwcml2LVx1MDAzZWludGVybmFsX2RsZG8gP1xuK1x0XHRBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUIDogMDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2Vwb3dlcmVkKSB7XG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX0VQSFlfQ09ORklHX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfY29uZmlnKHByaXYpIHxcbitcdFx0XHRcdFx0ICAgQUMzMDBfRVBIWV9TSFVURE9XTik7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19JT19SRUcsIDApO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXHRcdGVyciA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdFx0ICAgYWMzMDBfZXBoeV9jdGxfcmVzZXRfdmFsdWUocHJpdikpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBlcnI7XG4rXG4rXHRcdGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LVx1MDAzZWNsayk7XG4rXHRcdHByaXYtXHUwMDNlcG93ZXJlZCA9IGZhbHNlO1xuK1x0fVxuK1xuK1x0aWYgKHByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0ZXJyID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi1cdTAwM2V2Y2MpO1xuK1x0XHRpZiAoIWVycilcbitcdFx0XHRwcml2LVx1MDAzZXN1cHBseV9lbmFibGVkID0gZmFsc2U7XG4rXHRcdGVsc2UgaWYgKCFyZXQpXG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBhYzMwMF9lcGh5X2N0bF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbClcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcbitcdHJldHVybiBhYzMwMF9lcGh5X2N0bF9kaXNhYmxlKHByaXYpO1xuK31cbitcbitzdGF0aWMgaW50XG4rYWMzMDBfZXBoeV9jdGxfc2V0X2ludGVyZmFjZShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sLFxuK1x0XHRcdCAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2UgPT0gaW50ZXJmYWNlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmIChwcml2LVx1MDAzZXBvd2VyZWQpXG4rXHRcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHRcdCAgICBBQzMwMF9FUEhZX1JNSUlfU0VMLFxuK1x0XHRcdFx0XHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJID9cbitcdFx0XHRcdFx0ICAgIEFDMzAwX0VQSFlfUk1JSV9TRUwgOiAwKTtcbitcdGlmICghcmV0KVxuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZSA9IGludGVyZmFjZTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWMzMDBfZXBoeV9jdGxfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwaHlfYWRkcilcbit7XG4rXHRzdHJ1Y3QgYWMzMDBfZXBoeV9jdGwgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udHJvbCwgc3RydWN0IGFjMzAwX2VwaHlfY3RsLCBjb250cm9sKTtcbitcdHU4IHBhY2thZ2Vfc3RhdHVzO1xuK1x0dTE2IHJlc2V0X3ZhbHVlO1xuK1x0aW50IHN5c19jb250cm9sO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlfYWRkciAhPSBhYzMwMF9lcGh5X2N0bF9saW5rX2FkZHIocHJpdikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcG93ZXJlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoIXByaXYtXHUwMDNlc3VwcGx5X2VuYWJsZWQpIHtcbitcdFx0cmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LVx1MDAzZXZjYyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cHJpdi1cdTAwM2VzdXBwbHlfZW5hYmxlZCA9IHRydWU7XG4rXG4rXHRcdC8qIFdhaXQgZm9yIHRoZSBwb3dlci1vbiByZXNldCBpbnRlcnZhbCBzcGVjaWZpZWQgYnkgdGhlIG1hbnVhbC4gKi9cbitcdFx0ZnNsZWVwKDEwMDAwKTtcbitcdH1cbitcbitcdHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXHRwcml2LVx1MDAzZXBvd2VyZWQgPSB0cnVlO1xuK1xuK1x0LyogS2VlcCB0aGUgZXh0ZXJuYWwtc3VwcGx5IGNvbmZpZ3VyYXRpb24gYWNyb3NzIGNoaXAgcmVzZXRzLiAqL1xuK1x0cmVzZXRfdmFsdWUgPSBhYzMwMF9lcGh5X2N0bF9yZXNldF92YWx1ZShwcml2KTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRywgcmVzZXRfdmFsdWUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0LyogVGhlIG1hbnVhbCByZXF1aXJlcyBib3RoIHJlc2V0cyB0byBiZSByZWxlYXNlZCBiZWZvcmUgdGhlIGNsb2Nrcy4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIEFDMzAwX0VQSFlfUkVTRVRfREVBU1NFUlQgfFxuK1x0XHRcdFx0ICBBQzMwMF9DSElQX1JFU0VUX0RFQVNTRVJUKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdC8qIFJldGFpbiB0aGUgdmVuZG9yIGNsb2NrLWVuYWJsZSBkZWZhdWx0cywgaW5jbHVkaW5nIHRoZSBlRnVzZSBjbG9jay4gKi9cbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX3dyaXRlKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgIHByaXYtXHUwMDNlc3lzX2NvbnRyb2wpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0c3lzX2NvbnRyb2wgPSBhYzMwMF9lcGh5X2N0bF9yZWFkKHByaXYsIEFDMzAwX1NZU19DT05UUk9MX1JFRyk7XG4rXHRpZiAoc3lzX2NvbnRyb2wgXHUwMDNjIDApIHtcbitcdFx0cmV0ID0gc3lzX2NvbnRyb2w7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHBhY2thZ2Vfc3RhdHVzID0gRklFTERfR0VUKEFDMzAwX1BBQ0tBR0VfU1RBVFVTX01BU0ssIHN5c19jb250cm9sKTtcbitcdGlmICgofnBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BIWV9BRERSX01BU0spICE9XG4rXHQgICAgYWMzMDBfZXBoeV9jdGxfbGlua19hZGRyKHByaXYpKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlaW50ZXJuYWxfZGxkbyA9IHBhY2thZ2Vfc3RhdHVzIFx1MDAyNiBBQzMwMF9QQUNLQUdFX1BPUl9JTlRFUk5BTF9ETERPO1xuK1x0cHJpdi1cdTAwM2VwYWNrYWdlX2tub3duID0gdHJ1ZTtcbitcdHJldCA9IGFjMzAwX2VwaHlfY3RsX21vZGlmeShwcml2LCBBQzMwMF9TWVNfQklBUzFfUkVHLFxuK1x0XHRcdFx0ICAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFLFxuK1x0XHRcdFx0ICAgcHJpdi1cdTAwM2VpbnRlcm5hbF9kbGRvID9cbitcdFx0XHRcdCAgIEFDMzAwX0lOVEVSTkFMX0RMRE9fRU5BQkxFIDogMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4rXG4rXHQvKiBLZWVwIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQgZHJpdmUgbGV2ZWwgYW5kIGxlYXZlIHRoZSBJUlEgZGlzYWJsZWQuICovXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9TWVNfSU9fUkVHLFxuK1x0XHRcdFx0ICAgQUMzMDBfU1lTX0lPX1ZBTFVFKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikgfFxuK1x0XHRcdFx0ICBBQzMwMF9FUEhZX1NIVVRET1dOKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbitcbitcdGZzbGVlcCgxMDAwMCk7XG4rXG4rXHRyZXQgPSBhYzMwMF9lcGh5X2N0bF93cml0ZShwcml2LCBBQzMwMF9FUEhZX0NPTkZJR19SRUcsXG4rXHRcdFx0XHQgICBhYzMwMF9lcGh5X2N0bF9jb25maWcocHJpdikpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Bvd2VyX29mZjpcbitcdGFjMzAwX2VwaHlfY3RsX2Rpc2FibGUocHJpdik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBhYzMwMF9lcGh5X2Nsa19wdXQodm9pZCAqZGF0YSlcbit7XG4rXHRjbGtfcHV0KGRhdGEpO1xuK31cbitcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBhYzMwMF9lcGh5X2N0bCAqcHJpdjtcbitcdHVuc2lnbmVkIGxvbmcgY2xrX3JhdGU7XG4rXHR1OCBiZ3NfZWZmdXNlX2NvZGU7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5hZGRyIFx1MDAzZSBGSUVMRF9NQVgoQUMzMDBfUEFDS0FHRV9QSFlfQUREUl9NQVNLKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJsaW5rIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgcGFja2FnZSByYW5nZVxcblwiKSk7XG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcbitcdHByaXYtXHUwMDNldmNjID0gZGV2bV9vZl9yZWd1bGF0b3JfZ2V0KGRldiwgcGFja2FnZV9ub2RlLCBcInZjY1wiKTtcbitcdGlmIChJU19FUlIocHJpdi1cdTAwM2V2Y2MpKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihwcml2LVx1MDAzZXZjYyksXG4rXHRcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2Ugc3VwcGx5XFxuXCIpKTtcbitcbitcdHByaXYtXHUwMDNlY2xrID0gb2ZfY2xrX2dldChwYWNrYWdlX25vZGUsIDApO1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZWNsaykpXG4rXHRcdHJldHVybiBFUlJfUFRSKGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHByaXYtXHUwMDNlY2xrKSxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBnZXQgaW5wdXQgY2xvY2tcXG5cIikpO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWMzMDBfZXBoeV9jbGtfcHV0LCBwcml2LVx1MDAzZWNsayk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuK1xuK1x0cmV0ID0gZGV2bV9jbGtfcmF0ZV9leGNsdXNpdmVfZ2V0KGRldiwgcHJpdi1cdTAwM2VjbGspO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbitcdFx0XHRcdFx0ICAgICBcImZhaWxlZCB0byBsb2NrIGNsb2NrIHJhdGVcXG5cIikpO1xuK1xuK1x0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUocHJpdi1cdTAwM2VjbGspO1xuK1x0c3dpdGNoIChjbGtfcmF0ZSkge1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI0X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNF9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI1X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yNV9NSFo7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQzMwMF9FUEhZX0NMS19SQVRFXzI3X01IWjpcbitcdFx0cHJpdi1cdTAwM2VzeXNfY29udHJvbCA9IEFDMzAwX0VQSFlfQ0xLX1NFTF8yN19NSFo7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIEVSUl9QVFIoZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJ1bnN1cHBvcnRlZCBpbnB1dCBjbG9jayByYXRlICVsdSBIelxcblwiLFxuK1x0XHRcdFx0XHQgICAgIGNsa19yYXRlKSk7XG4rXHR9XG4rXHRwcml2LVx1MDAzZXN5c19jb250cm9sIHw9IEFDMzAwX1NZU19DT05UUk9MX0VOQUJMRV9CSVRTO1xuK1xuK1x0LyogVGhlIHZlbmRvciBkcml2ZXIgc3VwcGxpZXMgbm8gdHJhbnNmZXIgZnVuY3Rpb24gYmV5b25kIHRoaXMgb2Zmc2V0LiAqL1xuK1x0YmdzX2VmZnVzZV9jb2RlID0gKGNhbGlicmF0aW9uICsgQUMzMDBfRVBIWV9CR1NfRUZGVVNFX09GRlNFVCkgXHUwMDI2XG4rXHRcdFx0ICAgRklFTERfTUFYKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLKTtcbitcdHByaXYtXHUwMDNlZXBoeV9jb25maWcgPVxuK1x0XHRGSUVMRF9QUkVQKEFDMzAwX0VQSFlfQkdTX0VGRlVTRV9NQVNLLCBiZ3NfZWZmdXNlX2NvZGUpO1xuK1x0LyogRVBIWV9NT0RFIGFuZCBCSVNUX0NMS19FTiBzdGF5IGNsZWFyIGZvciBub3JtYWwgb3BlcmF0aW9uLiAqL1xuK1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnBvd2VyX29uID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb247XG4rXHRwcml2LVx1MDAzZWNvbnRyb2wucG93ZXJfb2ZmID0gYWMzMDBfZXBoeV9jdGxfcG93ZXJfb2ZmO1xuK1x0cHJpdi1cdTAwM2Vjb250cm9sLnNldF9pbnRlcmZhY2UgPSBhYzMwMF9lcGh5X2N0bF9zZXRfaW50ZXJmYWNlO1xuK1x0LyogTUlJIGlzIHRoZSByZXNldCBkZWZhdWx0IHVzZWQgdW50aWwgdGhlIE1BQyBzdXBwbGllcyBpdHMgaW50ZXJmYWNlLiAqL1xuK1x0cHJpdi1cdTAwM2VpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1xuK1x0cmV0dXJuIFx1MDAyNnByaXYtXHUwMDNlY29udHJvbDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45OGYyYjBiNjM5MDk2XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jXG5AQCAtMCwwICsxLDUzNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIFgtUG93ZXJzIEFDMjAwL0FDMzAwIEV0aGVybmV0IFBIWSBkcml2ZXJcbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAxOSBKZXJuZWogU2tyYWJlYyBcdTAwM2NqZXJuZWouc2tyYWJlY0BnbWFpbC5jb21cdTAwM2VcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgSmFtZXMgSGlsbGlhcmQgXHUwMDNjamFtZXMuaGlsbGlhcmQxQGdtYWlsLmNvbVx1MDAzZVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZW0tY29uc3VtZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiLi4vcGh5bGliLmhcIlxuKyNpbmNsdWRlIFwiYWN4MDAuaFwiXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0lEXHRcdFx0XHQweDAwNDQxNDAwXG4rXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19DQUxJQlJBVElPTl9NQVNLXHRHRU5NQVNLKDMsIDApXG4rI2RlZmluZSBBQ1gwMF9FUEhZX0NPTkZJR19WQVJJQU5UX0FDMzAwXHRcdEJJVCg4KVxuKyNkZWZpbmUgQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTE9XXHRCSVQoOSlcbitcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX1JFR1x0XHRcdDB4MWZcbisjZGVmaW5lIEFDWDAwX1BBR0VfU0VMRUNUX01BU0tcdFx0XHRHRU5NQVNLKDEyLCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRV8wXHRcdFx0XHQwXG4rI2RlZmluZSBBQ1gwMF9QQUdFXzFcdFx0XHRcdDFcbisjZGVmaW5lIEFDWDAwX1BBR0VfMlx0XHRcdFx0MlxuKyNkZWZpbmUgQUNYMDBfUEFHRV82XHRcdFx0XHQ2XG4rI2RlZmluZSBBQ1gwMF9QQUdFXzhcdFx0XHRcdDhcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UwX1hNSUlfUlhfQ0xPQ0tfSU5WRVJUXHRCSVQoMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMF9NRElfTU9ERV9NQVNLXHRcdEdFTk1BU0soMSwgMClcbisjZGVmaW5lIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE9cdFx0MlxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTFfQVBTX0NPTlRST0xfUkVHXHRcdDB4MTJcbisjZGVmaW5lIEFDWDAwX1BBR0UxX0FQU19ESVNBQkxFRF80U19WQUxVRVx0MHg0ODI0XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9VQVBTX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0UxX1VBUFNfRU5BQkxFXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0NPTlRST0xfUkVHXHQweDE3XG4rI2RlZmluZSBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFXHRCSVQoMylcbitcbisjZGVmaW5lIEFDWDAwX1BBR0UyX1RYX0RBVEFfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX01BU0tcdFx0R0VOTUFTSygxNCwgMTIpXG4rI2RlZmluZSBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfREVGQVVMVFx0MFxuK1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQURDX0NPTlRST0xfUkVHXHRcdDB4MTBcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUVcdDB4NTUyM1xuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHXHRcdDB4MTNcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9SWF9DT05UUk9MX1ZBTFVFXHRcdDB4ZjAwMFxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9DT05UUk9MX1JFR1x0MHgxNFxuKyNkZWZpbmUgQUMyMDBfUEFHRTZfQUZFX0VRX1JYX0RFVEVDVF9WQUxVRVx0MHg3MDhmXG4rI2RlZmluZSBBQzMwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFXHQweDcwOGJcbisjZGVmaW5lIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRSAweDc4MDlcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX1JFR1x0XHRcdDB4MTVcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwME1fTUFTS1x0XHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfMTBNX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoXzEwMG0sIF8xMG0pIFxcXG4rXHQoRklFTERfUFJFUChBQ1gwMF9QQUdFNl9UWF9MRVZFTF8xMDBNX01BU0ssIChfMTAwbSkpIHwgXFxcbitcdCBGSUVMRF9QUkVQKEFDWDAwX1BBR0U2X1RYX0xFVkVMXzEwTV9NQVNLLCAoXzEwbSkpKVxuKyNkZWZpbmUgQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRSBcXFxuK1x0QUNYMDBfUEFHRTZfVFhfTEVWRUxfVkFMVUUoMHgxNSwgMHgzMClcbisjZGVmaW5lIEFDWDAwX1BBR0U2X1RYX0xFVkVMX0xPV19DQUxfVkFMVUUgXFxcbitcdEFDWDAwX1BBR0U2X1RYX0xFVkVMX1ZBTFVFKDB4MzUsIDB4MzMpXG4rXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BRkVfQ09OVFJPTF9SRUdcdFx0MHgxOFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQUZFX0NPTlRST0xfVkFMVUVcdFx0MHgwMGJjXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFR1x0XHQweDFkXG4rI2RlZmluZSBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9UWF9MRVZFTF9BREpVU1RfQllQQVNTIEJJVCgxMSlcbisjZGVmaW5lIEFDWDAwX1BBR0U4X0FVVE9fQ0FMX0xPV19DQUxfT1BBUVVFX0JJVFNcdDB4MDA0NFxuKyNkZWZpbmUgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFIFxcXG4rXHQoQUNYMDBfUEFHRThfQVVUT19DQUxfVFhfTEVWRUxfQURKVVNUX0JZUEFTUyB8IFxcXG4rXHQgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX0NBTF9PUEFRVUVfQklUUylcbitcbisvKlxuKyAqIEFub3RoZXIgaW50ZWdyYXRpb24gb2YgdGhpcyBleGFjdC1JRCBQSFkgZG9jdW1lbnRzIGl0cyBkaWdpdGFsIHZlbmRvclxuKyAqIHJlZ2lzdGVyIG1hcCwgd2hpY2ggYWxzbyBtYXRjaGVzIHRoZSBvYnNlcnZlZCBBQ3gwMCByZXNldCB2YWx1ZXMuIFRoZSBBQ3gwMFxuKyAqIGFuYWxvZy1wYWdlIGZpZWxkIGVuY29kaW5ncyByZW1haW4gdW5wdWJsaXNoZWQsIHNvIGtlZXAgdGhvc2UgYXMgb3BhcXVlXG4rICogdmVuZG9yIGluaXRpYWxpemF0aW9uIHZhbHVlcyBpbnN0ZWFkIG9mIGludmVudGluZyBiaXQgZGVmaW5pdGlvbnMuXG4rICovXG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfcHJpdiB7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbDtcbitcdGJvb2wgaXNfYWMzMDA7XG4rXHRib29sIHVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nO1xuK1x0Ym9vbCB4bWlpX3J4X2Nsb2NrX2ludmVydGVkO1xuK307XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgQUNYMDBfUEFHRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gRklFTERfR0VUKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHJldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdHJldHVybiBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0VfU0VMRUNUX1JFRyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0VfU0VMRUNUX01BU0ssIHBhZ2UpKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24oc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29uKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZXBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYoc3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdilcbit7XG4rXHRyZXR1cm4gcHJpdi1cdTAwM2Vjb250cm9sLVx1MDAzZXBvd2VyX29mZihwcml2LVx1MDAzZWNvbnRyb2wpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlY29udHJvbC1cdTAwM2VzZXRfaW50ZXJmYWNlKHByaXYtXHUwMDNlY29udHJvbCxcbitcdFx0XHRcdFx0ICAgIHBoeWRldi1cdTAwM2VpbnRlcmZhY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY3gwMF9lcGh5X2NvbnRyb2xfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBkYXRhO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vZmYocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRwaHlkZXZfd2Fybihwcml2LVx1MDAzZXBoeWRldixcbitcdFx0XHQgICAgXCJmYWlsZWQgdG8gcG93ZXIgb2ZmIGNvbnRyb2wgYmxvY2s6ICVwZVxcblwiLFxuK1x0XHRcdCAgICBFUlJfUFRSKHJldCkpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYoc3RydWN0IGRldmljZV9ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgICBjb25zdCBjaGFyICpuYW1lLCB1MTYgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBudm1lbV9jZWxsICpjZWxsO1xuK1x0c2l6ZV90IGk7XG4rXHRzaXplX3QgbGVuO1xuK1x0dTggKmJ1ZjtcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0Y2VsbCA9IG9mX252bWVtX2NlbGxfZ2V0KG5vZGUsIG5hbWUpO1xuK1x0aWYgKElTX0VSUihjZWxsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2VsbCk7XG4rXG4rXHRidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgXHUwMDI2bGVuKTtcbitcdG52bWVtX2NlbGxfcHV0KGNlbGwpO1xuK1x0aWYgKElTX0VSUihidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidWYpO1xuK1x0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBzaXplb2YoKnZhbHVlKSkge1xuK1x0XHRrZnJlZShidWYpO1xuK1x0XHRyZXR1cm4gbGVuID8gLUVSQU5HRSA6IC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkrKylcbitcdFx0dmFsIHw9ICh1MTYpYnVmW2ldIFx1MDAzY1x1MDAzYyAoOCAqIGkpO1xuK1x0a2ZyZWUoYnVmKTtcbitcdCp2YWx1ZSA9IHZhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgYWN4MDBfZXBoeV9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuK1x0Ym9vbCBzZWxlY3RhYmxlO1xuK1x0Ym9vbCBmaXhlZF9hYzMwMDtcbitcdGJvb2wgaGFzX2NvbmZpZ3VyYXRpb247XG4rXHR1OCBjYWxpYnJhdGlvbjtcbitcdHUzMiBiYXNlX2FkZHI7XG4rXHR1MTYgY29uZmlndXJhdGlvbiA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFwiZXRoZXJuZXQtcGh5LXBhY2thZ2VcIikpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJQSFkgaXMgbm90IGluIGFuIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBhY2thZ2Vfbm9kZSwgXCJyZWdcIiwgXHUwMDI2YmFzZV9hZGRyKTtcbitcdGlmIChyZXQgfHwgYmFzZV9hZGRyICE9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJwYWNrYWdlIGFuZCBsaW5rIFBIWSBhZGRyZXNzZXMgZGlmZmVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHNlbGVjdGFibGUgPSBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdCAgICAgXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRmaXhlZF9hYzMwMCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0ICAgICAgXCJ4LXBvd2VycyxhYzMwMC1lcGh5LXBhY2thZ2VcIik7XG4rXHRpZiAoIXNlbGVjdGFibGUgXHUwMDI2XHUwMDI2ICFmaXhlZF9hYzMwMCBcdTAwMjZcdTAwMjZcbitcdCAgICAhb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiKSkge1xuK1x0XHRyZXQgPSBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICBcInVuc3VwcG9ydGVkIEV0aGVybmV0IFBIWSBwYWNrYWdlXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcbitcdGhhc19jb25maWd1cmF0aW9uID1cbitcdFx0b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKHBhY2thZ2Vfbm9kZSwgXCJudm1lbS1jZWxsLW5hbWVzXCIsXG4rXHRcdFx0XHRcdCBcImNvbmZpZ3VyYXRpb25cIikgXHUwMDNlPSAwO1xuK1x0aWYgKGhhc19jb25maWd1cmF0aW9uKSB7XG4rXHRcdHJldCA9IGFjeDAwX2VwaHlfcmVhZF9udm1lbV91MTYocGFja2FnZV9ub2RlLCBcImNvbmZpZ3VyYXRpb25cIixcbitcdFx0XHRcdFx0XHRcdTAwMjZjb25maWd1cmF0aW9uKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWFkIHBhY2thZ2UgY29uZmlndXJhdGlvblxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fSBlbHNlIGlmIChzZWxlY3RhYmxlIHx8IGZpeGVkX2FjMzAwKSB7XG4rXHRcdHJldCA9IGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgIFwicGFja2FnZSBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkXFxuXCIpO1xuK1x0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdH1cbitcbitcdGlmIChzZWxlY3RhYmxlKSB7XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgPVxuK1x0XHRcdGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRwcml2LVx1MDAzZWlzX2FjMzAwID0gZml4ZWRfYWMzMDA7XG4rXHRcdGlmIChoYXNfY29uZmlndXJhdGlvbiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX1ZBUklBTlRfQUMzMDApICE9XG4rXHRcdCAgICBwcml2LVx1MDAzZWlzX2FjMzAwKSB7XG4rXHRcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICBcImNvbmZpZ3VyYXRpb24gZG9lcyBub3QgbWF0Y2ggcGFja2FnZVxcblwiKTtcbitcdFx0XHRnb3RvIG91dF9wdXRfbm9kZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0Y2FsaWJyYXRpb24gPSBGSUVMRF9HRVQoQUNYMDBfRVBIWV9DT05GSUdfQ0FMSUJSQVRJT05fTUFTSyxcbitcdFx0XHRcdGNvbmZpZ3VyYXRpb24pO1xuK1xuK1x0cHJpdi1cdTAwM2V1c2VfbG93X2NhbGlicmF0aW9uX3R1bmluZyA9XG4rXHRcdHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2XG4rXHRcdCEhKGNvbmZpZ3VyYXRpb24gXHUwMDI2IEFDWDAwX0VQSFlfQ09ORklHX0NBTElCUkFUSU9OX0xPVyk7XG4rXHRwcml2LVx1MDAzZXhtaWlfcnhfY2xvY2tfaW52ZXJ0ZWQgPVxuK1x0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0ICAgICAgXCJ4LXBvd2Vycyx4bWlpLXJ4LWNsb2NrLWludmVydGVkXCIpO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDApXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMzMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBjYWxpYnJhdGlvbik7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlY29udHJvbCA9XG4rXHRcdFx0YWMyMDBfZXBoeV9jdGxfY3JlYXRlKHBoeWRldiwgcGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHQgICAgICBoYXNfY29uZmlndXJhdGlvbixcbitcdFx0XHRcdFx0ICAgICAgY2FsaWJyYXRpb24pO1xuK1x0cmV0ID0gUFRSX0VSUl9PUl9aRVJPKHByaXYtXHUwMDNlY29udHJvbCk7XG4rXG4rb3V0X3B1dF9ub2RlOlxuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9kaXNhYmxlX2F1dG9ub21vdXNfZWVlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0cmV0dXJuIHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzEsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHRBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfRU5BQkxFLCAwKTtcbit9XG4rXG4rc3RhdGljIGludCBhY3gwMF9lcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWRldi1cdTAwM2VvZl9ub2RlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2LVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbitcdHJldCA9IGFjeDAwX2VwaHlfaW5pdF9wYWNrYWdlKHBoeWRldiwgcHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXByaXYgPSBwcml2O1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgYWN4MDBfZXBoeV9jb250cm9sX3JlbGVhc2UsIHByaXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0ICAgICBcImZhaWxlZCB0byBwb3dlciBvbiBjb250cm9sIGJsb2NrXFxuXCIpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfc2V0X2ludGVyZmFjZShwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfY29udHJvbF9wb3dlcl9vbihwcml2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBBQ3gwMCBjYW4gYWNrbm93bGVkZ2UgcmVzZXQgaW4gcG93ZXItZG93biB3aXRob3V0IHJlc3RhcnRpbmcuICovXG4rXHRyZXQgPSBnZW5waHlfcmVzdW1lKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGdlbnBoeV9zb2Z0X3Jlc2V0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdHUxNiBhZmVfZXFfcnhfZGV0ZWN0ID0gcHJpdi1cdTAwM2Vpc19hYzMwMCA/XG4rXHRcdEFDMzAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfVkFMVUUgOlxuK1x0XHRBQzIwMF9QQUdFNl9BRkVfRVFfUlhfREVURUNUX1ZBTFVFO1xuK1x0dTE2IHR4X2xldmVsX3ZhbHVlID0gQUNYMDBfUEFHRTZfVFhfTEVWRUxfREVGQVVMVF9WQUxVRTtcbitcdHUxNiBnbG9iYWxfY29uZmlnO1xuK1x0aW50IG9sZHBhZ2U7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z2xvYmFsX2NvbmZpZyA9IEZJRUxEX1BSRVAoQUNYMDBfUEFHRTBfTURJX01PREVfTUFTSyxcbitcdFx0XHRcdCAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX0FVVE8pO1xuK1x0aWYgKHByaXYtXHUwMDNleG1paV9yeF9jbG9ja19pbnZlcnRlZClcbitcdFx0Z2xvYmFsX2NvbmZpZyB8PSBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVDtcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBBQ1gwMF9QQUdFXzAsXG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX0dMT0JBTF9DT05GSUdfUkVHLFxuK1x0XHRcdCAgICAgICBBQ1gwMF9QQUdFMF9YTUlJX1JYX0NMT0NLX0lOVkVSVCB8XG4rXHRcdFx0ICAgICAgIEFDWDAwX1BBR0UwX01ESV9NT0RFX01BU0ssIGdsb2JhbF9jb25maWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChwcml2LVx1MDAzZWlzX2FjMzAwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXVzZV9sb3dfY2FsaWJyYXRpb25fdHVuaW5nKSB7XG4rXHRcdGFmZV9lcV9yeF9kZXRlY3QgPVxuK1x0XHRcdEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfTE9XX0NBTF9WQUxVRTtcbitcdFx0dHhfbGV2ZWxfdmFsdWUgPSBBQ1gwMF9QQUdFNl9UWF9MRVZFTF9MT1dfQ0FMX1ZBTFVFO1xuK1x0fVxuK1xuK1x0b2xkcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfMSk7XG4rXHRpZiAob2xkcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFMV9BUFNfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBBQ1gwMF9QQUdFMV9BUFNfRElTQUJMRURfNFNfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTFfVUFQU19DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMV9VQVBTX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBBQ1gwMF9QQUdFMV9JTlRFTExJR0VOVF9FRUVfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICAgQUNYMDBfUEFHRTFfSU5URUxMSUdFTlRfRUVFX0VOQUJMRSwgMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgQUNYMDBfUEFHRTJfVFhfREFUQV9DT05UUk9MX1JFRyxcbitcdFx0XHQgICBBQ1gwMF9QQUdFMl8xMEJUX0ZJUl9TRUxFQ1RfTUFTSyxcbitcdFx0XHQgICBGSUVMRF9QUkVQKEFDWDAwX1BBR0UyXzEwQlRfRklSX1NFTEVDVF9NQVNLLFxuK1x0XHRcdFx0ICAgICAgQUNYMDBfUEFHRTJfMTBCVF9GSVJfU0VMRUNUX0RFRkFVTFQpKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IGFjeDAwX2VwaHlfd3JpdGVfcGFnZShwaHlkZXYsIEFDWDAwX1BBR0VfNik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U2X0FGRV9FUV9SWF9ERVRFQ1RfQ09OVFJPTF9SRUcsXG4rXHRcdFx0ICBhZmVfZXFfcnhfZGV0ZWN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfUkVHLFxuK1x0XHRcdCAgQUNYMDBfUEFHRTZfQUZFX1JYX0NPTlRST0xfVkFMVUUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFNl9BRENfQ09OVFJPTF9SRUcsXG4rXHRcdFx0XHQgIEFDWDAwX1BBR0U2X0FEQ19DT05UUk9MX0xPV19DQUxfVkFMVUUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gb3V0X3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgQUNYMDBfUEFHRTZfVFhfTEVWRUxfUkVHLCB0eF9sZXZlbF92YWx1ZSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UocGh5ZGV2LCBBQ1gwMF9QQUdFXzgpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKHByaXYtXHUwMDNlaXNfYWMzMDAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNldXNlX2xvd19jYWxpYnJhdGlvbl90dW5pbmcpIHtcbitcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBBQ1gwMF9QQUdFOF9BVVRPX0NBTF9DT05UUk9MX1JFRyxcbitcdFx0XHRcdCAgQUNYMDBfUEFHRThfQVVUT19DQUxfTE9XX1ZBTFVFKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1JFRyxcbitcdFx0XHQgIEFDWDAwX1BBR0U4X0FGRV9DT05UUk9MX1ZBTFVFKTtcbitcbitvdXRfcmVzdG9yZV9wYWdlOlxuK1x0cmV0ID0gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZHBhZ2UsIHJldCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUmVzdG9yZSB0aGUgc3RhbmRhcmQgRUVFIHBvbGljeSByZXRhaW5lZCBieSBwaHlsaWIgYWNyb3NzIHJlc2V0cy4gKi9cbitcdHJldHVybiBnZW5waHlfYzQ1X2FuX2NvbmZpZ19lZWVfYW5lZyhwaHlkZXYpO1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfcG93ZXJfb25fYW5kX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBhY3gwMF9lcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X3NldF9pbnRlcmZhY2UocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb24ocHJpdik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3Jlc3VtZShwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogUG93ZXJpbmcgb2ZmIHRoZSBjb250cm9sIGJsb2NrIGxvc2VzIHRoZSB2ZW5kb3ItcGFnZSBzdGF0ZS4gKi9cbitcdHJldHVybiBhY3gwMF9lcGh5X2NvbmZpZ19pbml0KHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWN4MDBfZXBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IGFjeDAwX2VwaHlfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IHJlc3VtZV9yZXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZ2VucGh5X3N1c3BlbmQocGh5ZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBhY3gwMF9lcGh5X2NvbnRyb2xfcG93ZXJfb2ZmKHByaXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRyZXN1bWVfcmV0ID0gYWN4MDBfZXBoeV9wb3dlcl9vbl9hbmRfcmVzdW1lKHBoeWRldik7XG4rXHRcdGlmIChyZXN1bWVfcmV0KVxuK1x0XHRcdHBoeWRldl93YXJuKHBoeWRldixcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byByZWNvdmVyIGZyb20gc3VzcGVuZCBlcnJvcjogJXBlXFxuXCIsXG4rXHRcdFx0XHQgICAgRVJSX1BUUihyZXN1bWVfcmV0KSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYpXG4re1xuK1x0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZTtcbitcdGJvb2wgbWF0Y2g7XG4rXG4rXHRpZiAoIWdlbnBoeV9tYXRjaF9waHlfZGV2aWNlKHBoeWRldiwgcGh5ZHJ2KSB8fCAhbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBSSzYzMCByZXBvcnRzIHRoZSBzYW1lIFBIWSBJRCwgc28gYWxzbyBtYXRjaCB0aGUgcGFja2FnZSBpZGVudGl0eS4gKi9cbitcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XG4rXHRpZiAoIXBhY2thZ2Vfbm9kZSlcbitcdFx0cmV0dXJuIDA7XG4rXHRtYXRjaCA9IG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhY2thZ2Vfbm9kZSxcbitcdFx0XHRcdFx0XCJ4LXBvd2VycyxhYzIwMC1lcGh5LXBhY2thZ2VcIikgfHxcbitcdFx0b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFja2FnZV9ub2RlLFxuK1x0XHRcdFx0XHRcIngtcG93ZXJzLGFjMzAwLWVwaHktcGFja2FnZVwiKSB8fFxuK1x0XHRvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwYWNrYWdlX25vZGUsXG4rXHRcdFx0XHRcdFwieC1wb3dlcnMsYWN4MDAtZXBoeS1wYWNrYWdlXCIpO1xuK1x0b2Zfbm9kZV9wdXQocGFja2FnZV9ub2RlKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFjeDAwX2VwaHlfZHJpdmVyW10gPSB7XG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChBQ1gwMF9FUEhZX0lEKSxcbitcdFx0Lm5hbWUgPSBcIlgtUG93ZXJzIEFDMjAwL0FDMzAwIEVQSFlcIixcbitcdFx0Lm1hdGNoX3BoeV9kZXZpY2UgPSBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2UsXG4rXHRcdC5wcm9iZSA9IGFjeDAwX2VwaHlfcHJvYmUsXG4rXHRcdC5yZWFkX3BhZ2UgPSBhY3gwMF9lcGh5X3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2UgPSBhY3gwMF9lcGh5X3dyaXRlX3BhZ2UsXG4rXHRcdC5zb2Z0X3Jlc2V0ID0gYWN4MDBfZXBoeV9zb2Z0X3Jlc2V0LFxuK1x0XHQuY29uZmlnX2luaXQgPSBhY3gwMF9lcGh5X2NvbmZpZ19pbml0LFxuK1x0XHQuZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSA9IGFjeDAwX2VwaHlfZGlzYWJsZV9hdXRvbm9tb3VzX2VlZSxcbitcdFx0LnN1c3BlbmQgPSBhY3gwMF9lcGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWUgPSBhY3gwMF9lcGh5X3Jlc3VtZSxcbitcdH0sXG4rfTtcbittb2R1bGVfcGh5X2RyaXZlcihhY3gwMF9lcGh5X2RyaXZlcik7XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBhY3gwMF9lcGh5X3RibFtdID0ge1xuK1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoQUNYMDBfRVBIWV9JRCkgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBhY3gwMF9lcGh5X3RibCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkphbWVzIEhpbGxpYXJkIFx1MDAzY2phbWVzLmhpbGxpYXJkMUBnbWFpbC5jb21cdTAwM2VcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5oIGIvZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjdkZjYwODRjN2E3NzJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmhcbkBAIC0wLDAgKzEsMjggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rI2lmbmRlZiBfX0RSSVZFUlNfTkVUX1BIWV9YUE9XRVJTX0FDWDAwX0hcbisjZGVmaW5lIF9fRFJJVkVSU19ORVRfUEhZX1hQT1dFUlNfQUNYMDBfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjZGVmaW5lIEFDMzAwX0VQSFlfQ09OVFJPTF9BRERSX09GRlNFVFx0MTZcbitcbitzdHJ1Y3QgZGV2aWNlX25vZGU7XG4rXG4rc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCB7XG4rXHRpbnQgKCpwb3dlcl9vbikoc3RydWN0IGFjeDAwX2VwaHlfY29udHJvbCAqY29udHJvbCxcbitcdFx0XHR1bnNpZ25lZCBpbnQgcGh5X2FkZHIpO1xuK1x0aW50ICgqcG93ZXJfb2ZmKShzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpjb250cm9sKTtcbitcdGludCAoKnNldF9pbnRlcmZhY2UpKHN0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKmNvbnRyb2wsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTtcbit9O1xuK1xuK3N0cnVjdCBhY3gwMF9lcGh5X2NvbnRyb2wgKlxuK2FjMjAwX2VwaHlfY3RsX2NyZWF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHQgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhY2thZ2Vfbm9kZSxcbitcdFx0ICAgICAgYm9vbCBoYXNfY2FsaWJyYXRpb24sIHU4IGNhbGlicmF0aW9uKTtcbitzdHJ1Y3QgYWN4MDBfZXBoeV9jb250cm9sICpcbithYzMwMF9lcGh5X2N0bF9jcmVhdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0ICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGUsIHU4IGNhbGlicmF0aW9uKTtcbitcbisjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjM1LjY4NTkyNjM1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NjQ4OTI1MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogWC1Qb3dlcnMgQUMyMDAvQUMzMDAgRXRoZXJuZXQgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCB0aGlzIG5ldyBFdGhlcm5ldCBQSFkgZHJpdmVyIGZvciBYLVBvd2VycyBBQzIwMCBhbmQgQUMzMDAgY29tcGFuaW9uIElDcy4gSXQncyBhbiBFdGhlcm5ldCBQSFksIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBUaGVzZSBQSFkgZHJpdmVycyB1c3VhbGx5IGdldCBwcm9iZWQgdmlhIHRoZSBNRElPIGJ1cywgcmlnaHQ/IEluIFFFTVUsIHdlIGNhbiwgaW4gdGhlb3J5LCBlbXVsYXRlIGFuIE1ESU8gYnVzLCBidXQgaXQgbmVlZHMgdG8gYmUgc3VwcG9ydGVkIGJ5IHRoZSBlbXVsYXRlZCBNQUMsIG9yIHdlIGNhbiB1c2UgYSBkdW1teSBNRElPIGJ1cyBpZiBuZWNlc3NhcnkuIE1vcmUgc3BlY2lmaWNhbGx5LCBQSFkgZHJpdmVycyB0eXBpY2FsbHkgb25seSBwcm9iZSBpZiB0aGVyZSdzIGEgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBub2RlIG9yIGlmIHRoZSBQSFkgSUQgbWF0Y2hlcyBvbiBhbiBNRElPIGJ1cy5cblxuV2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21lIHRyaWNrcyB1cCBpdHMgc2xlZXZlPyBJIHNlZW0gdG8gcmVjYWxsIGl0IGNhbiBpbmplY3QgTURJTyBkZXZpY2VzIGlmIHdlIGNhbiBjcmVhdGUgYW4gTURJTyBidXMsIG1heWJlIHRocm91Z2ggYW4gZW11bGF0ZWQgTklDLiBEb2VzIHN5emthbGxlciBldmVuICpmdXp6KiBQSFkgZHJpdmVycz8gWWVhaCwgaXQgZG9lcywgb3IgYXQgbGVhc3QgaXQgY2FuIHRyaWdnZXIgYSBwcm9iZSBpZiB0aGUgZHJpdmVyIGlzIGVuYWJsZWQgYW5kIE1ESU8gZGV2aWNlcyBleGlzdC4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgTURJTyBvciBQSFktcmVsYXRlZCB0aGluZ3MgaW4gdGhlIHN5emthbGxlciBkZWZpbml0aW9ucy4gQnV0IHdhaXQsIEkgbmVlZCB0byByZW1lbWJlciB0aGUgcHJvbXB0OiBpZiBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhlbiBpdCBpcyBub3QgV29ydGhGdXp6aW5nLlxuXG5Ib3cgY2FuIHRoaXMgZHJpdmVyIGJlIHByb2JlZCBpbiBRRU1VPyBXZSdkIGlkZWFsbHkgbmVlZCBhIGRldmljZSB0cmVlLCBhbmQgaXQncyBub3QgZWFzeSB0byBqdXN0IGluamVjdCAqYW55KiBhcmJpdHJhcnkgZGV2aWNlIHRyZWUgbm9kZSBhdCBydW50aW1lIGluIFFFTVUgd2l0aG91dCBEVCBvdmVybGF5cy4gU3l6a2FsbGVyICpoYXMqIHNvbWUgRFQgb3ZlcmxheSBzdXBwb3J0LCBidXQgaXQncyBsaW1pdGVkLCBhbmQgSSBkb3VidCBpdCdzIGZsZXhpYmxlIGVub3VnaCBmb3IgdGhpcy4gSG93ZXZlciwgbGV0J3MgbG9vayBhdCB0aGUgY29kZSB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWFibGUgb25seSB3aXRoIERULiBJIG5lZWQgdG8gY2hlY2sgaG93IGBhY3gwMF9lcGh5X21hdGNoX3BoeV9kZXZpY2VgIHdvcmtzLlxuXG5BaCBoYSEgYGFjeDAwX2VwaHlfbWF0Y2hfcGh5X2RldmljZWAgKmV4cGxpY2l0bHkqIHJlcXVpcmVzIGEgZGV2aWNlIHRyZWUgbm9kZSBhbmQgdGhhdCB0aGUgcGFyZW50IG5vZGUgaXMgY29tcGF0aWJsZSB3aXRoIGBcIngtcG93ZXJzLGFjMjAwLWVwaHktcGFja2FnZVwiYCBvciBzaW1pbGFyLiBXaXRob3V0IHRoYXQgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZSwgdGhpcyB0aGluZyB3aWxsICpuZXZlciogcHJvYmUuIENhbiBzeXprYWxsZXIgaW5qZWN0IG5vZGVzIHdpdGggdGhlc2Ugc3BlY2lmaWMgY29tcGF0aWJsZXM/IE1heWJlLCBidXQgcHJvYmFibHkgbm90IGVhc2lseTsgRFQgb3ZlcmxheXMgYXJlIHRyaWNreS5cblxuV2FpdCBhIHNlY29uZCwgZXZlbiBpZiBpdCAqY291bGQqIGJlIHByb2JlZCwgdGhpcyBpcyBhICpoYXJkd2FyZS1zcGVjaWZpYyogUEhZIGRyaXZlciwgbWVhbnQgZm9yIHRob3NlIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZXNlIGFyZSBwaHlzaWNhbCBjaGlwcyEgVGhleSBjb21tdW5pY2F0ZSB2aWEgTURJTyBhbmQsIGZvciBBQzIwMCwgSTJDLiBJcyBpdCBldmVuIHdvcnRoIGZ1enppbmcgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgbGlrZSB0aGlzPyBJdCdzIG5vdCBsaWtlbHkgdG8gaGF2ZSBzb2Z0d2FyZSBlbXVsYXRpb24uIExldCdzIGNoZWNrIGlmIHRoZXJlJ3MgSTJDIG9yIE1ESU8gZW11bGF0aW9uIGluIFFFTVUuIFVubGlrZWx5LlxuXG5IYW5nIG9uLiBgYWMyMDBfZXBoeV9jdGxfY3JlYXRlYC4uLiBJdCB1c2VzIGBvZl9wYXJzZV9waGFuZGxlYCBhbmQgYG9mX2ZpbmRfaTJjX2RldmljZV9ieV9ub2RlYC4gSXQgKnJlcXVpcmVzKiBhbiBJMkMgY2xpZW50IGRldmljZSB0byBleGlzdCBhbmQgYmUgbGlua2VkLiBUaGlzIGlzICpkZWVwbHkqIHRpZWQgdG8gdGhlIHNwZWNpZmljIGhhcmR3YXJlOiBBbGx3aW5uZXIgU29DcywgQUMyMDAvQUMzMDAgUE1JQ3MsIGFsbCB0aGF0LiBUaGlzIHdpbGwgYmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50ICp3aXRob3V0KiB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBvciBjb21wbGV4IERUIG92ZXJsYXlzIHRoYXQgYWxzbyBpbnN0YW50aWF0ZSB0aGUgSTJDIGRldmljZXMgYW5kIG1vY2sgdGhlaXIgcmVnbWFwcy5cblxuT2theSwgbGV0J3MgbWFrZSBzdXJlIGl0J3MgKnJlYWxseSogdW5yZWFjaGFibGUuIExldCdzIGxpc3QgdGhlIGRlcGVuZGVuY2llczpcblxuMS4gIEEgZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhlIFBIWSB3aXRoIGEgcGFyZW50IG5vZGUgaGF2aW5nIGBjb21wYXRpYmxlID0gXCJ4LXBvd2VycyxhY3gwMC1lcGh5LXBhY2thZ2VcImAuXG4yLiAgRm9yIEFDMjAwLCBhbiBJMkMgZGV2aWNlIG5vZGUgcmVmZXJlbmNlZCBieSBgeC1wb3dlcnMsYWMyMDBgLCB3aGljaCBtdXN0IGhhdmUgYSBib3VuZCBkcml2ZXIgcHJvdmlkaW5nIGEgcmVnbWFwLlxuMy4gIEZvciBBQzMwMCwgYSBjbG9jayByZWZlcmVuY2VkIGJ5IGBjbG9ja3NgIHByb3BlcnR5LlxuNC4gIEEgcmVndWxhdG9yIHJlZmVyZW5jZWQgYnkgYHZjYy1zdXBwbHlgLlxuNS4gIEFuIE5WTUVNIGNlbGwgcmVmZXJlbmNlZCBieSBgbnZtZW0tY2VsbHNgLlxuXG5BbGwgdGhlc2UgZGVwZW5kZW5jaWVzIG1ha2UgaXQgcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB0byBnZXQgdGhpcyBkcml2ZXIgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IGluIGEgZ2VuZXJpYyBmdXp6aW5nIGVudmlyb25tZW50IHdpdGhvdXQgYSBzcGVjaWFsaXplZCBlbXVsYXRvciBmb3IgdGhlIEFsbHdpbm5lci9YLVBvd2VycyBoYXJkd2FyZS5cblxuVGhlcmVmb3JlLCBJJ20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgY29kZSBpcyBub3QgcmVhY2hhYmxlIGluIFFFTVUgb3Igc2ltaWxhciBlbnZpcm9ubWVudHMuIEl0J3MgYWxsIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUtZGVwZW5kZW50IHN0dWZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ5MiwiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMjM6Mzg6NTUuMzM0ODU0ODk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGFyZHdhcmUtc3BlY2lmaWMgRXRoZXJuZXQgUEhZIGRyaXZlciBmb3IgWC1Qb3dlcnMgQUMyMDAvQUMzMDAgY29tcGFuaW9uIElDcy4gVGhlIGRyaXZlcidzIHByb2JlIGFuZCBtYXRjaCBmdW5jdGlvbnMgc3RyaWN0bHkgcmVxdWlyZSBzcGVjaWZpYyBEZXZpY2UgVHJlZSBub2RlcywgY29tcGF0aWJsZXMsIGFuZCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgKHN1Y2ggYXMgSTJDIGNsaWVudHMgd2l0aCByZWdtYXBzLCBjbG9ja3MsIHJlZ3VsYXRvcnMsIGFuZCBOVk1FTSBjZWxscykgdGhhdCBhcmUgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UuIENvbnNlcXVlbnRseSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBnZW5lcmljIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhhcmR3YXJlLXNwZWNpZmljIEV0aGVybmV0IFBIWSBkcml2ZXIgZm9yIFgtUG93ZXJzIEFDMjAwL0FDMzAwIGNvbXBhbmlvbiBJQ3MuIFRoZSBkcml2ZXIncyBwcm9iZSBhbmQgbWF0Y2ggZnVuY3Rpb25zIHN0cmljdGx5IHJlcXVpcmUgc3BlY2lmaWMgRGV2aWNlIFRyZWUgbm9kZXMsIGNvbXBhdGlibGVzLCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIChzdWNoIGFzIEkyQyBjbGllbnRzIHdpdGggcmVnbWFwcywgY2xvY2tzLCByZWd1bGF0b3JzLCBhbmQgTlZNRU0gY2VsbHMpIHRoYXQgYXJlIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBDb25zZXF1ZW50bHksIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBkdXJpbmcgZ2VuZXJpYyBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDIzOjM4OjU1LjMzNDg3NzYyNFoiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5r2vz[1] Phase: Running StartedAt: 2026-08-11 23:39:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5r2vz[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-11 23:39:07 +0000 UTC FinishedAt: 2026-08-11 23:39:12 +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,}