Name: series-workflowsq8lj Phase: Failed StartedAt: 2026-09-08 22:16:17 +0000 UTC FinishedAt: 2026-09-08 22:18:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsq8lj[0] Phase: Succeeded StartedAt: 2026-09-08 22:16:17 +0000 UTC FinishedAt: 2026-09-08 22:18:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsq8lj[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 22:16:17 +0000 UTC FinishedAt: 2026-09-08 22:18:10 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjdkYWRlZTBiNjNlZGNkYzkzNTNlNGI2MWY4NGZlYTRkNDNjYjMyNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjI6MTc6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40ZTY1ZDE3MTBkYTc4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXG5AQCAtMCwwICYjNDM7MSwzNjQgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFhpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjpcbiYjNDM7ICBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGltcGxlbWVudHMgSUVFRSA4MDIuMSBUaW1lLVNlbnNpdGl2ZVxuJiM0MzsgIE5ldHdvcmtpbmcgKFRTTikgc3RhbmRhcmRzIGFuZCBwcm92aWRlcyBsb3ctbGF0ZW5jeSBuZXR3b3JrIGNvbm5lY3Rpdml0eVxuJiM0MzsgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydFxuJiM0MzsgIHN3aXRjaCwgd2l0aCB0d28gcG9ydHMgY29ubmVjdGVkIHRvIHRoZSBleHRlcm5hbCBuZXR3b3JrIGFuZCBvbmUgcG9ydFxuJiM0MzsgIGNvbm5lY3RlZCB0byBhbiBpbnRlcm5hbCBlbmRwb2ludC4gSXQgYWxzbyBzdXBwb3J0cyBHTUlJL1JHTUlJIGludGVyZmFjZXNcbiYjNDM7ICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdFxuJiM0MzsgIDEwMCBNYi9zIGFuZCAxIEdiL3Mgc3BlZWRzLlxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXG4mIzQzOyAgLSBOYWdhZGhlZXJhaiBSb3R0ZWxhIFx1MDAzY25hZ2FkaGVlcmFqLnJvdHRlbGFAYW1kLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IHhsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjBcbiYjNDM7XG4mIzQzOyAgY2xvY2tzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUWCBjbG9jayBmb3IgdHJhbnNtaXR0ZXIgbG9naWMgYW5kIFJUQ1xuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBHVFggOTAtZGVncmVlIHBoYXNlIHNoaWZ0ZWQgY2xvY2sgZm9yIFJHTUlJXG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEhvc3QgUlggRklGTyBjbG9ja1xuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFRYIEZJRk8gY2xvY2tcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogUmVmZXJlbmNlIGNsb2NrIGZvciBJREVMQVkgY29udHJvbFxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBWEktTGl0ZSByZWdpc3RlciBpbnRlcmZhY2UgY2xvY2tcbiYjNDM7XG4mIzQzOyAgY2xvY2stbmFtZXM6XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgLSBjb25zdDogZ3R4XG4mIzQzOyAgICAgIC0gY29uc3Q6IGd0eDkwXG4mIzQzOyAgICAgIC0gY29uc3Q6IGhvc3RfcnhmaWZvXG4mIzQzOyAgICAgIC0gY29uc3Q6IGhvc3RfdHhmaWZvXG4mIzQzOyAgICAgIC0gY29uc3Q6IHJlZlxuJiM0MzsgICAgICAtIGNvbnN0OiBzX2F4aVxuJiM0MztcbiYjNDM7ICByYW5nZXM6IHRydWVcbiYjNDM7XG4mIzQzOyAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OlxuJiM0MzsgICAgY29uc3Q6IDFcbiYjNDM7XG4mIzQzOyAgJiMzOTsjc2l6ZS1jZWxscyYjMzk7OlxuJiM0MzsgICAgY29uc3Q6IDFcbiYjNDM7XG4mIzQzOyAgeGxueCxudW0tcHJpb3JpdGllczpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuJiM0MzsgICAgbWluaW11bTogMlxuJiM0MzsgICAgbWF4aW11bTogOFxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIE51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgKHByaW9yaXRpZXMpIGNvbmZpZ3VyZWQgaW4gdGhlIElQLlxuJiM0MzsgICAgICBUaGlzIGlzIGFuIElQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mXG4mIzQzOyAgICAgIHByaW9yaXR5IHF1ZXVlcyBhdmFpbGFibGUgZm9yIFFvUyBzY2hlZHVsaW5nLiBUcmFmZmljIGNsYXNzZXMgbWFwIHRvXG4mIzQzOyAgICAgIElFRUUgODAyLjFRIHByaW9yaXR5IGxldmVscyAoMC03KS5cbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIFwmIzM0O15ldGhlcm5ldEBbMC05YS1mXSYjNDM7JFwmIzM0OzpcbiYjNDM7ICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBFbmRwb2ludCBNQUMgc3ViLW5vZGUuIFByb3ZpZGVzIHRoZSBob3N0LXNpZGUgZGF0YSBwYXRoIHRocm91Z2ggdGhlXG4mIzQzOyAgICAgIERNQSBjaGFubmVscyBkZXNjcmliZWQgYnkgaXRzIGRtYXMgLyBkbWEtbmFtZXMuXG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiB4bG54LHRzbi1lcC1tYWNcbiYjNDM7XG4mIzQzOyAgICAgIHJlZzpcbiYjNDM7ICAgICAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICAgICAgZG1hczpcbiYjNDM7ICAgICAgICBtaW5JdGVtczogMlxuJiM0MzsgICAgICAgIG1heEl0ZW1zOiAxNlxuJiM0MztcbiYjNDM7ICAgICAgZG1hLW5hbWVzOlxuJiM0MzsgICAgICAgIG1pbkl0ZW1zOiAyXG4mIzQzOyAgICAgICAgbWF4SXRlbXM6IDE2XG4mIzQzOyAgICAgICAgaXRlbXM6XG4mIzQzOyAgICAgICAgICBwYXR0ZXJuOiBcJiMzNDteKHR4fHJ4KV9jaGFuWzAtN10kXCYjMzQ7XG4mIzQzOyAgICAgICAgZGVzY3JpcHRpb246IHxcbiYjNDM7ICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICYjMzk7ZG1hcyYjMzk7LCBvbmUgcGVyIERNQSBjaGFubmVsIGFuZCBpblxuJiM0MzsgICAgICAgICAgdGhlIHNhbWUgb3JkZXIuIFRYIGNoYW5uZWwgbmFtZXMgdXNlIFwmIzM0O3R4X2NoYW5cdTAwM2NOXHUwMDNlXCYjMzQ7IGFuZCBSWCBjaGFubmVsXG4mIzQzOyAgICAgICAgICBuYW1lcyB1c2UgXCYjMzQ7cnhfY2hhblx1MDAzY05cdTAwM2VcJiMzNDssIHdoZXJlIE4gaXMgMC4uNy4gRXhhbXBsZTogXCYjMzQ7dHhfY2hhbjBcJiMzNDssXG4mIzQzOyAgICAgICAgICBcJiMzNDt0eF9jaGFuMVwmIzM0OywgLi4uLCBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDssIC4uLi5cbiYjNDM7XG4mIzQzOyAgICAgIHR4LXF1ZXVlcy1jb25maWc6XG4mIzQzOyAgICAgICAgdHlwZTogb2JqZWN0XG4mIzQzOyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzOyAgICAgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICBUWCBxdWV1ZSBjb25maWd1cmF0aW9uIG5vZGUgdGhhdCBtYXBzIElQIHByaW9yaXR5IHF1ZXVlcyB0b1xuJiM0MzsgICAgICAgICAgRE1BIFRYIGNoYW5uZWxzLiBUaGUgVFNOIElQIHN1cHBvcnRzIG11bHRpcGxlIHByaW9yaXR5IHF1ZXVlcyBmb3JcbiYjNDM7ICAgICAgICAgIFFvUyBzY2hlZHVsaW5nLCBhbmQgZWFjaCBxdWV1ZSBjYW4gYmUgY29ubmVjdGVkIHRvIGEgc3BlY2lmaWMgRE1BXG4mIzQzOyAgICAgICAgICBjaGFubmVsLiBUaGlzIG1hcHBpbmcgZGVmaW5lcyB3aGljaCBETUEgVFggY2hhbm5lbCBpcyB1c2VkIHRvXG4mIzQzOyAgICAgICAgICB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIHByaW9yaXR5IHF1ZXVlLiBGb3IgZXhhbXBsZSwgcXVldWUwXG4mIzQzOyAgICAgICAgICB3aXRoIHhsbngsZG1hLWNoYW5uZWwtbnVtIHNldCB0byA1IG1lYW5zIHByaW9yaXR5IHF1ZXVlIDAgdXNlc1xuJiM0MzsgICAgICAgICAgdHhfY2hhbjUgZm9yIGRhdGEgdHJhbnNmZXIuXG4mIzQzO1xuJiM0MzsgICAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgXCYjMzQ7XnF1ZXVlWzAtN10kXCYjMzQ7OlxuJiM0MzsgICAgICAgICAgICB0eXBlOiBvYmplY3RcbiYjNDM7ICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgICAgICBFYWNoIHN1Ym5vZGUgcmVwcmVzZW50cyBhIHByaW9yaXR5IHF1ZXVlLiBUaGVcbiYjNDM7ICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bSBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hpY2ggRE1BIFRYIGNoYW5uZWxcbiYjNDM7ICAgICAgICAgICAgICAodHhfY2hhbjAgdG8gdHhfY2hhbjcpIGlzIGNvbm5lY3RlZCB0byB0aGlzIHF1ZXVlIGZvclxuJiM0MzsgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBwYWNrZXRzLlxuJiM0MzsgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICAgIHhsbngsZG1hLWNoYW5uZWwtbnVtOlxuJiM0MzsgICAgICAgICAgICAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4mIzQzOyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgICAgICAgICAgRE1BIGNoYW5uZWwgdGhhdCB0cmFuc21pdHMgdGhpcyBwcmlvcml0eSBxdWV1ZSwgZ2l2ZW4gYXNcbiYjNDM7ICAgICAgICAgICAgICAgICAgdGhlIE4gb2YgdGhlIHR4X2NoYW5OIGVudHJ5IGluIGRtYS1uYW1lcy5cbiYjNDM7ICAgICAgICAgICAgICAgIG1pbmltdW06IDBcbiYjNDM7ICAgICAgICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgICAgICAgIC0geGxueCxkbWEtY2hhbm5lbC1udW1cbiYjNDM7XG4mIzQzOyAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgLSBjb21wYXRpYmxlXG4mIzQzOyAgICAgIC0gcmVnXG4mIzQzOyAgICAgIC0gZG1hc1xuJiM0MzsgICAgICAtIGRtYS1uYW1lc1xuJiM0MzsgICAgICAtIHR4LXF1ZXVlcy1jb25maWdcbiYjNDM7XG4mIzQzOyAgXCYjMzQ7XnN3aXRjaEBbMC05YS1mXSYjNDM7JFwmIzM0OzpcbiYjNDM7ICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2RzYS9kc2EueWFtbCMvJGRlZnMvZXRoZXJuZXQtcG9ydHNcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBUaHJlZS1wb3J0IEV0aGVybmV0IHN3aXRjaCBzdWItbm9kZS4gQ29udGFpbnMgdGhlIHN3aXRjaCBmYWJyaWNcbiYjNDM7ICAgICAgcmVnaXN0ZXIgd2luZG93IGFuZCB0aGUgdHdvIHBlci1NQUMgcmVnaXN0ZXIgd2luZG93cy4gRWFjaCBwZXItTUFDXG4mIzQzOyAgICAgIHdpbmRvdyBob3VzZXMgYW4gTURJTyBjb250cm9sbGVyIGFuZCBhIFBUUCByZWdpc3RlciBibG9jayBhdCBmaXhlZFxuJiM0MzsgICAgICBvZmZzZXRzLiBUaGUgSVAmIzM5O3MgcGVyLU1BQyBhbmQgUFRQLXRpbWVyIGludGVycnVwdHMgYXJlIGV4cG9zZWQgaGVyZS5cbiYjNDM7XG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiB4bG54LHRzbi1zd2l0Y2hcbiYjNDM7XG4mIzQzOyAgICAgIHJlZzpcbiYjNDM7ICAgICAgICBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZGVzY3JpcHRpb246IFN3aXRjaCBmYWJyaWMgcmVnaXN0ZXIgd2luZG93XG4mIzQzOyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBNQUMxIHJlZ2lzdGVyIHdpbmRvdyAoaW5jbHVkZXMgTURJTyBhbmQgUFRQKVxuJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMiByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUClcbiYjNDM7XG4mIzQzOyAgICAgIHJlZy1uYW1lczpcbiYjNDM7ICAgICAgICBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHN3aXRjaFxuJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjMVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjMlxuJiM0MztcbiYjNDM7ICAgICAgaW50ZXJydXB0czpcbiYjNDM7ICAgICAgICBtaW5JdGVtczogN1xuJiM0MzsgICAgICAgIG1heEl0ZW1zOiA3XG4mIzQzO1xuJiM0MzsgICAgICBpbnRlcnJ1cHQtbmFtZXM6XG4mIzQzOyAgICAgICAgaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfcnhfbWFjMVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzFcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IG1hY19pcnFfbWFjMVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3RpbWVyXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfcnhfbWFjMlxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzJcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IG1hY19pcnFfbWFjMlxuJiM0MztcbiYjNDM7ICAgICAgbWRpby0xOlxuJiM0MzsgICAgICAgICRyZWY6IC9zY2hlbWFzL25ldC9tZGlvLnlhbWwjXG4mIzQzOyAgICAgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMxLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMVxuJiM0MzsgICAgICAgICAgcmVnLW5hbWVzIHdpbmRvdy5cbiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICBtZGlvLTI6XG4mIzQzOyAgICAgICAgJHJlZjogL3NjaGVtYXMvbmV0L21kaW8ueWFtbCNcbiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgIE1ESU8gYnVzIGNvbnRyb2xsZXIgZm9yIE1BQzIuIFJlZ2lzdGVycyByZXNpZGUgaW5zaWRlIHRoZSBtYWMyXG4mIzQzOyAgICAgICAgICByZWctbmFtZXMgd2luZG93LlxuJiM0MzsgICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgXCYjMzQ7XihldGhlcm5ldC0pP3BvcnRzJFwmIzM0OzpcbiYjNDM7ICAgICAgICB0eXBlOiBvYmplY3RcbiYjNDM7ICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzOyAgICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICAgICYjMzk7I2FkZHJlc3MtY2VsbHMmIzM5OzpcbiYjNDM7ICAgICAgICAgICAgY29uc3Q6IDFcbiYjNDM7XG4mIzQzOyAgICAgICAgICAmIzM5OyNzaXplLWNlbGxzJiMzOTs6XG4mIzQzOyAgICAgICAgICAgIGNvbnN0OiAwXG4mIzQzO1xuJiM0MzsgICAgICAgICAgcG9ydEAwOlxuJiM0MzsgICAgICAgICAgICB0eXBlOiBvYmplY3RcbiYjNDM7ICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlXG4mIzQzOyAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgICAgIENQVSBwb3J0LiBXaXJlZCBpbnRlcm5hbGx5IHRvIHRoZSBlbmRwb2ludCBNQUMgc2libGluZy5cbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgICAgICAgY29uc3Q6IDBcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgcGh5LW1vZGU6XG4mIzQzOyAgICAgICAgICAgICAgICBjb25zdDogaW50ZXJuYWxcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgICAgICAgIC0gZXRoZXJuZXRcbiYjNDM7XG4mIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBcJiMzNDtecG9ydEBbMS0yXSRcJiMzNDs6XG4mIzQzOyAgICAgICAgICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWVcbiYjNDM7ICAgICAgICAgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICAgICAgRXh0ZXJuYWwgRXRoZXJuZXQgcG9ydC4gcG9ydEAxIGlzIHdpcmVkIHRvIE1BQzEgYW5kIHJlYWNoZWRcbiYjNDM7ICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBtZGlvLTEgYnVzLCBwb3J0QDIgaXMgd2lyZWQgdG8gTUFDMiBhbmQgcmVhY2hlZFxuJiM0MzsgICAgICAgICAgICAgIHRocm91Z2ggdGhlIG1kaW8tMiBidXMuXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgICAgICAgIGVudW06IFsxLCAyXVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICBwaHktbW9kZTpcbiYjNDM7ICAgICAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgICAgIC0gZ21paVxuJiM0MzsgICAgICAgICAgICAgICAgICAtIHJnbWlpXG4mIzQzOyAgICAgICAgICAgICAgICAgIC0gcmdtaWktaWRcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgICAgICAgIC0gcmVnXG4mIzQzOyAgICAgICAgICAgICAgLSBwaHktbW9kZVxuJiM0MzsgICAgICAgICAgICAgIC0gcGh5LWhhbmRsZVxuJiM0MztcbiYjNDM7ICAgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAgIC0gcG9ydEAwXG4mIzQzOyAgICAgICAgICAtIHBvcnRAMVxuJiM0MzsgICAgICAgICAgLSBwb3J0QDJcbiYjNDM7XG4mIzQzOyAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgLSBjb21wYXRpYmxlXG4mIzQzOyAgICAgIC0gcmVnXG4mIzQzOyAgICAgIC0gcmVnLW5hbWVzXG4mIzQzOyAgICAgIC0gaW50ZXJydXB0c1xuJiM0MzsgICAgICAtIGludGVycnVwdC1uYW1lc1xuJiM0MztcbiYjNDM7ICAgIG9uZU9mOlxuJiM0MzsgICAgICAtIHJlcXVpcmVkOiBbcG9ydHNdXG4mIzQzOyAgICAgIC0gcmVxdWlyZWQ6IFtldGhlcm5ldC1wb3J0c11cbiYjNDM7XG4mIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0geGxueCxudW0tcHJpb3JpdGllc1xuJiM0MzsgIC0gcmFuZ2VzXG4mIzQzOyAgLSAmIzM5OyNhZGRyZXNzLWNlbGxzJiMzOTtcbiYjNDM7ICAtICYjMzk7I3NpemUtY2VsbHMmIzM5O1xuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICB0c25AODAwNDAwMDAge1xuJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCYjMzQ7O1xuJiM0MzsgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNm1pc2NfY2xrXzJcdTAwM2UsIFx1MDAzY1x1MDAyNm1pc2NfY2xrXzJcdTAwM2UsIFx1MDAzY1x1MDAyNm1pc2NfY2xrXzFcdTAwM2UsIFx1MDAzY1x1MDAyNm1pc2NfY2xrXzFcdTAwM2UsXG4mIzQzOyAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2bWlzY19jbGtfM1x1MDAzZSwgXHUwMDNjXHUwMDI2bWlzY19jbGtfMFx1MDAzZTtcbiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O2d0eFwmIzM0OywgXCYjMzQ7Z3R4OTBcJiMzNDssIFwmIzM0O2hvc3RfcnhmaWZvXCYjMzQ7LCBcJiMzNDtob3N0X3R4Zmlmb1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3JlZlwmIzM0OywgXCYjMzQ7c19heGlcJiMzNDs7XG4mIzQzOyAgICAgICAgeGxueCxudW0tcHJpb3JpdGllcyA9IFx1MDAzYzhcdTAwM2U7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICByYW5nZXMgPSBcdTAwM2MweDAgMHg4MDA0MDAwMCAweDQwMDAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBlcF9tYWM6IGV0aGVybmV0QDE2MDAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsdHNuLWVwLW1hY1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxNjAwMCAweGEwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGRtYXMgPSBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAxXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyXHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgM1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgNFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgNVx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDZcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDdcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE2XHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMTdcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE4XHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAxOVx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDIwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyMVx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMjJcdTAwM2UsXG4mIzQzOyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyM1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgZG1hLW5hbWVzID0gXCYjMzQ7dHhfY2hhbjBcJiMzNDssIFwmIzM0O3R4X2NoYW4xXCYjMzQ7LCBcJiMzNDt0eF9jaGFuMlwmIzM0OywgXCYjMzQ7dHhfY2hhbjNcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3R4X2NoYW40XCYjMzQ7LCBcJiMzNDt0eF9jaGFuNVwmIzM0OywgXCYjMzQ7dHhfY2hhbjZcJiMzNDssIFwmIzM0O3R4X2NoYW43XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDssIFwmIzM0O3J4X2NoYW4yXCYjMzQ7LCBcJiMzNDtyeF9jaGFuM1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7cnhfY2hhbjRcJiMzNDssIFwmIzM0O3J4X2NoYW41XCYjMzQ7LCBcJiMzNDtyeF9jaGFuNlwmIzM0OywgXCYjMzQ7cnhfY2hhbjdcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHR4LXF1ZXVlcy1jb25maWcge1xuJiM0MzsgICAgICAgICAgICAgICAgcXVldWUwIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDdcdTAwM2U7IH07XG4mIzQzOyAgICAgICAgICAgICAgICBxdWV1ZTEgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4Nlx1MDAzZTsgfTtcbiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHg1XHUwMDNlOyB9O1xuJiM0MzsgICAgICAgICAgICAgICAgcXVldWUzIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDRcdTAwM2U7IH07XG4mIzQzOyAgICAgICAgICAgICAgICBxdWV1ZTQgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4M1x1MDAzZTsgfTtcbiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNSB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHgyXHUwMDNlOyB9O1xuJiM0MzsgICAgICAgICAgICAgICAgcXVldWU2IHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDFcdTAwM2U7IH07XG4mIzQzOyAgICAgICAgICAgICAgICBxdWV1ZTcgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4MFx1MDAzZTsgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICBzd2l0Y2hAMzgwMDAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eGxueCx0c24tc3dpdGNoXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MweDM4MDAwIDB4ODAwMFx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgXHUwMDNjMHgwMDAwMCAweDE0MDAwXHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICBcdTAwM2MweDIwMDAwIDB4MTQwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlZy1uYW1lcyA9IFwmIzM0O3N3aXRjaFwmIzM0OywgXCYjMzQ7bWFjMVwmIzM0OywgXCYjMzQ7bWFjMlwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSBcdTAwM2NcdTAwMjZpbnRjXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHRzID0gXHUwMDNjMCAyXHUwMDNlLCBcdTAwM2MyIDJcdTAwM2UsIFx1MDAzYzQgMlx1MDAzZSwgXHUwMDNjNiAyXHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjMSAyXHUwMDNlLCBcdTAwM2MzIDJcdTAwM2UsIFx1MDAzYzUgMlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gXCYjMzQ7cHRwX3J4X21hYzFcJiMzNDssIFwmIzM0O3B0cF90eF9tYWMxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDttYWNfaXJxX21hYzFcJiMzNDssIFwmIzM0O3B0cF90aW1lclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7cHRwX3J4X21hYzJcJiMzNDssIFwmIzM0O3B0cF90eF9tYWMyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDttYWNfaXJxX21hYzJcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtZGlvLTEge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgcGh5MDogZXRoZXJuZXQtcGh5QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgbWRpby0yIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgIHBoeTE6IGV0aGVybmV0LXBoeUAxIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBvcnRzIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBwb3J0QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSBcdTAwM2NcdTAwMjZlcF9tYWNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDtpbnRlcm5hbFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gXHUwMDNjMTAwMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgcG9ydEAxIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZwaHkwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCYjMzQ7cmdtaWktaWRcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBvcnRAMiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2cGh5MVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwmIzM0O3JnbWlpLWlkXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBiMjNmYjZmMmY0ZWY0Li5mZjk0ZTMxNGVlYjFmIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjk5MTEsNiAmIzQzOzI5OTExLDE0IEBAIE06XHRIYXJzaCBKYWluIFx1MDAzY2guamFpbkBhbWQuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbiBGOlx0ZHJpdmVycy9jaGFyL2h3X3JhbmRvbS94aWxpbngtdHJuZy5jXG4gXG4mIzQzO1hJTElOWCBUU04gRU5EUE9JTlQgRVRIRVJORVQgTUFDIERSSVZFUlxuJiM0MztNOlx0TmFnYWRoZWVyYWogUm90dGVsYSBcdTAwM2NuYWdhZGhlZXJhai5yb3R0ZWxhQGFtZC5jb21cdTAwM2VcbiYjNDM7TTpcdFNyaW5pdmFzIE5lZWxpIFx1MDAzY3NyaW5pdmFzLm5lZWxpQGFtZC5jb21cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWxcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vXG4mIzQzO1xuIFhJTElOWCBVQVJUTElURSBTRVJJQUwgRFJJVkVSXG4gTTpcdFBldGVyIEtvcnNnYWFyZCBcdTAwM2NqYWNtZXRAc3Vuc2l0ZS5ka1x1MDAzZVxuIEw6XHRsaW51eC1zZXJpYWxAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1xuaW5kZXggNzUwMjIxNGNjN2Q1MC4uYzZkNzA0YzhkM2Q0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1xuQEAgLTQxLDQgJiM0Mzs0MSw1IEBAIGNvbmZpZyBYSUxJTlhfTExfVEVNQUNcbiBcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFhpbGlueCAxMC8xMDAvMTAwMCBMb2NhbExpbmsgVEVNQUNcbiBcdCAgY29yZSB1c2VkIGluIFhpbGlueCBTcGFydGFuIGFuZCBWaXJ0ZXggRlBHQXNcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1wmIzM0O1xuIGVuZGlmICMgTkVUX1ZFTkRPUl9YSUxJTlhcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbmluZGV4IDdkN2RjMTc3MTQyM2UuLjY2ZGFiMDEyNjUwYjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZVxuQEAgLTgsMyAmIzQzOzgsNCBAQCBvYmotJChDT05GSUdfWElMSU5YX0xMX1RFTUFDKSAmIzQzOz0gbGxfdGVtYWMub1xuIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUub1xuIHhpbGlueF9lbWFjLW9ianMgOj0geGlsaW54X2F4aWVuZXRfbWFpbi5vIHhpbGlueF9heGllbmV0X21kaW8ub1xuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICYjNDM7PSB4aWxpbnhfZW1hYy5vXG4mIzQzO29iai0kKENPTkZJR19YSUxJTlhfVFNOKSAmIzQzOz0gdHNuL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5MmYxNzY5NDQwNDJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMTYgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBYSUxJTlhfVFNOXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7WGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE9GX0FERFJFU1NcbiYjNDM7XHRkZXBlbmRzIG9uIFhJTElOWF9ETUFcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQU1EL1hpbGlueCBUaW1lLVNlbnNpdGl2ZSBOZXR3b3JraW5nXG4mIzQzO1x0ICAoVFNOKSBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAuIEl0IHByb3ZpZGVzIHRoZSB3cmFwcGVyIGRldmljZVxuJiM0MztcdCAgYW5kIHRoZSBlbmRwb2ludCBNQUMgdGhhdCBjb25uZWN0cyB0aGUgSVAgdG8gdGhlIGhvc3QgQ1BVLiBUaGVcbiYjNDM7XHQgIHRocmVlLXBvcnQgc3dpdGNoIGlzIHN1cHBvcnRlZCBieSB0aGUgY29tcGFuaW9uIERTQSBkcml2ZXIuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjU4ODY4MjhiMzg2ZjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDIgQEBcbiYjNDM7b2JqLSQoQ09ORklHX1hJTElOWF9UU04pICYjNDM7PSB4aWxpbnhfdHNuLm9cbiYjNDM7eGlsaW54X3Rzbi15IDo9IHhpbGlueF90c25fbWFpbi5vIHhpbGlueF90c25fZXAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMDc1N2UyMmQxZmQxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c24uaFxuQEAgLTAsMCAmIzQzOzEsMTUgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIGRyaXZlciwgc2hhcmVkIGRlZmluaXRpb25zLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1hJTElOWF9UU05fSFxuJiM0MzsjZGVmaW5lIF9YSUxJTlhfVFNOX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzO1xuJiM0MztleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXI7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1hJTElOWF9UU05fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9lcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYjdkYTI2NTIxZDAxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuY1xuQEAgLTAsMCAmIzQzOzEsMTAzNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2lyY19idWYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEveGlsaW54X2RtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hZW5naW5lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF90c24uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBEUklWRVJfTkFNRVx0XHRcdFwmIzM0O3hpbGlueF90c25fZXBcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVFNOX0RNQV9DSF9JTlZBTElEXHRcdDB4RkZVXG4mIzQzOyNkZWZpbmUgVFNOX01BWF9UWF9RVUVVRVx0XHQ4XG4mIzQzOyNkZWZpbmUgVFNOX01BWF9SWF9RVUVVRVx0XHQ4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRTTl9NQVhfVkxBTl9GUkFNRV9TSVpFXHRcdChFVEhfREFUQV9MRU4gJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBcXFxuJiM0MztcdFx0XHRcdFx0IEVUSF9GQ1NfTEVOKVxuJiM0MztcbiYjNDM7I2RlZmluZSBUWF9CRF9OVU1fREVGQVVMVFx0XHQ2NFxuJiM0MzsjZGVmaW5lIFJYX0JEX05VTV9ERUZBVUxUXHRcdDEyOFxuJiM0MztcbiYjNDM7I2RlZmluZSBFUF9SWF9SRUZJTExfUkVUUllcdFx0bXNlY3NfdG9famlmZmllcygxMClcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBETUEgZGVzY3JpcHRvciBzaWRlYmFuZCBzdGF0dXMgd29yZCBwYWNrcyBUSUQvVERFU1QvVFVTRVIgdG9nZXRoZXI7XG4mIzQzOyAqIFRVU0VSIG9jY3VwaWVzIHRoZSBsb3cgYnl0ZSwgVElEL1RERVNUIHNpdCBpbiB0aGUgdXBwZXIgYml0cy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVFNOX1RVU0VSX01BU0tcdFx0XHRHRU5NQVNLKDcsIDApXG4mIzQzOy8qIFRVU0VSIElucHV0IFBvcnQgSUQgZmllbGQgKGJpdHMgWzU6NF0gb2YgdGhlIFRVU0VSIGZpZWxkKSAqL1xuJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0lEX01BU0tcdFx0R0VOTUFTSyg1LCA0KVxuJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0VQXHRcdDB4MFxuJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX01BQzFcdFx0MHgxXG4mIzQzOyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfTUFDMlx0XHQweDJcbiYjNDM7XG4mIzQzOy8qIFNpemVkIHRvIGluZGV4IHBvcnRfbWRbXSBieSBUVVNFUiBwb3J0X2lkICgxIG9yIDIsIHNsb3QgMCB1bnVzZWQpICovXG4mIzQzOyNkZWZpbmUgWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UU1x0KFRTTl9UVVNFUl9QT1JUX01BQzIgJiM0MzsgMSlcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgLSBza2IgY29udGFpbmVyIGZvciBlYWNoIGluLWZsaWdodCBETUEgZGVzY3JpcHRvclxuJiM0MzsgKiBAc2dsOiBzY2F0dGVyLWdhdGhlciBsaXN0IGJhY2tpbmcgdGhlIERNQSBtYXBwaW5nXG4mIzQzOyAqIEBkZXNjOiBkbWFlbmdpbmUgZGVzY3JpcHRvciBoYW5kbGVcbiYjNDM7ICogQGRtYV9hZGRyZXNzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzZ2wgZW50cnkgKFJYIHBhdGgpXG4mIzQzOyAqIEBza2I6IFNLQiBvd25pbmcgdGhlIGJ1ZmZlclxuJiM0MzsgKiBAc2dfbGVuOiBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiBAc2dsIChUWCBwYXRoKVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIHtcbiYjNDM7XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dsW01BWF9TS0JfRlJBR1MgJiM0MzsgMV07XG4mIzQzO1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjO1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHJlc3M7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRpbnQgc2dfbGVuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAtIG9uZSBETUEgY2hhbm5lbCBhbmQgaXRzIFNLQiByaW5nXG4mIzQzOyAqIEBza2JfcmluZzogcGVyLXNsb3QgU0tCIGRlc2NyaXB0b3JzXG4mIzQzOyAqIEBlcDogcG9pbnRlciBiYWNrIHRvIHRoZSBvd25pbmcgRVAgaW5zdGFuY2VcbiYjNDM7ICogQGNoYW46IGRtYWVuZ2luZSBjaGFubmVsIGhhbmRsZVxuJiM0MzsgKiBAZG1hX2RldjogZGV2aWNlIHVzZWQgZm9yIERNQSBtYXBwaW5nICh0aGUgRE1BIGVuZ2luZSwgbm90IHRoZSBFUClcbiYjNDM7ICogQHJpbmdfaGVhZDogcHJvZHVjZXIgaW5kZXhcbiYjNDM7ICogQHJpbmdfdGFpbDogY29uc3VtZXIgaW5kZXhcbiYjNDM7ICogQHJpbmdfc2l6ZTogbnVtYmVyIG9mIHNsb3RzIGluIEBza2JfcmluZ1xuJiM0MzsgKiBAcnhfbG9jazogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGJldHdlZW4gdGhlIFJYIGNhbGxiYWNrIGFuZCB0aGUgcmVmaWxsIHRpbWVyXG4mIzQzOyAqIEB0eF9sb2NrOiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgYmV0d2VlbiB4bWl0IGFuZCBUWCBjb21wbGV0aW9uXG4mIzQzOyAqIEByeF9yZWZpbGxfdGltZXI6IHJldHJpZXMgUlggcmVmaWxsIGFmdGVyIGFuIGFsbG9jYXRpb24gZmFpbHVyZVxuJiM0MzsgKiBAaXNfdHg6IHRydWUgZm9yIFRYIGNoYW5uZWxzLCBmYWxzZSBmb3IgUlhcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiB7XG4mIzQzO1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICoqc2tiX3Jpbmc7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcDtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZG1hX2RldjtcbiYjNDM7XHR1MzIgcmluZ19oZWFkO1xuJiM0MztcdHUzMiByaW5nX3RhaWw7XG4mIzQzO1x0dTMyIHJpbmdfc2l6ZTtcbiYjNDM7XHRzcGlubG9ja190IHJ4X2xvY2s7XHQvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgKi9cbiYjNDM7XHRzcGlubG9ja190IHR4X2xvY2s7XHQvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgKi9cbiYjNDM7XHRzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWZpbGxfdGltZXI7XG4mIzQzO1x0Ym9vbCBpc190eDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgeGxueF90c25fZXAgLSBFUCBNQUMgcHJpdmF0ZSBkYXRhLCBlbWJlZGRlZCBpbiBuZXRfZGV2aWNlIHByaXYgYXJlYVxuJiM0MzsgKiBAbmRldjogdGhlIGNvbmR1aXQgbmV0ZGV2IChcJiMzNDtlcDBcJiMzNDsgZm9yIHRoZSBmaXJzdCBJUCBpbnN0YW5jZSlcbiYjNDM7ICogQGRldjogYmFja2luZyBkZXZpY2VcbiYjNDM7ICogQG51bV90eF9xdWV1ZXM6IG51bWJlciBvZiBUWCBETUEgY2hhbm5lbHMgKG9uZSBwZXIgcHJpb3JpdHkpXG4mIzQzOyAqIEBudW1fcnhfcXVldWVzOiBudW1iZXIgb2YgUlggRE1BIGNoYW5uZWxzXG4mIzQzOyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLVx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogQHJ4X2NoYW5fbnVtOiBSWCByaW5nIGluZGV4IC1cdTAwM2UgcGh5c2ljYWwgRE1BIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqIEBtYXhfZnJtX3NpemU6IG1heGltdW0gZnJhbWUgc2l6ZSBhY2NlcHRlZCBvbiBSWFxuJiM0MzsgKiBAdHhfY2hhbnM6IGFycmF5IG9mIFRYIGNoYW5uZWxzIChzaXplIEBudW1fdHhfcXVldWVzKVxuJiM0MzsgKiBAcnhfY2hhbnM6IGFycmF5IG9mIFJYIGNoYW5uZWxzIChzaXplIEBudW1fcnhfcXVldWVzKVxuJiM0MzsgKiBAY2xvc2luZzogc2V0IGluIG5kb19zdG9wIHNvIHRoZSBSWCBjb21wbGV0aW9uIGNhbGxiYWNrIHN0b3BzIHJlLWFybWluZ1xuJiM0MzsgKiBAcG9ydF9tZDogcGVyLVRVU0VSLXBvcnQgTUVUQURBVEFfSFdfUE9SVF9NVVggZW50cmllcyBhdHRhY2hlZCBvbiBSWCxcbiYjNDM7ICpcdGluZGV4ZWQgYnkgcG9ydF9pZCAoMSBmb3IgTUFDMSwgMiBmb3IgTUFDMilcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB4bG54X3Rzbl9lcCB7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHUzMiBudW1fdHhfcXVldWVzO1xuJiM0MztcdHUzMiBudW1fcnhfcXVldWVzO1xuJiM0MztcdHUzMiB0eF9kbWFfY2hhbl9tYXBbVFNOX01BWF9UWF9RVUVVRV07XG4mIzQzO1x0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xuJiM0MztcdHUzMiBtYXhfZnJtX3NpemU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnR4X2NoYW5zO1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnJ4X2NoYW5zO1xuJiM0MztcbiYjNDM7XHRib29sIGNsb3Npbmc7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnBvcnRfbWRbWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UU107XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqXG4mIzQzO2VwX2dldF9kZXNjKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4sIGludCBpZHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geGNoYW4tXHUwMDNlc2tiX3JpbmdbaWR4XTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkbWFfcnhfZGVzYztcbiYjNDM7XHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0geGNoYW4tXHUwMDNlZXA7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRkbWFfYWRkcl90IGFkZHI7XG4mIzQzO1xuJiM0MztcdHNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi1cdTAwM2VyaW5nX2hlYWQgXHUwMDI2ICh4Y2hhbi1cdTAwM2VyaW5nX3NpemUgLSAxKSk7XG4mIzQzO1x0aWYgKCFza2J1Zl9kbWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XG4mIzQzO1x0c2tiID0gZGV2X2FsbG9jX3NrYihlcC1cdTAwM2VtYXhfZnJtX3NpemUpO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNnX2luaXRfdGFibGUoc2tidWZfZG1hLVx1MDAzZXNnbCwgMSk7XG4mIzQzO1x0YWRkciA9IGRtYV9tYXBfc2luZ2xlKHhjaGFuLVx1MDAzZWRtYV9kZXYsIHNrYi1cdTAwM2VkYXRhLCBlcC1cdTAwM2VtYXhfZnJtX3NpemUsXG4mIzQzO1x0XHRcdCAgICAgIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHhjaGFuLVx1MDAzZWRtYV9kZXYsIGFkZHIpKSkge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZXAtXHUwMDNlZGV2LCBcJiMzNDtETUEgbWFwcGluZyBlcnJvciBvbiBSWCBzdWJtaXRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xuJiM0MztcdH1cbiYjNDM7XHRzZ19kbWFfYWRkcmVzcyhza2J1Zl9kbWEtXHUwMDNlc2dsKSA9IGFkZHI7XG4mIzQzO1x0c2dfZG1hX2xlbihza2J1Zl9kbWEtXHUwMDNlc2dsKSA9IGVwLVx1MDAzZW1heF9mcm1fc2l6ZTtcbiYjNDM7XHRkbWFfcnhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLVx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAxLCBETUFfREVWX1RPX01FTSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7XG4mIzQzO1x0aWYgKCFkbWFfcnhfZGVzYylcbiYjNDM7XHRcdGdvdG8gZXJyX3VubWFwX3NrYjtcbiYjNDM7XG4mIzQzO1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IHNrYjtcbiYjNDM7XHRza2J1Zl9kbWEtXHUwMDNlZG1hX2FkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcyhza2J1Zl9kbWEtXHUwMDNlc2dsKTtcbiYjNDM7XHRza2J1Zl9kbWEtXHUwMDNlZGVzYyA9IGRtYV9yeF9kZXNjO1xuJiM0MztcdGRtYV9yeF9kZXNjLVx1MDAzZWNhbGxiYWNrX3BhcmFtID0geGNoYW47XG4mIzQzO1x0ZG1hX3J4X2Rlc2MtXHUwMDNlY2FsbGJhY2tfcmVzdWx0ID0gZXBfZG1hX3J4X2NiO1xuJiM0MztcdHhjaGFuLVx1MDAzZXJpbmdfaGVhZCYjNDM7JiM0Mzs7XG4mIzQzO1x0ZG1hZW5naW5lX3N1Ym1pdChkbWFfcnhfZGVzYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwX3NrYjpcbiYjNDM7XHRkbWFfdW5tYXBfc2luZ2xlKHhjaGFuLVx1MDAzZWRtYV9kZXYsIGFkZHIsIGVwLVx1MDAzZW1heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7ZXJyX2ZyZWVfc2tiOlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZXBfcnhfcmVmaWxsKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4sIGJvb2wgYXJtX3RpbWVyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGF2YWlsLCBpO1xuJiM0MztcbiYjNDM7XHRndWFyZChzcGlubG9ja19iaCkoXHUwMDI2eGNoYW4tXHUwMDNlcnhfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChSRUFEX09OQ0UoeGNoYW4tXHUwMDNlZXAtXHUwMDNlY2xvc2luZykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGF2YWlsID0gQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsIFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuJiM0MztcdFx0XHQgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGF2YWlsOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGVwX3J4X3N1Ym1pdF9kZXNjKHhjaGFuKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcbiYjNDM7XHRpZiAoeGNoYW4tXHUwMDNlcmluZ19oZWFkICE9IFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChhcm1fdGltZXIpXG4mIzQzO1x0XHRtb2RfdGltZXIoXHUwMDI2eGNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBqaWZmaWVzICYjNDM7IEVQX1JYX1JFRklMTF9SRVRSWSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfcnhfcmVmaWxsX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiA9IHRpbWVyX2NvbnRhaW5lcl9vZih4Y2hhbiwgdCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgcnhfcmVmaWxsX3RpbWVyKTtcbiYjNDM7XG4mIzQzO1x0ZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcbiYjNDM7XHRzaXplX3QgbWV0YV9sZW4sIG1ldGFfbWF4X2xlbiwgcnhfbGVuO1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSB4Y2hhbi1cdTAwM2VlcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGVwLVx1MDAzZW5kZXY7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MzIgcG9ydF9pZCwgdHVzZXI7XG4mIzQzO1x0dTMyICptZXRhZGF0YTtcbiYjNDM7XG4mIzQzO1x0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVx1MDAzZXJpbmdfdGFpbCBcdTAwMjYgKHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcbiYjNDM7XHRXUklURV9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXHUwMDNlcmluZ190YWlsICYjNDM7IDEpO1xuJiM0MztcdHNrYiA9IHNrYnVmX2RtYS1cdTAwM2Vza2I7XG4mIzQzO1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUoeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVx1MDAzZWRtYV9hZGRyZXNzLFxuJiM0MztcdFx0XHQgZXAtXHUwMDNlbWF4X2ZybV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzdWx0LVx1MDAzZXJlc3VsdCAhPSBETUFfVFJBTlNfTk9FUlJPUikge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZXAtXHUwMDNlZGV2LCBcJiMzNDtSWCBETUEgdHJhbnNmZXIgZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHJlc3VsdC1cdTAwM2VyZXN1bHQpO1xuJiM0MztcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpO1xuJiM0MztcdFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpO1xuJiM0MztcdFx0Z290byBzdWJtaXRfbmV3O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWV0YWRhdGEgPSBkbWFlbmdpbmVfZGVzY19nZXRfbWV0YWRhdGFfcHRyKHNrYnVmX2RtYS1cdTAwM2VkZXNjLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZtZXRhX2xlbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXHUwMDI2bWV0YV9tYXhfbGVuKTtcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwobWV0YWRhdGEpKSB7XG4mIzQzO1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0XHRkZXZfd2FybihlcC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgUlggbWV0YWRhdGEgcG9pbnRlclxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4mIzQzO1x0XHRnb3RvIHN1Ym1pdF9uZXc7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBNQ0RNQSBtZXRhZGF0YTogWzBdID0gc3RhdHVzLCBbMV0gPSBzaWRlYmFuZCAoVElEL1RERVNUL1RVU0VSKSwgWzIuLl0gPSBhcHAgKi9cbiYjNDM7XHR0dXNlciA9IG1ldGFkYXRhWzFdIFx1MDAyNiBUU05fVFVTRVJfTUFTSztcbiYjNDM7XHRyeF9sZW4gPSBlcC1cdTAwM2VtYXhfZnJtX3NpemUgLSByZXN1bHQtXHUwMDNlcmVzaWR1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ4X2xlbiBcdTAwM2UgZXAtXHUwMDNlbWF4X2ZybV9zaXplIHx8IHJ4X2xlbiBcdTAwM2MgRVRIX0hMRU4pIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdGRldl93YXJuKGVwLVx1MDAzZWRldiwgXCYjMzQ7SW52YWxpZCBSWCBsZW5ndGggJXp1IChtYXg9JXUsIG1pbj0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHJ4X2xlbiwgZXAtXHUwMDNlbWF4X2ZybV9zaXplLCBFVEhfSExFTik7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4mIzQzO1x0XHRnb3RvIHN1Ym1pdF9uZXc7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwb3J0X2lkID0gRklFTERfR0VUKFRTTl9UVVNFUl9QT1JUX0lEX01BU0ssIHR1c2VyKTtcbiYjNDM7XHRpZiAocG9ydF9pZCAhPSBUU05fVFVTRVJfUE9SVF9NQUMxIFx1MDAyNlx1MDAyNiBwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzIpIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdGRldl9kYmcoZXAtXHUwMDNlZGV2LCBcJiMzNDtSWCBkcm9wcGluZyB1bmV4cGVjdGVkIFRVU0VSIHBvcnRfaWQ9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cG9ydF9pZCk7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4mIzQzO1x0XHRnb3RvIHN1Ym1pdF9uZXc7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2JfcHV0KHNrYiwgcnhfbGVuKTtcbiYjNDM7XHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5kZXYpKSB7XG4mIzQzO1x0XHRkc3RfaG9sZChcdTAwMjZlcC1cdTAwM2Vwb3J0X21kW3BvcnRfaWRdLVx1MDAzZWRzdCk7XG4mIzQzO1x0XHRza2JfZHN0X3NldChza2IsIFx1MDAyNmVwLVx1MDAzZXBvcnRfbWRbcG9ydF9pZF0tXHUwMDNlZHN0KTtcbiYjNDM7XHR9XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IG5kZXY7XG4mIzQzO1x0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTtcbiYjNDM7XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbiYjNDM7XHRfX25ldGlmX3J4KHNrYik7XG4mIzQzO1xuJiM0MztcdERFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7XG4mIzQzO1x0REVWX1NUQVRTX0FERChuZGV2LCByeF9ieXRlcywgcnhfbGVuKTtcbiYjNDM7XG4mIzQzO3N1Ym1pdF9uZXc6XG4mIzQzO1x0ZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3R4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRpbnQgc2dfbGVuO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jaykge1xuJiM0MztcdFx0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sXG4mIzQzO1x0XHRcdFx0XHR4Y2hhbi1cdTAwM2VyaW5nX3RhaWwgXHUwMDI2ICh4Y2hhbi1cdTAwM2VyaW5nX3NpemUgLSAxKSk7XG4mIzQzO1x0XHRpZiAoIXNrYnVmX2RtYSB8fCAhc2tidWZfZG1hLVx1MDAzZXNrYilcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHNrYiA9IHNrYnVmX2RtYS1cdTAwM2Vza2I7XG4mIzQzO1x0XHRzZ2wgPSBza2J1Zl9kbWEtXHUwMDNlc2dsO1xuJiM0MztcdFx0c2dfbGVuID0gc2tidWZfZG1hLVx1MDAzZXNnX2xlbjtcbiYjNDM7XG4mIzQzO1x0XHRkbWFfdW5tYXBfc2coeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuJiM0MztcbiYjNDM7XHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwsIHhjaGFuLVx1MDAzZXJpbmdfdGFpbCAmIzQzOyAxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5kZXYgPSBza2ItXHUwMDNlZGV2O1xuJiM0MztcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXN1bHQtXHUwMDNlcmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSkge1xuJiM0MztcdFx0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9lcnJvcnMpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X3BhY2tldHMpO1xuJiM0MztcdFx0REVWX1NUQVRTX0FERChuZGV2LCB0eF9ieXRlcywgbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRuZXRpZl90eHFfY29tcGxldGVkX3dha2UodHhxLCAxLCBsZW4sXG4mIzQzO1x0XHRcdFx0IENJUkNfU1BBQ0UoUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCksXG4mIzQzO1x0XHRcdFx0XHQgICAgeGNoYW4tXHUwMDNlcmluZ19zaXplKSwgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBlcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkbWFfdHhfZGVzYztcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4mIzQzO1x0aW50IHF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4mIzQzO1x0aW50IHNnX2xlbiwgbmVudHMsIHJldDtcbiYjNDM7XHRkbWFfY29va2llX3QgY29va2llO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkocXVldWUgXHUwMDNlPSBlcC1cdTAwM2VudW1fdHhfcXVldWVzKSkge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4obmRldiwgXCYjMzQ7SW52YWxpZCBUWCBxdWV1ZSAlZCAobWF4ICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcXVldWUsIGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuJiM0MztcdFx0Z290byBlcnJfZHJvcF9za2I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZXAtXHUwMDNldHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9PSBUU05fRE1BX0NIX0lOVkFMSUQpIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdG5ldGRldl93YXJuKG5kZXYsIFwmIzM0O0xvZ2ljYWwgVFggcXVldWUgJWQgaGFzIGludmFsaWQgRE1BIG1hcHBpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHF1ZXVlKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Ryb3Bfc2tiO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGNoYW4gPSBlcC1cdTAwM2V0eF9jaGFuc1txdWV1ZV07XG4mIzQzO1xuJiM0MztcdHNnX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyAmIzQzOyAxO1xuJiM0MztcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1x0aWYgKENJUkNfU1BBQ0UoeGNoYW4tXHUwMDNlcmluZ19oZWFkLCBSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSxcbiYjNDM7XHRcdCAgICAgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpIFx1MDAzYz0gMSkge1xuJiM0MztcdFx0bmV0aWZfdHhxX3RyeV9zdG9wKHR4cSxcbiYjNDM7XHRcdFx0XHQgICBDSVJDX1NQQUNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgeGNoYW4tXHUwMDNlcmluZ19zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAyKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4obmRldiwgXCYjMzQ7VFNOIFRYIHJpbmcgZnVsbFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVx1MDAzZXJpbmdfaGVhZCBcdTAwMjYgKHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcbiYjNDM7XHRpZiAoIXNrYnVmX2RtYSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1xuJiM0MztcdHNnX2luaXRfdGFibGUoc2tidWZfZG1hLVx1MDAzZXNnbCwgc2dfbGVuKTtcbiYjNDM7XHRyZXQgPSBza2JfdG9fc2d2ZWMoc2tiLCBza2J1Zl9kbWEtXHUwMDNlc2dsLCAwLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZHJvcF9za2I7XG4mIzQzO1x0c2dfbGVuID0gcmV0O1xuJiM0MztcbiYjNDM7XHRuZW50cyA9IGRtYV9tYXBfc2coeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVx1MDAzZXNnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRpZiAoIW5lbnRzKVxuJiM0MztcdFx0Z290byBlcnJfZHJvcF9za2I7XG4mIzQzO1xuJiM0MztcdGRtYV90eF9kZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2coeGNoYW4tXHUwMDNlY2hhbiwgc2tidWZfZG1hLVx1MDAzZXNnbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIG5lbnRzLCBETUFfTUVNX1RPX0RFVixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7XG4mIzQzO1x0aWYgKCFkbWFfdHhfZGVzYylcbiYjNDM7XHRcdGdvdG8gZXJyX3VubWFwX3NnO1xuJiM0MztcbiYjNDM7XHRza2J1Zl9kbWEtXHUwMDNlc2tiID0gc2tiO1xuJiM0MztcdHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4gPSBzZ19sZW47XG4mIzQzO1x0ZG1hX3R4X2Rlc2MtXHUwMDNlY2FsbGJhY2tfcGFyYW0gPSB4Y2hhbjtcbiYjNDM7XHRkbWFfdHhfZGVzYy1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBlcF9kbWFfdHhfY2I7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHRjb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRtYV90eF9kZXNjKTtcbiYjNDM7XHRpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0Z290byBlcnJfdW5tYXBfc2c7XG4mIzQzO1x0fVxuJiM0MztcdFdSSVRFX09OQ0UoeGNoYW4tXHUwMDNlcmluZ19oZWFkLCB4Y2hhbi1cdTAwM2VyaW5nX2hlYWQgJiM0MzsgMSk7XG4mIzQzO1x0bmV0ZGV2X3R4X3NlbnRfcXVldWUodHhxLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRuZXRpZl90eHFfbWF5YmVfc3RvcCh0eHEsXG4mIzQzO1x0XHRcdCAgICAgQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsXG4mIzQzO1x0XHRcdFx0XHRSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSxcbiYjNDM7XHRcdFx0XHRcdHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSksXG4mIzQzO1x0XHRcdCAgICAgMiwgMik7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1xuJiM0MztcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwX3NnOlxuJiM0MztcdGRtYV91bm1hcF9zZyh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuJiM0MztlcnJfZHJvcF9za2I6XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X2Ryb3BwZWQpO1xuJiM0MztcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XG4mIzQzO3N0YXRpYyB2b2lkIGVwX2V4aXRfZG1hZW5naW5lKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZXAtXHUwMDNlY2xvc2luZywgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBlcF9pbml0X2RtYWVuZ2luZShlcCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUEgZW5naW5lXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKG5kZXYpO1xuJiM0MztcdFdSSVRFX09OQ0UoZXAtXHUwMDNlY2xvc2luZywgdHJ1ZSk7XG4mIzQzO1x0ZXBfZXhpdF9kbWFlbmdpbmUoZXApO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5kZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfdHhfcmVzZXRfc3VicXVldWUobmRldiwgaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlcF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJzY3B5KGVkLVx1MDAzZWRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihlZC1cdTAwM2Vkcml2ZXIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlcF9uZXRkZXZfb3BzID0ge1xuJiM0MztcdC5uZG9fb3Blblx0XHQ9IGVwX29wZW4sXG4mIzQzO1x0Lm5kb19zdG9wXHRcdD0gZXBfc3RvcCxcbiYjNDM7XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBlcF9zdGFydF94bWl0LFxuJiM0MztcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbiYjNDM7XHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBldGhfbWFjX2FkZHIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVwX2V0aHRvb2xfb3BzID0ge1xuJiM0MztcdC5nZXRfZHJ2aW5mb1x0PSBlcF9nZXRfZHJ2aW5mbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKlxuJiM0MztlcF9hbGxvY19kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXAgKmVwLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX3R4LFxuJiM0MztcdFx0ICBpbnQgcmluZ19zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuO1xuJiM0MztcdHN0cnVjdCBkbWFfY2hhbiAqZXJyX2NoYW47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSBremFsbG9jX29iaigqY2hhbik7XG4mIzQzO1x0aWYgKCFjaGFuKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdGNoYW4tXHUwMDNlY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW4oZXAtXHUwMDNlZGV2LCBuYW1lKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNoYW4tXHUwMDNlY2hhbikpIHtcbiYjNDM7XHRcdGVycl9jaGFuID0gY2hhbi1cdTAwM2VjaGFuO1xuJiM0MztcdFx0a2ZyZWUoY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX0NBU1QoZXJyX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2hhbi1cdTAwM2Vza2JfcmluZyA9IGtjYWxsb2MocmluZ19zaXplLCBzaXplb2YoKmNoYW4tXHUwMDNlc2tiX3JpbmcpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWNoYW4tXHUwMDNlc2tiX3JpbmcpIHtcbiYjNDM7XHRcdGRtYV9yZWxlYXNlX2NoYW5uZWwoY2hhbi1cdTAwM2VjaGFuKTtcbiYjNDM7XHRcdGtmcmVlKGNoYW4pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByaW5nX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjaGFuLVx1MDAzZXNrYl9yaW5nW2ldID0ga3phbGxvY19vYmooKmNoYW4tXHUwMDNlc2tiX3JpbmdbaV0pO1xuJiM0MztcdFx0aWYgKCFjaGFuLVx1MDAzZXNrYl9yaW5nW2ldKSB7XG4mIzQzO1x0XHRcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRcdGtmcmVlKGNoYW4tXHUwMDNlc2tiX3JpbmdbaV0pO1xuJiM0MztcdFx0XHRrZnJlZShjaGFuLVx1MDAzZXNrYl9yaW5nKTtcbiYjNDM7XHRcdFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcdFx0XHRrZnJlZShjaGFuKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjaGFuLVx1MDAzZWlzX3R4ID0gaXNfdHg7XG4mIzQzO1x0Y2hhbi1cdTAwM2VlcCA9IGVwO1xuJiM0MztcdGNoYW4tXHUwMDNlcmluZ19zaXplID0gcmluZ19zaXplO1xuJiM0MztcdGNoYW4tXHUwMDNlZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcdGlmIChpc190eCkge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2hhbi1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdHRpbWVyX3NldHVwKFx1MDAyNmNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBlcF9yeF9yZWZpbGxfdGltZXIsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNoYW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVwX2ZyZWVfZG1hX2NoYW4oc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNoYW4tXHUwMDNlY2hhbikge1xuJiM0MztcdFx0aWYgKCFjaGFuLVx1MDAzZWlzX3R4KSB7XG4mIzQzO1x0XHRcdC8qIGVwX3N0b3AoKSBzZXRzIGNsb3NpbmcgYmVmb3JlIHRlYXJkb3duLiBUYWtlIHJ4X2xvY2tcbiYjNDM7XHRcdFx0ICogc28gYW55IHJlZmlsbCB0aGF0IGFscmVhZHkgcGFzc2VkIHRoZSBjbG9zaW5nIGNoZWNrXG4mIzQzO1x0XHRcdCAqIGZpbmlzaGVzIGFuZCBubyBsYXRlciBvbmUgc3VibWl0cyBvciBhcm1zIHRoZSB0aW1lcixcbiYjNDM7XHRcdFx0ICogdGhlbiBzaHV0IGRvd24gdGhlIHRpbWVyIHNvIGl0IGNhbm5vdCBiZSByZWFybWVkXG4mIzQzO1x0XHRcdCAqIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBmcmVlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcdFx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoY2hhbi1cdTAwM2VjaGFuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuLVx1MDAzZWlzX3R4KSB7XG4mIzQzO1x0XHR3aGlsZSAoY2hhbi1cdTAwM2VyaW5nX3RhaWwgIT0gY2hhbi1cdTAwM2VyaW5nX2hlYWQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4mIzQzO1xuJiM0MztcdFx0XHRza2J1Zl9kbWEgPSBjaGFuLVx1MDAzZXNrYl9yaW5nW2NoYW4tXHUwMDNlcmluZ190YWlsIFx1MDAyNlxuJiM0MztcdFx0XHRcdFx0XHQgIChjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpXTtcbiYjNDM7XHRcdFx0aWYgKHNrYnVmX2RtYSBcdTAwMjZcdTAwMjYgc2tidWZfZG1hLVx1MDAzZXNrYikge1xuJiM0MztcdFx0XHRcdGRtYV91bm1hcF9zZyhjaGFuLVx1MDAzZWRtYV9kZXYsIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuJiM0MztcdFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYnVmX2RtYS1cdTAwM2Vza2IpO1xuJiM0MztcdFx0XHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGNoYW4tXHUwMDNlcmluZ190YWlsJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuLVx1MDAzZXNrYl9yaW5nKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjaGFuLVx1MDAzZXJpbmdfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWEgPSBjaGFuLVx1MDAzZXNrYl9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHNrYnVmX2RtYSBcdTAwMjZcdTAwMjYgIWNoYW4tXHUwMDNlaXNfdHggXHUwMDI2XHUwMDI2IHNrYnVmX2RtYS1cdTAwM2Vza2IpIHtcbiYjNDM7XHRcdFx0XHRkbWFfdW5tYXBfc2luZ2xlKGNoYW4tXHUwMDNlZG1hX2RldixcbiYjNDM7XHRcdFx0XHRcdFx0IHNrYnVmX2RtYS1cdTAwM2VkbWFfYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdFx0IGNoYW4tXHUwMDNlZXAtXHUwMDNlbWF4X2ZybV9zaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2J1Zl9kbWEtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRrZnJlZShjaGFuLVx1MDAzZXNrYl9yaW5nW2ldKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGtmcmVlKGNoYW4tXHUwMDNlc2tiX3JpbmcpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY2hhbi1cdTAwM2VjaGFuKVxuJiM0MztcdFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcbiYjNDM7XHRrZnJlZShjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXAtXHUwMDNldHhfY2hhbnMpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRlcF9mcmVlX2RtYV9jaGFuKGVwLVx1MDAzZXR4X2NoYW5zW2ldKTtcbiYjNDM7XHRcdGtmcmVlKGVwLVx1MDAzZXR4X2NoYW5zKTtcbiYjNDM7XHRcdGVwLVx1MDAzZXR4X2NoYW5zID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVwLVx1MDAzZXJ4X2NoYW5zKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cdTAwM2VyeF9jaGFuc1tpXSk7XG4mIzQzO1x0XHRrZnJlZShlcC1cdTAwM2VyeF9jaGFucyk7XG4mIzQzO1x0XHRlcC1cdTAwM2VyeF9jaGFucyA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVwX2luaXRfZG1hZW5naW5lKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXG4mIzQzO3tcbiYjNDM7XHRpbnQgdHhfYWxsb2NhdGVkID0gMCwgcnhfYWxsb2NhdGVkID0gMDtcbiYjNDM7XHRjaGFyIG5hbWVbMTZdO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGVwLVx1MDAzZXR4X2NoYW5zID0ga2NhbGxvYyhlcC1cdTAwM2VudW1fdHhfcXVldWVzLCBzaXplb2YoKmVwLVx1MDAzZXR4X2NoYW5zKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZXAtXHUwMDNldHhfY2hhbnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZXAtXHUwMDNlcnhfY2hhbnMgPSBrY2FsbG9jKGVwLVx1MDAzZW51bV9yeF9xdWV1ZXMsIHNpemVvZigqZXAtXHUwMDNlcnhfY2hhbnMpLFxuJiM0MztcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFlcC1cdTAwM2VyeF9jaGFucykge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdHg7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDt0eF9jaGFuJXVcJiMzNDssIGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSk7XG4mIzQzO1x0XHRlcC1cdTAwM2V0eF9jaGFuc1tpXSA9IGVwX2FsbG9jX2RtYV9jaGFuKGVwLCBuYW1lLCB0cnVlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgVFhfQkRfTlVNX0RFRkFVTFQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihlcC1cdTAwM2V0eF9jaGFuc1tpXSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihlcC1cdTAwM2V0eF9jaGFuc1tpXSk7XG4mIzQzO1x0XHRcdGVwLVx1MDAzZXR4X2NoYW5zW2ldID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHR4X2FsbG9jYXRlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDtyeF9jaGFuJXVcJiMzNDssIGVwLVx1MDAzZXJ4X2NoYW5fbnVtW2ldKTtcbiYjNDM7XHRcdGVwLVx1MDAzZXJ4X2NoYW5zW2ldID0gZXBfYWxsb2NfZG1hX2NoYW4oZXAsIG5hbWUsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgUlhfQkRfTlVNX0RFRkFVTFQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihlcC1cdTAwM2VyeF9jaGFuc1tpXSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihlcC1cdTAwM2VyeF9jaGFuc1tpXSk7XG4mIzQzO1x0XHRcdGVwLVx1MDAzZXJ4X2NoYW5zW2ldID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJ4X2FsbG9jYXRlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFlcF9yeF9yZWZpbGwoZXAtXHUwMDNlcnhfY2hhbnNbaV0sIGZhbHNlKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGVwLVx1MDAzZWRldiwgXCYjMzQ7UlggY2hhbm5lbCAlZDogbm8gZGVzY3JpcHRvcnMgYXJtZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0aSk7XG4mIzQzO1x0XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2ZyZWVfY2hhbnM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlX2NoYW5zOlxuJiM0MztcdFdSSVRFX09OQ0UoZXAtXHUwMDNlY2xvc2luZywgdHJ1ZSk7XG4mIzQzO1x0d2hpbGUgKC0tcnhfYWxsb2NhdGVkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXHUwMDNlcnhfY2hhbnNbcnhfYWxsb2NhdGVkXSk7XG4mIzQzO1x0d2hpbGUgKC0tdHhfYWxsb2NhdGVkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXHUwMDNldHhfY2hhbnNbdHhfYWxsb2NhdGVkXSk7XG4mIzQzO1x0a2ZyZWUoZXAtXHUwMDNlcnhfY2hhbnMpO1xuJiM0MztcdGVwLVx1MDAzZXJ4X2NoYW5zID0gTlVMTDtcbiYjNDM7ZXJyX2ZyZWVfdHg6XG4mIzQzO1x0a2ZyZWUoZXAtXHUwMDNldHhfY2hhbnMpO1xuJiM0MztcdGVwLVx1MDAzZXR4X2NoYW5zID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZyA9IHsgLnJlc2V0ID0gMSB9O1xuJiM0MztcdHN0cnVjdCBkbWFfY2hhbiAqcmVzZXRfY2hhbjtcbiYjNDM7XHRjaGFyIG5hbWVbMTZdO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7dHhfY2hhbiV1XCYjMzQ7LCBlcC1cdTAwM2V0eF9kbWFfY2hhbl9tYXBbMF0pO1xuJiM0MztcdHJlc2V0X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVx1MDAzZWRldiwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihyZXNldF9jaGFuKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgUFRSX0VSUihyZXNldF9jaGFuKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZXF1ZXN0ICVzIGZvciByZXNldFxcblwmIzM0OywgbmFtZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhpbGlueF92ZG1hX2NoYW5uZWxfc2V0X2NvbmZpZyhyZXNldF9jaGFuLCBcdTAwMjZjZmcpO1xuJiM0MztcdGRtYV9yZWxlYXNlX2NoYW5uZWwocmVzZXRfY2hhbik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlc2V0IERNQSBjb250cm9sbGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBhcnNlIHRoZSBcJiMzNDt0eC1xdWV1ZXMtY29uZmlnXCYjMzQ7IGNoaWxkIG9mIHRoZSBFUCBub2RlLiBUaGUgbG9naWNhbCBxdWV1ZVxuJiM0MzsgKiBpbmRleCBpcyB0YWtlbiBmcm9tIHRoZSBcJiMzNDtxdWV1ZVx1MDAzY05cdTAwM2VcJiMzNDsgbm9kZSBuYW1lLCBzbyB0aGUgbWFwcGluZyBkb2VzIG5vdFxuJiM0MzsgKiBkZXBlbmQgb24gdGhlIG9yZGVyIHRoZSBjaGlsZCBub2RlcyBhcHBlYXIgaW4gdGhlIGRldmljZSB0cmVlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBlcF9wYXJzZV90eF9xdWV1ZV9jb25maWcoc3RydWN0IHhsbnhfdHNuX2VwICplcCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9ub2RlICp0eGNmZ19ucCwgdTE2IHR4X3ByZXNlbnQpXG4mIzQzO3tcbiYjNDM7XHRERUNMQVJFX0JJVE1BUChxdWV1ZV9zZWVuLCBUU05fTUFYX1RYX1FVRVVFKSA9IHt9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKGNoYW5fc2VlbiwgVFNOX01BWF9UWF9RVUVVRSkgPSB7fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY291bnQgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHR4Y2ZnX25wLCBxbm9kZSkge1xuJiM0MztcdFx0dTMyIGNoYW4sIHF1ZXVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3RyX2hhc19wcmVmaXgocW5vZGUtXHUwMDNlbmFtZSwgXCYjMzQ7cXVldWVcJiMzNDspIHx8XG4mIzQzO1x0XHQgICAga3N0cnRvdTMyKHFub2RlLVx1MDAzZW5hbWUgJiM0Mzsgc3RybGVuKFwmIzM0O3F1ZXVlXCYjMzQ7KSwgMTAsIFx1MDAyNnF1ZXVlKSB8fFxuJiM0MztcdFx0ICAgIHF1ZXVlIFx1MDAzZT0gZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcylcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt0eC1jb25maWc6IGludmFsaWQgcXVldWUgbm9kZSAlcE9GbiAoaGF2ZSAldSBxdWV1ZXMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBxbm9kZSwgZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQocXVldWUsIHF1ZXVlX3NlZW4pKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3R4LWNvbmZpZzogcXVldWUgJXUgZGVzY3JpYmVkIHR3aWNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBxdWV1ZSk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocW5vZGUsIFwmIzM0O3hsbngsZG1hLWNoYW5uZWwtbnVtXCYjMzQ7LCBcdTAwMjZjaGFuKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt0eC1jb25maWc6IHF1ZXVlICV1IG1pc3NpbmcgeGxueCxkbWEtY2hhbm5lbC1udW1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIHF1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY2hhbiBcdTAwM2U9IFRTTl9NQVhfVFhfUVVFVUUgfHwgISh0eF9wcmVzZW50IFx1MDAyNiBCSVQoY2hhbikpKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3R4LWNvbmZpZzogcXVldWUgJXUgbWFwcyB0byBjaGFubmVsICV1IG5vdCBwcmVzZW50IGluIGRtYS1uYW1lc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcXVldWUsIGNoYW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW4sIGNoYW5fc2VlbikpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dHgtY29uZmlnOiBjaGFubmVsICV1IGFscmVhZHkgYXNzaWduZWQgdG8gYW5vdGhlciBxdWV1ZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgY2hhbik7XG4mIzQzO1xuJiM0MztcdFx0ZXAtXHUwMDNldHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9IGNoYW47XG4mIzQzO1x0XHRjb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgIT0gZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O3R4LWNvbmZpZzogZGVzY3JpYmVkICV1IHF1ZXVlcyBidXQgZXhwZWN0ZWQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBjb3VudCwgZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVwX2NvdW50X2RtYV9xdWV1ZXMoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKm91dF90eCwgdTMyICpvdXRfcngsXG4mIzQzO1x0XHRcdCAgICAgICB1MTYgKnR4X3ByZXNlbnQsIHUzMiAqcnhfY2hhbl9udW0pXG4mIzQzO3tcbiYjNDM7XHR1MzIgdHggPSAwLCByeCA9IDA7XG4mIzQzO1x0dTE2IHJ4X3ByZXNlbnQgPSAwO1xuJiM0MztcdGludCBuLCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdG4gPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKGRldi1cdTAwM2VvZl9ub2RlLCBcJiMzNDtkbWEtbmFtZXNcJiMzNDspO1xuJiM0MztcdGlmIChuIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBuLCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBkbWEtbmFtZXNcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRcdHNpemVfdCBwbGVuO1xuJiM0MztcdFx0dTMyIGlkeDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZG1hLW5hbWVzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgaSwgXHUwMDI2bmFtZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxcblwmIzM0OywgaSk7XG4mIzQzO1xuJiM0MztcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwmIzM0O3R4X2NoYW5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKGtzdHJ0b3UzMihuYW1lICYjNDM7IHBsZW4sIDEwLCBcdTAwMjZpZHgpIHx8XG4mIzQzO1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1RYX1FVRVVFKVxuJiM0MztcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcJiMzNDtpbnZhbGlkIFRYIGNoYW5uZWwgbmFtZSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBuYW1lKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgqdHhfcHJlc2VudCBcdTAwMjYgQklUKGlkeCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFwmIzM0O2R1cGxpY2F0ZSBUWCBjaGFubmVsICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRcdFx0KnR4X3ByZXNlbnQgfD0gQklUKGlkeCk7XG4mIzQzO1x0XHRcdHR4JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwmIzM0O3J4X2NoYW5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKGtzdHJ0b3UzMihuYW1lICYjNDM7IHBsZW4sIDEwLCBcdTAwMjZpZHgpIHx8XG4mIzQzO1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1JYX1FVRVVFKVxuJiM0MztcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcJiMzNDtpbnZhbGlkIFJYIGNoYW5uZWwgbmFtZSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBuYW1lKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyeF9wcmVzZW50IFx1MDAyNiBCSVQoaWR4KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZHVwbGljYXRlIFJYIGNoYW5uZWwgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRyeF9wcmVzZW50IHw9IEJJVChpZHgpO1xuJiM0MztcdFx0XHRyeF9jaGFuX251bVtyeF0gPSBpZHg7XG4mIzQzO1x0XHRcdHJ4JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7dW5yZWNvZ25pc2VkIGRtYS1uYW1lcyBlbnRyeSAlc1xcblwmIzM0OywgbmFtZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXR4KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7bm8gVFggY2hhbm5lbHMgaW4gZG1hLW5hbWVzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyeClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O25vIFJYIGNoYW5uZWxzIGluIGRtYS1uYW1lc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdCpvdXRfdHggPSB0eDtcbiYjNDM7XHQqb3V0X3J4ID0gcng7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlcF9mcmVlX3BvcnRfbWQoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGVwLVx1MDAzZXBvcnRfbWRbaV0pIHtcbiYjNDM7XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2ZXAtXHUwMDNlcG9ydF9tZFtpXS1cdTAwM2Vkc3QpO1xuJiM0MztcdFx0XHRlcC1cdTAwM2Vwb3J0X21kW2ldID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXBfYWxsb2NfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IFRTTl9UVVNFUl9QT1JUX01BQzE7IGkgXHUwMDNjPSBUU05fVFVTRVJfUE9SVF9NQUMyOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG1ldGFkYXRhX2RzdCAqbWQ7XG4mIzQzO1xuJiM0MztcdFx0bWQgPSBtZXRhZGF0YV9kc3RfYWxsb2MoMCwgTUVUQURBVEFfSFdfUE9SVF9NVVgsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFtZCkge1xuJiM0MztcdFx0XHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1kLVx1MDAzZXUucG9ydF9pbmZvLnBvcnRfaWQgPSBpO1xuJiM0MztcdFx0ZXAtXHUwMDNlcG9ydF9tZFtpXSA9IG1kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeGxueF90c25fZXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHUzMiByeF9jaGFuX251bVtUU05fTUFYX1JYX1FVRVVFXTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wO1xuJiM0MztcdHUzMiBudW1fdHgsIG51bV9yeCwgbnVtX3ByaW87XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICppcF9ucDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwO1xuJiM0MztcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1MTYgdHhfcHJlc2VudCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXBfY291bnRfZG1hX3F1ZXVlcyhkZXYsIFx1MDAyNm51bV90eCwgXHUwMDI2bnVtX3J4LCBcdTAwMjZ0eF9wcmVzZW50LCByeF9jaGFuX251bSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlwX25wID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4mIzQzO1x0aWYgKCFpcF9ucClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXCYjMzQ7bWlzc2luZyBwYXJlbnQgSVAgbm9kZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGlwX25wLCBcJiMzNDt4bG54LG51bS1wcmlvcml0aWVzXCYjMzQ7LCBcdTAwMjZudW1fcHJpbyk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQoaXBfbnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7bWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eCAhPSBudW1fcHJpbylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1RYIGNoYW5uZWwgY291bnQgJXUgbXVzdCBlcXVhbCBudW0tcHJpb3JpdGllcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG51bV90eCwgbnVtX3ByaW8pO1xuJiM0MztcbiYjNDM7XHRuZGV2ID0gYWxsb2NfbmV0ZGV2X21xcyhzaXplb2YoKmVwKSwgXCYjMzQ7ZXAlZFwmIzM0OywgTkVUX05BTUVfRU5VTSxcbiYjNDM7XHRcdFx0XHRldGhlcl9zZXR1cCwgbnVtX3R4LCBudW1fcngpO1xuJiM0MztcdGlmICghbmRldilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpO1xuJiM0MztcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmVwX25ldGRldl9vcHM7XG4mIzQzO1x0bmRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmVwX2V0aHRvb2xfb3BzO1xuJiM0MztcdG5kZXYtXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHO1xuJiM0MztcbiYjNDM7XHRlcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGVwLVx1MDAzZW5kZXYgPSBuZGV2O1xuJiM0MztcdGVwLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRlcC1cdTAwM2VudW1fdHhfcXVldWVzID0gbnVtX3R4O1xuJiM0MztcdGVwLVx1MDAzZW51bV9yeF9xdWV1ZXMgPSBudW1fcng7XG4mIzQzO1x0ZXAtXHUwMDNlbWF4X2ZybV9zaXplID0gVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkU7XG4mIzQzO1x0bWVtY3B5KGVwLVx1MDAzZXJ4X2NoYW5fbnVtLCByeF9jaGFuX251bSwgbnVtX3J4ICogc2l6ZW9mKCpyeF9jaGFuX251bSkpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUU05fTUFYX1RYX1FVRVVFOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSA9IFRTTl9ETUFfQ0hfSU5WQUxJRDtcbiYjNDM7XG4mIzQzO1x0dHhjZmdfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7dHgtcXVldWVzLWNvbmZpZ1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCF0eGNmZ19ucCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O21pc3NpbmcgdHgtcXVldWVzLWNvbmZpZyBub2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfbmRldjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQodHhjZmdfbnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG9cbiYjNDM7XHQgKiBnYXRlIG9uIHRoZSBNQ0RNQSBwcm92aWRlciBiZWluZyBib3VuZC4gVGhpcyBrZWVwcyAtRVBST0JFX0RFRkVSIGluXG4mIzQzO1x0ICogdGhlIHByb2JlIHBhdGgsIHNvIHRoZSBuZXRkZXYgaXMgb25seSByZWdpc3RlcmVkIG9uY2UgdGhlIHByb3ZpZGVyIGlzXG4mIzQzO1x0ICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gZXBfcmVzZXRfZG1hX2NvbnRyb2xsZXIoZXApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtXHUwMDNlb2Zfbm9kZSwgbWFjX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikge1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uZGV2O1xuJiM0MztcdH0gZWxzZSBpZiAoIXJldCBcdTAwMjZcdTAwMjYgaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpIHtcbiYjNDM7XHRcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbiYjNDM7XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7bm8gdmFsaWQgTUFDIGluIERULCB1c2luZyByYW5kb20gYWRkcmVzcyAlcE1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBuZGV2LVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGVwX2FsbG9jX3BvcnRfbWQoZXApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBwZXItcG9ydCBtZXRhZGF0YVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlcCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgbmV0IGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZnJlZV9tZDpcbiYjNDM7XHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuJiM0MztlcnJfZnJlZV9uZGV2OlxuJiM0MztcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhsbnhfdHNuX2VwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldihlcC1cdTAwM2VuZGV2KTtcbiYjNDM7XHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuJiM0MztcdGZyZWVfbmV0ZGV2KGVwLVx1MDAzZW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4bG54X3Rzbl9lcF9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHRzbi1lcC1tYWNcJiMzNDsgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGxueF90c25fZXBfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXIgPSB7XG4mIzQzO1x0LnByb2JlXHQ9IHhsbnhfdHNuX2VwX3Byb2JlLFxuJiM0MztcdC5yZW1vdmVcdD0geGxueF90c25fZXBfcmVtb3ZlLFxuJiM0MztcdC5kcml2ZXJcdD0ge1xuJiM0MztcdFx0Lm5hbWVcdFx0PSBEUklWRVJfTkFNRSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZVx0PSB4bG54X3Rzbl9lcF9vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDMzYTAwZGQ2ZDE1ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX21haW4uY1xuQEAgLTAsMCAmIzQzOzEsMTA3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaW1lIFNlbnNpdGl2ZSBOZXR3b3JraW5nIChUU04pIEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlci5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF90c24uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBUU05fTlVNX0NMT0NLU1x0XHQ2XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhsbnhfdHNuX2lwIC0gd3JhcHBlci1wcml2YXRlIElQIHN0YXRlXG4mIzQzOyAqIEBjbGtzOiBidWxrLW1hbmFnZWQgSVAgY2xvY2tzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgeGxueF90c25faXAge1xuJiM0MztcdHN0cnVjdCBjbGtfYnVsa19kYXRhIGNsa3NbVFNOX05VTV9DTE9DS1NdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0c25fY2xrX25hbWVzW1RTTl9OVU1fQ0xPQ0tTXSA9IHtcbiYjNDM7XHRcJiMzNDtndHhcJiMzNDssXG4mIzQzO1x0XCYjMzQ7Z3R4OTBcJiMzNDssXG4mIzQzO1x0XCYjMzQ7aG9zdF9yeGZpZm9cJiMzNDssXG4mIzQzO1x0XCYjMzQ7aG9zdF90eGZpZm9cJiMzNDssXG4mIzQzO1x0XCYjMzQ7cmVmXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3NfYXhpXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdHNuX2Nsa19idWxrX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9pcCAqdyA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdGNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKFRTTl9OVU1fQ0xPQ0tTLCB3LVx1MDAzZWNsa3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRzbl9pcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2lwICp3O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHcgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKncpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXcpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFRTTl9OVU1fQ0xPQ0tTOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHctXHUwMDNlY2xrc1tpXS5pZCA9IHRzbl9jbGtfbmFtZXNbaV07XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX2J1bGtfZ2V0KGRldiwgVFNOX05VTV9DTE9DS1MsIHctXHUwMDNlY2xrcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2Nrc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKFRTTl9OVU1fQ0xPQ0tTLCB3LVx1MDAzZWNsa3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBjbG9ja3NcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB0c25fY2xrX2J1bGtfZGlzYWJsZSwgdyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRzbl9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRzbl9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0c25fZHJpdmVyID0ge1xuJiM0MztcdC5wcm9iZSA9IHRzbl9pcF9wcm9iZSxcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDt4aWxpbngtdHNuXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gdHNuX29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IHRzbl9kcml2ZXJzW10gPSB7XG4mIzQzO1x0XHUwMDI2dHNuX2RyaXZlcixcbiYjNDM7XHRcdTAwMjZ4bG54X3Rzbl9lcF9kcml2ZXIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCB4bG54X3Rzbl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGxhdGZvcm1fcmVnaXN0ZXJfZHJpdmVycyh0c25fZHJpdmVycywgQVJSQVlfU0laRSh0c25fZHJpdmVycykpO1xuJiM0Mzt9XG4mIzQzO21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19leGl0IHhsbnhfdHNuX2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHBsYXRmb3JtX3VucmVnaXN0ZXJfZHJpdmVycyh0c25fZHJpdmVycywgQVJSQVlfU0laRSh0c25fZHJpdmVycykpO1xuJiM0Mzt9XG4mIzQzO21vZHVsZV9leGl0KHhsbnhfdHNuX2V4aXQpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjdkYWRlZTBiNjNlZGNkYzkzNTNlNGI2MWY4NGZlYTRkNDNjYjMyNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjI6MTc6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40ZTY1ZDE3MTBkYTc4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbApAQCAtMCwwICYjNDM7MSwzNjQgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAgaW1wbGVtZW50cyBJRUVFIDgwMi4xIFRpbWUtU2Vuc2l0aXZlCiYjNDM7ICBOZXR3b3JraW5nIChUU04pIHN0YW5kYXJkcyBhbmQgcHJvdmlkZXMgbG93LWxhdGVuY3kgbmV0d29yayBjb25uZWN0aXZpdHkKJiM0MzsgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydAomIzQzOyAgc3dpdGNoLCB3aXRoIHR3byBwb3J0cyBjb25uZWN0ZWQgdG8gdGhlIGV4dGVybmFsIG5ldHdvcmsgYW5kIG9uZSBwb3J0CiYjNDM7ICBjb25uZWN0ZWQgdG8gYW4gaW50ZXJuYWwgZW5kcG9pbnQuIEl0IGFsc28gc3VwcG9ydHMgR01JSS9SR01JSSBpbnRlcmZhY2VzCiYjNDM7ICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdAomIzQzOyAgMTAwIE1iL3MgYW5kIDEgR2IvcyBzcGVlZHMuCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIFNyaW5pdmFzIE5lZWxpICZsdDtzcmluaXZhcy5uZWVsaUBhbWQuY29tJmd0OwomIzQzOyAgLSBOYWdhZGhlZXJhaiBSb3R0ZWxhICZsdDtuYWdhZGhlZXJhai5yb3R0ZWxhQGFtZC5jb20mZ3Q7CiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGNvbnN0OiB4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUWCBjbG9jayBmb3IgdHJhbnNtaXR0ZXIgbG9naWMgYW5kIFJUQwomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUWCA5MC1kZWdyZWUgcGhhc2Ugc2hpZnRlZCBjbG9jayBmb3IgUkdNSUkKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFJYIEZJRk8gY2xvY2sKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFRYIEZJRk8gY2xvY2sKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgY2xvY2sgZm9yIElERUxBWSBjb250cm9sCiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogQVhJLUxpdGUgcmVnaXN0ZXIgaW50ZXJmYWNlIGNsb2NrCiYjNDM7CiYjNDM7ICBjbG9jay1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBjb25zdDogZ3R4CiYjNDM7ICAgICAgLSBjb25zdDogZ3R4OTAKJiM0MzsgICAgICAtIGNvbnN0OiBob3N0X3J4ZmlmbwomIzQzOyAgICAgIC0gY29uc3Q6IGhvc3RfdHhmaWZvCiYjNDM7ICAgICAgLSBjb25zdDogcmVmCiYjNDM7ICAgICAgLSBjb25zdDogc19heGkKJiM0MzsKJiM0MzsgIHJhbmdlczogdHJ1ZQomIzQzOwomIzQzOyAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OgomIzQzOyAgICBjb25zdDogMQomIzQzOwomIzQzOyAgJiMzOTsjc2l6ZS1jZWxscyYjMzk7OgomIzQzOyAgICBjb25zdDogMQomIzQzOwomIzQzOyAgeGxueCxudW0tcHJpb3JpdGllczoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyCiYjNDM7ICAgIG1pbmltdW06IDIKJiM0MzsgICAgbWF4aW11bTogOAomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBOdW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzIChwcmlvcml0aWVzKSBjb25maWd1cmVkIGluIHRoZSBJUC4KJiM0MzsgICAgICBUaGlzIGlzIGFuIElQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mCiYjNDM7ICAgICAgcHJpb3JpdHkgcXVldWVzIGF2YWlsYWJsZSBmb3IgUW9TIHNjaGVkdWxpbmcuIFRyYWZmaWMgY2xhc3NlcyBtYXAgdG8KJiM0MzsgICAgICBJRUVFIDgwMi4xUSBwcmlvcml0eSBsZXZlbHMgKDAtNykuCiYjNDM7CiYjNDM7cGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAmIzM0O15ldGhlcm5ldEBbMC05YS1mXSYjNDM7JCYjMzQ7OgomIzQzOyAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCMKJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBFbmRwb2ludCBNQUMgc3ViLW5vZGUuIFByb3ZpZGVzIHRoZSBob3N0LXNpZGUgZGF0YSBwYXRoIHRocm91Z2ggdGhlCiYjNDM7ICAgICAgRE1BIGNoYW5uZWxzIGRlc2NyaWJlZCBieSBpdHMgZG1hcyAvIGRtYS1uYW1lcy4KJiM0MzsgICAgcHJvcGVydGllczoKJiM0MzsgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgY29uc3Q6IHhsbngsdHNuLWVwLW1hYwomIzQzOwomIzQzOyAgICAgIHJlZzoKJiM0MzsgICAgICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICAgICAgZG1hczoKJiM0MzsgICAgICAgIG1pbkl0ZW1zOiAyCiYjNDM7ICAgICAgICBtYXhJdGVtczogMTYKJiM0MzsKJiM0MzsgICAgICBkbWEtbmFtZXM6CiYjNDM7ICAgICAgICBtaW5JdGVtczogMgomIzQzOyAgICAgICAgbWF4SXRlbXM6IDE2CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgcGF0dGVybjogJiMzNDteKHR4fHJ4KV9jaGFuWzAtN10kJiMzNDsKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOiB8CiYjNDM7ICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICYjMzk7ZG1hcyYjMzk7LCBvbmUgcGVyIERNQSBjaGFubmVsIGFuZCBpbgomIzQzOyAgICAgICAgICB0aGUgc2FtZSBvcmRlci4gVFggY2hhbm5lbCBuYW1lcyB1c2UgJiMzNDt0eF9jaGFuJmx0O04mZ3Q7JiMzNDsgYW5kIFJYIGNoYW5uZWwKJiM0MzsgICAgICAgICAgbmFtZXMgdXNlICYjMzQ7cnhfY2hhbiZsdDtOJmd0OyYjMzQ7LCB3aGVyZSBOIGlzIDAuLjcuIEV4YW1wbGU6ICYjMzQ7dHhfY2hhbjAmIzM0OywKJiM0MzsgICAgICAgICAgJiMzNDt0eF9jaGFuMSYjMzQ7LCAuLi4sICYjMzQ7cnhfY2hhbjAmIzM0OywgJiMzNDtyeF9jaGFuMSYjMzQ7LCAuLi4uCiYjNDM7CiYjNDM7ICAgICAgdHgtcXVldWVzLWNvbmZpZzoKJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdAomIzQzOyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgVFggcXVldWUgY29uZmlndXJhdGlvbiBub2RlIHRoYXQgbWFwcyBJUCBwcmlvcml0eSBxdWV1ZXMgdG8KJiM0MzsgICAgICAgICAgRE1BIFRYIGNoYW5uZWxzLiBUaGUgVFNOIElQIHN1cHBvcnRzIG11bHRpcGxlIHByaW9yaXR5IHF1ZXVlcyBmb3IKJiM0MzsgICAgICAgICAgUW9TIHNjaGVkdWxpbmcsIGFuZCBlYWNoIHF1ZXVlIGNhbiBiZSBjb25uZWN0ZWQgdG8gYSBzcGVjaWZpYyBETUEKJiM0MzsgICAgICAgICAgY2hhbm5lbC4gVGhpcyBtYXBwaW5nIGRlZmluZXMgd2hpY2ggRE1BIFRYIGNoYW5uZWwgaXMgdXNlZCB0bwomIzQzOyAgICAgICAgICB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIHByaW9yaXR5IHF1ZXVlLiBGb3IgZXhhbXBsZSwgcXVldWUwCiYjNDM7ICAgICAgICAgIHdpdGggeGxueCxkbWEtY2hhbm5lbC1udW0gc2V0IHRvIDUgbWVhbnMgcHJpb3JpdHkgcXVldWUgMCB1c2VzCiYjNDM7ICAgICAgICAgIHR4X2NoYW41IGZvciBkYXRhIHRyYW5zZmVyLgomIzQzOwomIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICYjMzQ7XnF1ZXVlWzAtN10kJiMzNDs6CiYjNDM7ICAgICAgICAgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICAgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgICAgICBFYWNoIHN1Ym5vZGUgcmVwcmVzZW50cyBhIHByaW9yaXR5IHF1ZXVlLiBUaGUKJiM0MzsgICAgICAgICAgICAgIHhsbngsZG1hLWNoYW5uZWwtbnVtIHByb3BlcnR5IHNwZWNpZmllcyB3aGljaCBETUEgVFggY2hhbm5lbAomIzQzOyAgICAgICAgICAgICAgKHR4X2NoYW4wIHRvIHR4X2NoYW43KSBpcyBjb25uZWN0ZWQgdG8gdGhpcyBxdWV1ZSBmb3IKJiM0MzsgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBwYWNrZXRzLgomIzQzOyAgICAgICAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bToKJiM0MzsgICAgICAgICAgICAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyCiYjNDM7ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICAgICAgICAgIERNQSBjaGFubmVsIHRoYXQgdHJhbnNtaXRzIHRoaXMgcHJpb3JpdHkgcXVldWUsIGdpdmVuIGFzCiYjNDM7ICAgICAgICAgICAgICAgICAgdGhlIE4gb2YgdGhlIHR4X2NoYW5OIGVudHJ5IGluIGRtYS1uYW1lcy4KJiM0MzsgICAgICAgICAgICAgICAgbWluaW11bTogMAomIzQzOyAgICAgICAgICAgICAgICBtYXhpbXVtOiA3CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAgICAgICAtIHhsbngsZG1hLWNoYW5uZWwtbnVtCiYjNDM7CiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICAgIC0gcmVnCiYjNDM7ICAgICAgLSBkbWFzCiYjNDM7ICAgICAgLSBkbWEtbmFtZXMKJiM0MzsgICAgICAtIHR4LXF1ZXVlcy1jb25maWcKJiM0MzsKJiM0MzsgICYjMzQ7XnN3aXRjaEBbMC05YS1mXSYjNDM7JCYjMzQ7OgomIzQzOyAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2RzYS9kc2EueWFtbCMvJGRlZnMvZXRoZXJuZXQtcG9ydHMKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgVGhyZWUtcG9ydCBFdGhlcm5ldCBzd2l0Y2ggc3ViLW5vZGUuIENvbnRhaW5zIHRoZSBzd2l0Y2ggZmFicmljCiYjNDM7ICAgICAgcmVnaXN0ZXIgd2luZG93IGFuZCB0aGUgdHdvIHBlci1NQUMgcmVnaXN0ZXIgd2luZG93cy4gRWFjaCBwZXItTUFDCiYjNDM7ICAgICAgd2luZG93IGhvdXNlcyBhbiBNRElPIGNvbnRyb2xsZXIgYW5kIGEgUFRQIHJlZ2lzdGVyIGJsb2NrIGF0IGZpeGVkCiYjNDM7ICAgICAgb2Zmc2V0cy4gVGhlIElQJiMzOTtzIHBlci1NQUMgYW5kIFBUUC10aW1lciBpbnRlcnJ1cHRzIGFyZSBleHBvc2VkIGhlcmUuCiYjNDM7CiYjNDM7ICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgIGNvbnN0OiB4bG54LHRzbi1zd2l0Y2gKJiM0MzsKJiM0MzsgICAgICByZWc6CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogU3dpdGNoIGZhYnJpYyByZWdpc3RlciB3aW5kb3cKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMSByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUCkKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMiByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUCkKJiM0MzsKJiM0MzsgICAgICByZWctbmFtZXM6CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgLSBjb25zdDogc3dpdGNoCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IG1hYzEKJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjMgomIzQzOwomIzQzOyAgICAgIGludGVycnVwdHM6CiYjNDM7ICAgICAgICBtaW5JdGVtczogNwomIzQzOyAgICAgICAgbWF4SXRlbXM6IDcKJiM0MzsKJiM0MzsgICAgICBpbnRlcnJ1cHQtbmFtZXM6CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzEKJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzEKJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjX2lycV9tYWMxCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHB0cF90aW1lcgomIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfcnhfbWFjMgomIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfdHhfbWFjMgomIzQzOyAgICAgICAgICAtIGNvbnN0OiBtYWNfaXJxX21hYzIKJiM0MzsKJiM0MzsgICAgICBtZGlvLTE6CiYjNDM7ICAgICAgICAkcmVmOiAvc2NoZW1hcy9uZXQvbWRpby55YW1sIwomIzQzOyAgICAgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgIE1ESU8gYnVzIGNvbnRyb2xsZXIgZm9yIE1BQzEuIFJlZ2lzdGVycyByZXNpZGUgaW5zaWRlIHRoZSBtYWMxCiYjNDM7ICAgICAgICAgIHJlZy1uYW1lcyB3aW5kb3cuCiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgbWRpby0yOgomIzQzOyAgICAgICAgJHJlZjogL3NjaGVtYXMvbmV0L21kaW8ueWFtbCMKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMyLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMgomIzQzOyAgICAgICAgICByZWctbmFtZXMgd2luZG93LgomIzQzOyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgICAgICAmIzM0O14oZXRoZXJuZXQtKT9wb3J0cyQmIzM0OzoKJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdAomIzQzOyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICAmIzM5OyNhZGRyZXNzLWNlbGxzJiMzOTs6CiYjNDM7ICAgICAgICAgICAgY29uc3Q6IDEKJiM0MzsKJiM0MzsgICAgICAgICAgJiMzOTsjc2l6ZS1jZWxscyYjMzk7OgomIzQzOyAgICAgICAgICAgIGNvbnN0OiAwCiYjNDM7CiYjNDM7ICAgICAgICAgIHBvcnRAMDoKJiM0MzsgICAgICAgICAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWUKJiM0MzsgICAgICAgICAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgICAgIENQVSBwb3J0LiBXaXJlZCBpbnRlcm5hbGx5IHRvIHRoZSBlbmRwb2ludCBNQUMgc2libGluZy4KJiM0MzsKJiM0MzsgICAgICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICAgICAgcmVnOgomIzQzOyAgICAgICAgICAgICAgICBjb25zdDogMAomIzQzOwomIzQzOyAgICAgICAgICAgICAgcGh5LW1vZGU6CiYjNDM7ICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbAomIzQzOwomIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgICAgICAgLSBldGhlcm5ldAomIzQzOwomIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICYjMzQ7XnBvcnRAWzEtMl0kJiMzNDs6CiYjNDM7ICAgICAgICAgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlCiYjNDM7ICAgICAgICAgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgICAgICBFeHRlcm5hbCBFdGhlcm5ldCBwb3J0LiBwb3J0QDEgaXMgd2lyZWQgdG8gTUFDMSBhbmQgcmVhY2hlZAomIzQzOyAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbWRpby0xIGJ1cywgcG9ydEAyIGlzIHdpcmVkIHRvIE1BQzIgYW5kIHJlYWNoZWQKJiM0MzsgICAgICAgICAgICAgIHRocm91Z2ggdGhlIG1kaW8tMiBidXMuCiYjNDM7CiYjNDM7ICAgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICAgIHJlZzoKJiM0MzsgICAgICAgICAgICAgICAgZW51bTogWzEsIDJdCiYjNDM7CiYjNDM7ICAgICAgICAgICAgICBwaHktbW9kZToKJiM0MzsgICAgICAgICAgICAgICAgZW51bToKJiM0MzsgICAgICAgICAgICAgICAgICAtIGdtaWkKJiM0MzsgICAgICAgICAgICAgICAgICAtIHJnbWlpCiYjNDM7ICAgICAgICAgICAgICAgICAgLSByZ21paS1pZAomIzQzOwomIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgICAgICAgLSByZWcKJiM0MzsgICAgICAgICAgICAgIC0gcGh5LW1vZGUKJiM0MzsgICAgICAgICAgICAgIC0gcGh5LWhhbmRsZQomIzQzOwomIzQzOyAgICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAgIC0gcG9ydEAwCiYjNDM7ICAgICAgICAgIC0gcG9ydEAxCiYjNDM7ICAgICAgICAgIC0gcG9ydEAyCiYjNDM7CiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICAgIC0gcmVnCiYjNDM7ICAgICAgLSByZWctbmFtZXMKJiM0MzsgICAgICAtIGludGVycnVwdHMKJiM0MzsgICAgICAtIGludGVycnVwdC1uYW1lcwomIzQzOwomIzQzOyAgICBvbmVPZjoKJiM0MzsgICAgICAtIHJlcXVpcmVkOiBbcG9ydHNdCiYjNDM7ICAgICAgLSByZXF1aXJlZDogW2V0aGVybmV0LXBvcnRzXQomIzQzOwomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gY2xvY2tzCiYjNDM7ICAtIGNsb2NrLW5hbWVzCiYjNDM7ICAtIHhsbngsbnVtLXByaW9yaXRpZXMKJiM0MzsgIC0gcmFuZ2VzCiYjNDM7ICAtICYjMzk7I2FkZHJlc3MtY2VsbHMmIzM5OwomIzQzOyAgLSAmIzM5OyNzaXplLWNlbGxzJiMzOTsKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICB0c25AODAwNDAwMDAgewomIzQzOyAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLTMuMCYjMzQ7OwomIzQzOyAgICAgICAgY2xvY2tzID0gJmx0OyZhbXA7bWlzY19jbGtfMiZndDssICZsdDsmYW1wO21pc2NfY2xrXzImZ3Q7LCAmbHQ7JmFtcDttaXNjX2Nsa18xJmd0OywgJmx0OyZhbXA7bWlzY19jbGtfMSZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAmbHQ7JmFtcDttaXNjX2Nsa18zJmd0OywgJmx0OyZhbXA7bWlzY19jbGtfMCZndDs7CiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7Z3R4JiMzNDssICYjMzQ7Z3R4OTAmIzM0OywgJiMzNDtob3N0X3J4ZmlmbyYjMzQ7LCAmIzM0O2hvc3RfdHhmaWZvJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICYjMzQ7cmVmJiMzNDssICYjMzQ7c19heGkmIzM0OzsKJiM0MzsgICAgICAgIHhsbngsbnVtLXByaW9yaXRpZXMgPSAmbHQ7OCZndDs7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgcmFuZ2VzID0gJmx0OzB4MCAweDgwMDQwMDAwIDB4NDAwMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXBfbWFjOiBldGhlcm5ldEAxNjAwMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eGxueCx0c24tZXAtbWFjJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MTYwMDAgMHhhMDAwJmd0OzsKJiM0MzsgICAgICAgICAgICBkbWFzID0gJmx0OyZhbXA7YXhpX21jZG1hXzAgMCZndDssICZsdDsmYW1wO2F4aV9tY2RtYV8wIDEmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAyJmd0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgJmx0OyZhbXA7YXhpX21jZG1hXzAgMyZndDssICZsdDsmYW1wO2F4aV9tY2RtYV8wIDQmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCA1Jmd0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgJmx0OyZhbXA7YXhpX21jZG1hXzAgNiZndDssICZsdDsmYW1wO2F4aV9tY2RtYV8wIDcmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAxNiZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICZsdDsmYW1wO2F4aV9tY2RtYV8wIDE3Jmd0OywgJmx0OyZhbXA7YXhpX21jZG1hXzAgMTgmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAxOSZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICZsdDsmYW1wO2F4aV9tY2RtYV8wIDIwJmd0OywgJmx0OyZhbXA7YXhpX21jZG1hXzAgMjEmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAyMiZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICZsdDsmYW1wO2F4aV9tY2RtYV8wIDIzJmd0OzsKJiM0MzsgICAgICAgICAgICBkbWEtbmFtZXMgPSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7dHhfY2hhbjEmIzM0OywgJiMzNDt0eF9jaGFuMiYjMzQ7LCAmIzM0O3R4X2NoYW4zJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eF9jaGFuNCYjMzQ7LCAmIzM0O3R4X2NoYW41JiMzNDssICYjMzQ7dHhfY2hhbjYmIzM0OywgJiMzNDt0eF9jaGFuNyYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7cnhfY2hhbjAmIzM0OywgJiMzNDtyeF9jaGFuMSYjMzQ7LCAmIzM0O3J4X2NoYW4yJiMzNDssICYjMzQ7cnhfY2hhbjMmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3J4X2NoYW40JiMzNDssICYjMzQ7cnhfY2hhbjUmIzM0OywgJiMzNDtyeF9jaGFuNiYjMzQ7LCAmIzM0O3J4X2NoYW43JiMzNDs7CiYjNDM7ICAgICAgICAgICAgdHgtcXVldWVzLWNvbmZpZyB7CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NyZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMSB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NiZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NSZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NCZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MyZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNSB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MiZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MSZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MCZndDs7IH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICBzd2l0Y2hAMzgwMDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3hsbngsdHNuLXN3aXRjaCYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDM4MDAwIDB4ODAwMCZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgJmx0OzB4MDAwMDAgMHgxNDAwMCZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgJmx0OzB4MjAwMDAgMHgxNDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgcmVnLW5hbWVzID0gJiMzNDtzd2l0Y2gmIzM0OywgJiMzNDttYWMxJiMzNDssICYjMzQ7bWFjMiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtpbnRjJmd0OzsKJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHRzID0gJmx0OzAgMiZndDssICZsdDsyIDImZ3Q7LCAmbHQ7NCAyJmd0OywgJmx0OzYgMiZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICZsdDsxIDImZ3Q7LCAmbHQ7MyAyJmd0OywgJmx0OzUgMiZndDs7CiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gJiMzNDtwdHBfcnhfbWFjMSYjMzQ7LCAmIzM0O3B0cF90eF9tYWMxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDttYWNfaXJxX21hYzEmIzM0OywgJiMzNDtwdHBfdGltZXImIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3B0cF9yeF9tYWMyJiMzNDssICYjMzQ7cHRwX3R4X21hYzImIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O21hY19pcnFfbWFjMiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIG1kaW8tMSB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgcGh5MDogZXRoZXJuZXQtcGh5QDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgbWRpby0yIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICBwaHkxOiBldGhlcm5ldC1waHlAMSB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1wb3J0cyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgcG9ydEAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGV0aGVybmV0ID0gJmx0OyZhbXA7ZXBfbWFjJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gJiMzNDtpbnRlcm5hbCYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSAmbHQ7MTAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CiYjNDM7ICAgICAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwb3J0QDEgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9ICZsdDsmYW1wO3BoeTAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAmIzM0O3JnbWlpLWlkJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBvcnRAMiB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MiZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gJmx0OyZhbXA7cGh5MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICYjMzQ7cmdtaWktaWQmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjIzZmI2ZjJmNGVmNC4uZmY5NGUzMTRlZWIxZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTI5OTExLDYgJiM0MzsyOTkxMSwxNCBAQCBNOglIYXJzaCBKYWluICZsdDtoLmphaW5AYW1kLmNvbSZndDsKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvY2hhci9od19yYW5kb20veGlsaW54LXRybmcuYwogCiYjNDM7WElMSU5YIFRTTiBFTkRQT0lOVCBFVEhFUk5FVCBNQUMgRFJJVkVSCiYjNDM7TToJTmFnYWRoZWVyYWogUm90dGVsYSAmbHQ7bmFnYWRoZWVyYWoucm90dGVsYUBhbWQuY29tJmd0OwomIzQzO006CVNyaW5pdmFzIE5lZWxpICZsdDtzcmluaXZhcy5uZWVsaUBhbWQuY29tJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vCiYjNDM7CiBYSUxJTlggVUFSVExJVEUgU0VSSUFMIERSSVZFUgogTToJUGV0ZXIgS29yc2dhYXJkICZsdDtqYWNtZXRAc3Vuc2l0ZS5kayZndDsKIEw6CWxpbnV4LXNlcmlhbEB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcKaW5kZXggNzUwMjIxNGNjN2Q1MC4uYzZkNzA0YzhkM2Q0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcKQEAgLTQxLDQgJiM0Mzs0MSw1IEBAIGNvbmZpZyBYSUxJTlhfTExfVEVNQUMKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDCiAJICBjb3JlIHVzZWQgaW4gWGlsaW54IFNwYXJ0YW4gYW5kIFZpcnRleCBGUEdBcwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnJiMzNDsKIGVuZGlmICMgTkVUX1ZFTkRPUl9YSUxJTlgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZQppbmRleCA3ZDdkYzE3NzE0MjNlLi42NmRhYjAxMjY1MGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlCkBAIC04LDMgJiM0Mzs4LDQgQEAgb2JqLSQoQ09ORklHX1hJTElOWF9MTF9URU1BQykgJiM0Mzs9IGxsX3RlbWFjLm8KIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUubwogeGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vCiBvYmotJChDT05GSUdfWElMSU5YX0FYSV9FTUFDKSAmIzQzOz0geGlsaW54X2VtYWMubwomIzQzO29iai0kKENPTkZJR19YSUxJTlhfVFNOKSAmIzQzOz0gdHNuLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5MmYxNzY5NDQwNDIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTYgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uCiYjNDM7IwomIzQzOwomIzQzO2NvbmZpZyBYSUxJTlhfVFNOCiYjNDM7CXRyaXN0YXRlICYjMzQ7WGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXImIzM0OwomIzQzOwlkZXBlbmRzIG9uIE9GX0FERFJFU1MKJiM0MzsJZGVwZW5kcyBvbiBYSUxJTlhfRE1BCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQU1EL1hpbGlueCBUaW1lLVNlbnNpdGl2ZSBOZXR3b3JraW5nCiYjNDM7CSAgKFRTTikgRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQLiBJdCBwcm92aWRlcyB0aGUgd3JhcHBlciBkZXZpY2UKJiM0MzsJICBhbmQgdGhlIGVuZHBvaW50IE1BQyB0aGF0IGNvbm5lY3RzIHRoZSBJUCB0byB0aGUgaG9zdCBDUFUuIFRoZQomIzQzOwkgIHRocmVlLXBvcnQgc3dpdGNoIGlzIHN1cHBvcnRlZCBieSB0aGUgY29tcGFuaW9uIERTQSBkcml2ZXIuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjU4ODY4MjhiMzg2ZjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDIgQEAKJiM0MztvYmotJChDT05GSUdfWElMSU5YX1RTTikgJiM0Mzs9IHhpbGlueF90c24ubwomIzQzO3hpbGlueF90c24teSA6PSB4aWxpbnhfdHNuX21haW4ubyB4aWxpbnhfdHNuX2VwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjA3NTdlMjJkMWZkMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oCkBAIC0wLDAgJiM0MzsxLDE1IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBkcml2ZXIsIHNoYXJlZCBkZWZpbml0aW9ucy4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWElMSU5YX1RTTl9ICiYjNDM7I2RlZmluZSBfWElMSU5YX1RTTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhsbnhfdHNuX2VwX2RyaXZlcjsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX1hJTElOWF9UU05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kYjdkYTI2NTIxZDAxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmMKQEAgLTAsMCAmIzQzOzEsMTAzNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NpcmNfYnVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS94aWxpbnhfZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYWVuZ2luZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2F0dGVybGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3hpbGlueF90c24uaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBEUklWRVJfTkFNRQkJCSYjMzQ7eGlsaW54X3Rzbl9lcCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBUU05fRE1BX0NIX0lOVkFMSUQJCTB4RkZVCiYjNDM7I2RlZmluZSBUU05fTUFYX1RYX1FVRVVFCQk4CiYjNDM7I2RlZmluZSBUU05fTUFYX1JYX1FVRVVFCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBUU05fTUFYX1ZMQU5fRlJBTUVfU0laRQkJKEVUSF9EQVRBX0xFTiAmIzQzOyBWTEFOX0VUSF9ITEVOICYjNDM7IFwKJiM0MzsJCQkJCSBFVEhfRkNTX0xFTikKJiM0MzsKJiM0MzsjZGVmaW5lIFRYX0JEX05VTV9ERUZBVUxUCQk2NAomIzQzOyNkZWZpbmUgUlhfQkRfTlVNX0RFRkFVTFQJCTEyOAomIzQzOwomIzQzOyNkZWZpbmUgRVBfUlhfUkVGSUxMX1JFVFJZCQltc2Vjc190b19qaWZmaWVzKDEwKQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIERNQSBkZXNjcmlwdG9yIHNpZGViYW5kIHN0YXR1cyB3b3JkIHBhY2tzIFRJRC9UREVTVC9UVVNFUiB0b2dldGhlcjsKJiM0MzsgKiBUVVNFUiBvY2N1cGllcyB0aGUgbG93IGJ5dGUsIFRJRC9UREVTVCBzaXQgaW4gdGhlIHVwcGVyIGJpdHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBUU05fVFVTRVJfTUFTSwkJCUdFTk1BU0soNywgMCkKJiM0MzsvKiBUVVNFUiBJbnB1dCBQb3J0IElEIGZpZWxkIChiaXRzIFs1OjRdIG9mIHRoZSBUVVNFUiBmaWVsZCkgKi8KJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0lEX01BU0sJCUdFTk1BU0soNSwgNCkKJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0VQCQkweDAKJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX01BQzEJCTB4MQomIzQzOyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfTUFDMgkJMHgyCiYjNDM7CiYjNDM7LyogU2l6ZWQgdG8gaW5kZXggcG9ydF9tZFtdIGJ5IFRVU0VSIHBvcnRfaWQgKDEgb3IgMiwgc2xvdCAwIHVudXNlZCkgKi8KJiM0MzsjZGVmaW5lIFhMTlhfVFNOX0VQX1BPUlRfTURfU0xPVFMJKFRTTl9UVVNFUl9QT1JUX01BQzIgJiM0MzsgMSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgLSBza2IgY29udGFpbmVyIGZvciBlYWNoIGluLWZsaWdodCBETUEgZGVzY3JpcHRvcgomIzQzOyAqIEBzZ2w6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgYmFja2luZyB0aGUgRE1BIG1hcHBpbmcKJiM0MzsgKiBAZGVzYzogZG1hZW5naW5lIGRlc2NyaXB0b3IgaGFuZGxlCiYjNDM7ICogQGRtYV9hZGRyZXNzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzZ2wgZW50cnkgKFJYIHBhdGgpCiYjNDM7ICogQHNrYjogU0tCIG93bmluZyB0aGUgYnVmZmVyCiYjNDM7ICogQHNnX2xlbjogbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gQHNnbCAoVFggcGF0aCkKJiM0MzsgKi8KJiM0MztzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgewomIzQzOwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dsW01BWF9TS0JfRlJBR1MgJiM0MzsgMV07CiYjNDM7CXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJaW50IHNnX2xlbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAtIG9uZSBETUEgY2hhbm5lbCBhbmQgaXRzIFNLQiByaW5nCiYjNDM7ICogQHNrYl9yaW5nOiBwZXItc2xvdCBTS0IgZGVzY3JpcHRvcnMKJiM0MzsgKiBAZXA6IHBvaW50ZXIgYmFjayB0byB0aGUgb3duaW5nIEVQIGluc3RhbmNlCiYjNDM7ICogQGNoYW46IGRtYWVuZ2luZSBjaGFubmVsIGhhbmRsZQomIzQzOyAqIEBkbWFfZGV2OiBkZXZpY2UgdXNlZCBmb3IgRE1BIG1hcHBpbmcgKHRoZSBETUEgZW5naW5lLCBub3QgdGhlIEVQKQomIzQzOyAqIEByaW5nX2hlYWQ6IHByb2R1Y2VyIGluZGV4CiYjNDM7ICogQHJpbmdfdGFpbDogY29uc3VtZXIgaW5kZXgKJiM0MzsgKiBAcmluZ19zaXplOiBudW1iZXIgb2Ygc2xvdHMgaW4gQHNrYl9yaW5nCiYjNDM7ICogQHJ4X2xvY2s6IHNlcmlhbGlzZXMgQHJpbmdfaGVhZCBiZXR3ZWVuIHRoZSBSWCBjYWxsYmFjayBhbmQgdGhlIHJlZmlsbCB0aW1lcgomIzQzOyAqIEB0eF9sb2NrOiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgYmV0d2VlbiB4bWl0IGFuZCBUWCBjb21wbGV0aW9uCiYjNDM7ICogQHJ4X3JlZmlsbF90aW1lcjogcmV0cmllcyBSWCByZWZpbGwgYWZ0ZXIgYW4gYWxsb2NhdGlvbiBmYWlsdXJlCiYjNDM7ICogQGlzX3R4OiB0cnVlIGZvciBUWCBjaGFubmVscywgZmFsc2UgZm9yIFJYCiYjNDM7ICovCiYjNDM7c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuIHsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICoqc2tiX3Jpbmc7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXA7CiYjNDM7CXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IGRldmljZSAqZG1hX2RldjsKJiM0MzsJdTMyIHJpbmdfaGVhZDsKJiM0MzsJdTMyIHJpbmdfdGFpbDsKJiM0MzsJdTMyIHJpbmdfc2l6ZTsKJiM0MzsJc3BpbmxvY2tfdCByeF9sb2NrOwkvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgKi8KJiM0MzsJc3BpbmxvY2tfdCB0eF9sb2NrOwkvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgKi8KJiM0MzsJc3RydWN0IHRpbWVyX2xpc3QgcnhfcmVmaWxsX3RpbWVyOwomIzQzOwlib29sIGlzX3R4OwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHhsbnhfdHNuX2VwIC0gRVAgTUFDIHByaXZhdGUgZGF0YSwgZW1iZWRkZWQgaW4gbmV0X2RldmljZSBwcml2IGFyZWEKJiM0MzsgKiBAbmRldjogdGhlIGNvbmR1aXQgbmV0ZGV2ICgmIzM0O2VwMCYjMzQ7IGZvciB0aGUgZmlyc3QgSVAgaW5zdGFuY2UpCiYjNDM7ICogQGRldjogYmFja2luZyBkZXZpY2UKJiM0MzsgKiBAbnVtX3R4X3F1ZXVlczogbnVtYmVyIG9mIFRYIERNQSBjaGFubmVscyAob25lIHBlciBwcmlvcml0eSkKJiM0MzsgKiBAbnVtX3J4X3F1ZXVlczogbnVtYmVyIG9mIFJYIERNQSBjaGFubmVscwomIzQzOyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLSZndDsgcGh5c2ljYWwgRE1BIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogQHJ4X2NoYW5fbnVtOiBSWCByaW5nIGluZGV4IC0mZ3Q7IHBoeXNpY2FsIERNQSBjaGFubmVsIG51bWJlcgomIzQzOyAqIEBtYXhfZnJtX3NpemU6IG1heGltdW0gZnJhbWUgc2l6ZSBhY2NlcHRlZCBvbiBSWAomIzQzOyAqIEB0eF9jaGFuczogYXJyYXkgb2YgVFggY2hhbm5lbHMgKHNpemUgQG51bV90eF9xdWV1ZXMpCiYjNDM7ICogQHJ4X2NoYW5zOiBhcnJheSBvZiBSWCBjaGFubmVscyAoc2l6ZSBAbnVtX3J4X3F1ZXVlcykKJiM0MzsgKiBAY2xvc2luZzogc2V0IGluIG5kb19zdG9wIHNvIHRoZSBSWCBjb21wbGV0aW9uIGNhbGxiYWNrIHN0b3BzIHJlLWFybWluZwomIzQzOyAqIEBwb3J0X21kOiBwZXItVFVTRVItcG9ydCBNRVRBREFUQV9IV19QT1JUX01VWCBlbnRyaWVzIGF0dGFjaGVkIG9uIFJYLAomIzQzOyAqCWluZGV4ZWQgYnkgcG9ydF9pZCAoMSBmb3IgTUFDMSwgMiBmb3IgTUFDMikKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgeGxueF90c25fZXAgewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2OwomIzQzOwl1MzIgbnVtX3R4X3F1ZXVlczsKJiM0MzsJdTMyIG51bV9yeF9xdWV1ZXM7CiYjNDM7CXUzMiB0eF9kbWFfY2hhbl9tYXBbVFNOX01BWF9UWF9RVUVVRV07CiYjNDM7CXUzMiByeF9jaGFuX251bVtUU05fTUFYX1JYX1FVRVVFXTsKJiM0MzsJdTMyIG1heF9mcm1fc2l6ZTsKJiM0MzsKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoqdHhfY2hhbnM7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnJ4X2NoYW5zOwomIzQzOwomIzQzOwlib29sIGNsb3Npbmc7CiYjNDM7CiYjNDM7CXN0cnVjdCBtZXRhZGF0YV9kc3QgKnBvcnRfbWRbWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UU107CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqCiYjNDM7ZXBfZ2V0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiwgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CXJldHVybiB4Y2hhbi0mZ3Q7c2tiX3JpbmdbaWR4XTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfcnhfc3VibWl0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZG1hX3J4X2Rlc2M7CiYjNDM7CXN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hOwomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0geGNoYW4tJmd0O2VwOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlkbWFfYWRkcl90IGFkZHI7CiYjNDM7CiYjNDM7CXNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi0mZ3Q7cmluZ19oZWFkICZhbXA7ICh4Y2hhbi0mZ3Q7cmluZ19zaXplIC0gMSkpOwomIzQzOwlpZiAoIXNrYnVmX2RtYSkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwomIzQzOwlza2IgPSBkZXZfYWxsb2Nfc2tiKGVwLSZndDttYXhfZnJtX3NpemUpOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlzZ19pbml0X3RhYmxlKHNrYnVmX2RtYS0mZ3Q7c2dsLCAxKTsKJiM0MzsJYWRkciA9IGRtYV9tYXBfc2luZ2xlKHhjaGFuLSZndDtkbWFfZGV2LCBza2ItJmd0O2RhdGEsIGVwLSZndDttYXhfZnJtX3NpemUsCiYjNDM7CQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHhjaGFuLSZndDtkbWFfZGV2LCBhZGRyKSkpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJZGV2X3dhcm4oZXAtJmd0O2RldiwgJiMzNDtETUEgbWFwcGluZyBlcnJvciBvbiBSWCBzdWJtaXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfc2tiOwomIzQzOwl9CiYjNDM7CXNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS0mZ3Q7c2dsKSA9IGFkZHI7CiYjNDM7CXNnX2RtYV9sZW4oc2tidWZfZG1hLSZndDtzZ2wpID0gZXAtJmd0O21heF9mcm1fc2l6ZTsKJiM0MzsJZG1hX3J4X2Rlc2MgPSBkbWFlbmdpbmVfcHJlcF9zbGF2ZV9zZyh4Y2hhbi0mZ3Q7Y2hhbiwgc2tidWZfZG1hLSZndDtzZ2wsCiYjNDM7CQkJCQkgICAgICAxLCBETUFfREVWX1RPX01FTSwKJiM0MzsJCQkJCSAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7CiYjNDM7CWlmICghZG1hX3J4X2Rlc2MpCiYjNDM7CQlnb3RvIGVycl91bm1hcF9za2I7CiYjNDM7CiYjNDM7CXNrYnVmX2RtYS0mZ3Q7c2tiID0gc2tiOwomIzQzOwlza2J1Zl9kbWEtJmd0O2RtYV9hZGRyZXNzID0gc2dfZG1hX2FkZHJlc3Moc2tidWZfZG1hLSZndDtzZ2wpOwomIzQzOwlza2J1Zl9kbWEtJmd0O2Rlc2MgPSBkbWFfcnhfZGVzYzsKJiM0MzsJZG1hX3J4X2Rlc2MtJmd0O2NhbGxiYWNrX3BhcmFtID0geGNoYW47CiYjNDM7CWRtYV9yeF9kZXNjLSZndDtjYWxsYmFja19yZXN1bHQgPSBlcF9kbWFfcnhfY2I7CiYjNDM7CXhjaGFuLSZndDtyaW5nX2hlYWQmIzQzOyYjNDM7OwomIzQzOwlkbWFlbmdpbmVfc3VibWl0KGRtYV9yeF9kZXNjKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3VubWFwX3NrYjoKJiM0MzsJZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi0mZ3Q7ZG1hX2RldiwgYWRkciwgZXAtJmd0O21heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKJiM0MztlcnJfZnJlZV9za2I6CiYjNDM7CWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGVwX3J4X3JlZmlsbChzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuLCBib29sIGFybV90aW1lcikKJiM0Mzt7CiYjNDM7CWludCBhdmFpbCwgaTsKJiM0MzsKJiM0MzsJZ3VhcmQoc3BpbmxvY2tfYmgpKCZhbXA7eGNoYW4tJmd0O3J4X2xvY2spOwomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKHhjaGFuLSZndDtlcC0mZ3Q7Y2xvc2luZykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWF2YWlsID0gQ0lSQ19TUEFDRSh4Y2hhbi0mZ3Q7cmluZ19oZWFkLCBSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCksCiYjNDM7CQkJICAgeGNoYW4tJmd0O3Jpbmdfc2l6ZSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhdmFpbDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChlcF9yeF9zdWJtaXRfZGVzYyh4Y2hhbikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoeGNoYW4tJmd0O2NoYW4pOwomIzQzOwomIzQzOwlpZiAoeGNoYW4tJmd0O3JpbmdfaGVhZCAhPSBSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGFybV90aW1lcikKJiM0MzsJCW1vZF90aW1lcigmYW1wO3hjaGFuLSZndDtyeF9yZWZpbGxfdGltZXIsIGppZmZpZXMgJiM0MzsgRVBfUlhfUkVGSUxMX1JFVFJZKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlcF9yeF9yZWZpbGxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gdGltZXJfY29udGFpbmVyX29mKHhjaGFuLCB0LAomIzQzOwkJCQkJCQkgICAgICAgcnhfcmVmaWxsX3RpbWVyKTsKJiM0MzsKJiM0MzsJZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CXNpemVfdCBtZXRhX2xlbiwgbWV0YV9tYXhfbGVuLCByeF9sZW47CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSB4Y2hhbi0mZ3Q7ZXA7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZXAtJmd0O25kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXUzMiBwb3J0X2lkLCB0dXNlcjsKJiM0MzsJdTMyICptZXRhZGF0YTsKJiM0MzsKJiM0MzsJc2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLSZndDtyaW5nX3RhaWwgJmFtcDsgKHhjaGFuLSZndDtyaW5nX3NpemUgLSAxKSk7CiYjNDM7CVdSSVRFX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCwgeGNoYW4tJmd0O3JpbmdfdGFpbCAmIzQzOyAxKTsKJiM0MzsJc2tiID0gc2tidWZfZG1hLSZndDtza2I7CiYjNDM7CXNrYnVmX2RtYS0mZ3Q7c2tiID0gTlVMTDsKJiM0MzsKJiM0MzsJZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi0mZ3Q7ZG1hX2Rldiwgc2tidWZfZG1hLSZndDtkbWFfYWRkcmVzcywKJiM0MzsJCQkgZXAtJmd0O21heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsKJiM0MzsJaWYgKHJlc3VsdC0mZ3Q7cmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSB7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCWRldl93YXJuKGVwLSZndDtkZXYsICYjMzQ7UlggRE1BIHRyYW5zZmVyIGVycm9yICVkXG4mIzM0OywKJiM0MzsJCQkJIHJlc3VsdC0mZ3Q7cmVzdWx0KTsKJiM0MzsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQlERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpOwomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpOwomIzQzOwkJZ290byBzdWJtaXRfbmV3OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1ldGFkYXRhID0gZG1hZW5naW5lX2Rlc2NfZ2V0X21ldGFkYXRhX3B0cihza2J1Zl9kbWEtJmd0O2Rlc2MsCiYjNDM7CQkJCQkJICAgJmFtcDttZXRhX2xlbiwKJiM0MzsJCQkJCQkgICAmYW1wO21ldGFfbWF4X2xlbik7CiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChtZXRhZGF0YSkpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJZGV2X3dhcm4oZXAtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IFJYIG1ldGFkYXRhIHBvaW50ZXJcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQlERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpOwomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpOwomIzQzOwkJZ290byBzdWJtaXRfbmV3OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE1DRE1BIG1ldGFkYXRhOiBbMF0gPSBzdGF0dXMsIFsxXSA9IHNpZGViYW5kIChUSUQvVERFU1QvVFVTRVIpLCBbMi4uXSA9IGFwcCAqLwomIzQzOwl0dXNlciA9IG1ldGFkYXRhWzFdICZhbXA7IFRTTl9UVVNFUl9NQVNLOwomIzQzOwlyeF9sZW4gPSBlcC0mZ3Q7bWF4X2ZybV9zaXplIC0gcmVzdWx0LSZndDtyZXNpZHVlOwomIzQzOwomIzQzOwlpZiAocnhfbGVuICZndDsgZXAtJmd0O21heF9mcm1fc2l6ZSB8fCByeF9sZW4gJmx0OyBFVEhfSExFTikgewomIzQzOwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKJiM0MzsJCQlkZXZfd2FybihlcC0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgUlggbGVuZ3RoICV6dSAobWF4PSV1LCBtaW49JXUpXG4mIzM0OywKJiM0MzsJCQkJIHJ4X2xlbiwgZXAtJmd0O21heF9mcm1fc2l6ZSwgRVRIX0hMRU4pOwomIzQzOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJCURFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7CiYjNDM7CQlERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7CiYjNDM7CQlnb3RvIHN1Ym1pdF9uZXc7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG9ydF9pZCA9IEZJRUxEX0dFVChUU05fVFVTRVJfUE9SVF9JRF9NQVNLLCB0dXNlcik7CiYjNDM7CWlmIChwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzEgJmFtcDsmYW1wOyBwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzIpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJZGV2X2RiZyhlcC0mZ3Q7ZGV2LCAmIzM0O1JYIGRyb3BwaW5nIHVuZXhwZWN0ZWQgVFVTRVIgcG9ydF9pZD0ldVxuJiMzNDssCiYjNDM7CQkJCXBvcnRfaWQpOwomIzQzOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJCURFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7CiYjNDM7CQlnb3RvIHN1Ym1pdF9uZXc7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiX3B1dChza2IsIHJ4X2xlbik7CiYjNDM7CWlmIChuZXRkZXZfdXNlc19kc2EobmRldikpIHsKJiM0MzsJCWRzdF9ob2xkKCZhbXA7ZXAtJmd0O3BvcnRfbWRbcG9ydF9pZF0tJmd0O2RzdCk7CiYjNDM7CQlza2JfZHN0X3NldChza2IsICZhbXA7ZXAtJmd0O3BvcnRfbWRbcG9ydF9pZF0tJmd0O2RzdCk7CiYjNDM7CX0KJiM0MzsJc2tiLSZndDtkZXYgPSBuZGV2OwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKJiM0MzsJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwomIzQzOwlfX25ldGlmX3J4KHNrYik7CiYjNDM7CiYjNDM7CURFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7CiYjNDM7CURFVl9TVEFUU19BREQobmRldiwgcnhfYnl0ZXMsIHJ4X2xlbik7CiYjNDM7CiYjNDM7c3VibWl0X25ldzoKJiM0MzsJZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3R4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlpbnQgc2dfbGVuOwomIzQzOwlpbnQgbGVuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7eGNoYW4tJmd0O3R4X2xvY2spIHsKJiM0MzsJCXNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLAomIzQzOwkJCQkJeGNoYW4tJmd0O3JpbmdfdGFpbCAmYW1wOyAoeGNoYW4tJmd0O3Jpbmdfc2l6ZSAtIDEpKTsKJiM0MzsJCWlmICghc2tidWZfZG1hIHx8ICFza2J1Zl9kbWEtJmd0O3NrYikKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQlza2IgPSBza2J1Zl9kbWEtJmd0O3NrYjsKJiM0MzsJCXNnbCA9IHNrYnVmX2RtYS0mZ3Q7c2dsOwomIzQzOwkJc2dfbGVuID0gc2tidWZfZG1hLSZndDtzZ19sZW47CiYjNDM7CiYjNDM7CQlkbWFfdW5tYXBfc2coeGNoYW4tJmd0O2RtYV9kZXYsIHNnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MzsKJiM0MzsJCXNrYnVmX2RtYS0mZ3Q7c2tiID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCwgeGNoYW4tJmd0O3JpbmdfdGFpbCAmIzQzOyAxKTsKJiM0MzsJfQomIzQzOwomIzQzOwluZGV2ID0gc2tiLSZndDtkZXY7CiYjNDM7CXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwomIzQzOwlsZW4gPSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHJlc3VsdC0mZ3Q7cmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSkgewomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCB0eF9lcnJvcnMpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCB0eF9wYWNrZXRzKTsKJiM0MzsJCURFVl9TVEFUU19BREQobmRldiwgdHhfYnl0ZXMsIGxlbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOwomIzQzOwluZXRpZl90eHFfY29tcGxldGVkX3dha2UodHhxLCAxLCBsZW4sCiYjNDM7CQkJCSBDSVJDX1NQQUNFKFJFQURfT05DRSh4Y2hhbi0mZ3Q7cmluZ19oZWFkKSwKJiM0MzsJCQkJCSAgICBSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCksCiYjNDM7CQkJCQkgICAgeGNoYW4tJmd0O3Jpbmdfc2l6ZSksIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgZXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZG1hX3R4X2Rlc2M7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CWludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuOwomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiYjNDM7CWludCBzZ19sZW4sIG5lbnRzLCByZXQ7CiYjNDM7CWRtYV9jb29raWVfdCBjb29raWU7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShxdWV1ZSAmZ3Q7PSBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcykpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJbmV0ZGV2X3dhcm4obmRldiwgJiMzNDtJbnZhbGlkIFRYIHF1ZXVlICVkIChtYXggJXUpXG4mIzM0OywKJiM0MzsJCQkJICAgIHF1ZXVlLCBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcyk7CiYjNDM7CQlnb3RvIGVycl9kcm9wX3NrYjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZXAtJmd0O3R4X2RtYV9jaGFuX21hcFtxdWV1ZV0gPT0gVFNOX0RNQV9DSF9JTlZBTElEKSB7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCW5ldGRldl93YXJuKG5kZXYsICYjMzQ7TG9naWNhbCBUWCBxdWV1ZSAlZCBoYXMgaW52YWxpZCBETUEgbWFwcGluZ1xuJiMzNDssCiYjNDM7CQkJCSAgICBxdWV1ZSk7CiYjNDM7CQlnb3RvIGVycl9kcm9wX3NrYjsKJiM0MzsJfQomIzQzOwomIzQzOwl4Y2hhbiA9IGVwLSZndDt0eF9jaGFuc1txdWV1ZV07CiYjNDM7CiYjNDM7CXNnX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7bnJfZnJhZ3MgJiM0MzsgMTsKJiM0MzsJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBxdWV1ZSk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3hjaGFuLSZndDt0eF9sb2NrKTsKJiM0MzsJaWYgKENJUkNfU1BBQ0UoeGNoYW4tJmd0O3JpbmdfaGVhZCwgUkVBRF9PTkNFKHhjaGFuLSZndDtyaW5nX3RhaWwpLAomIzQzOwkJICAgICAgIHhjaGFuLSZndDtyaW5nX3NpemUpICZsdDs9IDEpIHsKJiM0MzsJCW5ldGlmX3R4cV90cnlfc3RvcCh0eHEsCiYjNDM7CQkJCSAgIENJUkNfU1BBQ0UoeGNoYW4tJmd0O3JpbmdfaGVhZCwKJiM0MzsJCQkJCSAgICAgIFJFQURfT05DRSh4Y2hhbi0mZ3Q7cmluZ190YWlsKSwKJiM0MzsJCQkJCSAgICAgIHhjaGFuLSZndDtyaW5nX3NpemUpLAomIzQzOwkJCQkgICAyKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGNoYW4tJmd0O3R4X2xvY2spOwomIzQzOwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKJiM0MzsJCQluZXRkZXZfd2FybihuZGV2LCAmIzM0O1RTTiBUWCByaW5nIGZ1bGxcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwlza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbiwgeGNoYW4tJmd0O3JpbmdfaGVhZCAmYW1wOyAoeGNoYW4tJmd0O3Jpbmdfc2l6ZSAtIDEpKTsKJiM0MzsJaWYgKCFza2J1Zl9kbWEpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGNoYW4tJmd0O3R4X2xvY2spOwomIzQzOwkJZ290byBlcnJfZHJvcF9za2I7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt4Y2hhbi0mZ3Q7dHhfbG9jayk7CiYjNDM7CiYjNDM7CXNnX2luaXRfdGFibGUoc2tidWZfZG1hLSZndDtzZ2wsIHNnX2xlbik7CiYjNDM7CXJldCA9IHNrYl90b19zZ3ZlYyhza2IsIHNrYnVmX2RtYS0mZ3Q7c2dsLCAwLCBza2ItJmd0O2xlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfZHJvcF9za2I7CiYjNDM7CXNnX2xlbiA9IHJldDsKJiM0MzsKJiM0MzsJbmVudHMgPSBkbWFfbWFwX3NnKHhjaGFuLSZndDtkbWFfZGV2LCBza2J1Zl9kbWEtJmd0O3NnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MzsJaWYgKCFuZW50cykKJiM0MzsJCWdvdG8gZXJyX2Ryb3Bfc2tiOwomIzQzOwomIzQzOwlkbWFfdHhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLSZndDtjaGFuLCBza2J1Zl9kbWEtJmd0O3NnbCwKJiM0MzsJCQkJCSAgICAgIG5lbnRzLCBETUFfTUVNX1RPX0RFViwKJiM0MzsJCQkJCSAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7CiYjNDM7CWlmICghZG1hX3R4X2Rlc2MpCiYjNDM7CQlnb3RvIGVycl91bm1hcF9zZzsKJiM0MzsKJiM0MzsJc2tidWZfZG1hLSZndDtza2IgPSBza2I7CiYjNDM7CXNrYnVmX2RtYS0mZ3Q7c2dfbGVuID0gc2dfbGVuOwomIzQzOwlkbWFfdHhfZGVzYy0mZ3Q7Y2FsbGJhY2tfcGFyYW0gPSB4Y2hhbjsKJiM0MzsJZG1hX3R4X2Rlc2MtJmd0O2NhbGxiYWNrX3Jlc3VsdCA9IGVwX2RtYV90eF9jYjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7eGNoYW4tJmd0O3R4X2xvY2spOwomIzQzOwljb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRtYV90eF9kZXNjKTsKJiM0MzsJaWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4Y2hhbi0mZ3Q7dHhfbG9jayk7CiYjNDM7CQlza2J1Zl9kbWEtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQlnb3RvIGVycl91bm1hcF9zZzsKJiM0MzsJfQomIzQzOwlXUklURV9PTkNFKHhjaGFuLSZndDtyaW5nX2hlYWQsIHhjaGFuLSZndDtyaW5nX2hlYWQgJiM0MzsgMSk7CiYjNDM7CW5ldGRldl90eF9zZW50X3F1ZXVlKHR4cSwgc2tiLSZndDtsZW4pOwomIzQzOwluZXRpZl90eHFfbWF5YmVfc3RvcCh0eHEsCiYjNDM7CQkJICAgICBDSVJDX1NQQUNFKHhjaGFuLSZndDtyaW5nX2hlYWQsCiYjNDM7CQkJCQlSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCksCiYjNDM7CQkJCQl4Y2hhbi0mZ3Q7cmluZ19zaXplKSwKJiM0MzsJCQkgICAgIDIsIDIpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3hjaGFuLSZndDt0eF9sb2NrKTsKJiM0MzsKJiM0MzsJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoeGNoYW4tJmd0O2NoYW4pOwomIzQzOwomIzQzOwlyZXR1cm4gTkVUREVWX1RYX09LOwomIzQzOwomIzQzO2Vycl91bm1hcF9zZzoKJiM0MzsJZG1hX3VubWFwX3NnKHhjaGFuLSZndDtkbWFfZGV2LCBza2J1Zl9kbWEtJmd0O3NnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MztlcnJfZHJvcF9za2I6CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CURFVl9TVEFUU19JTkMobmRldiwgdHhfZHJvcHBlZCk7CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7CiYjNDM7c3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlXUklURV9PTkNFKGVwLSZndDtjbG9zaW5nLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJldCA9IGVwX2luaXRfZG1hZW5naW5lKGVwKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIERNQSBlbmdpbmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUobmRldik7CiYjNDM7CVdSSVRFX09OQ0UoZXAtJmd0O2Nsb3NpbmcsIHRydWUpOwomIzQzOwllcF9leGl0X2RtYWVuZ2luZShlcCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuZGV2LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl90eF9yZXNldF9zdWJxdWV1ZShuZGV2LCBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICplZCkKJiM0Mzt7CiYjNDM7CXN0cnNjcHkoZWQtJmd0O2RyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihlZC0mZ3Q7ZHJpdmVyKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXBfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5kb19vcGVuCQk9IGVwX29wZW4sCiYjNDM7CS5uZG9fc3RvcAkJPSBlcF9zdG9wLAomIzQzOwkubmRvX3N0YXJ0X3htaXQJCT0gZXBfc3RhcnRfeG1pdCwKJiM0MzsJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiYjNDM7CS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlcF9ldGh0b29sX29wcyA9IHsKJiM0MzsJLmdldF9kcnZpbmZvCT0gZXBfZ2V0X2RydmluZm8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoKJiM0MztlcF9hbGxvY19kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXAgKmVwLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX3R4LAomIzQzOwkJICBpbnQgcmluZ19zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuOwomIzQzOwlzdHJ1Y3QgZG1hX2NoYW4gKmVycl9jaGFuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJY2hhbiA9IGt6YWxsb2Nfb2JqKCpjaGFuKTsKJiM0MzsJaWYgKCFjaGFuKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWNoYW4tJmd0O2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLSZndDtkZXYsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNoYW4tJmd0O2NoYW4pKSB7CiYjNDM7CQllcnJfY2hhbiA9IGNoYW4tJmd0O2NoYW47CiYjNDM7CQlrZnJlZShjaGFuKTsKJiM0MzsJCXJldHVybiBFUlJfQ0FTVChlcnJfY2hhbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2hhbi0mZ3Q7c2tiX3JpbmcgPSBrY2FsbG9jKHJpbmdfc2l6ZSwgc2l6ZW9mKCpjaGFuLSZndDtza2JfcmluZyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNoYW4tJmd0O3NrYl9yaW5nKSB7CiYjNDM7CQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tJmd0O2NoYW4pOwomIzQzOwkJa2ZyZWUoY2hhbik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmluZ19zaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY2hhbi0mZ3Q7c2tiX3JpbmdbaV0gPSBremFsbG9jX29iaigqY2hhbi0mZ3Q7c2tiX3JpbmdbaV0pOwomIzQzOwkJaWYgKCFjaGFuLSZndDtza2JfcmluZ1tpXSkgewomIzQzOwkJCXdoaWxlICgtLWkgJmd0Oz0gMCkKJiM0MzsJCQkJa2ZyZWUoY2hhbi0mZ3Q7c2tiX3JpbmdbaV0pOwomIzQzOwkJCWtmcmVlKGNoYW4tJmd0O3NrYl9yaW5nKTsKJiM0MzsJCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tJmd0O2NoYW4pOwomIzQzOwkJCWtmcmVlKGNoYW4pOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWNoYW4tJmd0O2lzX3R4ID0gaXNfdHg7CiYjNDM7CWNoYW4tJmd0O2VwID0gZXA7CiYjNDM7CWNoYW4tJmd0O3Jpbmdfc2l6ZSA9IHJpbmdfc2l6ZTsKJiM0MzsJY2hhbi0mZ3Q7ZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLSZndDtjaGFuKTsKJiM0MzsJaWYgKGlzX3R4KSB7CiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO2NoYW4tJmd0O3R4X2xvY2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtjaGFuLSZndDtyeF9sb2NrKTsKJiM0MzsJCXRpbWVyX3NldHVwKCZhbXA7Y2hhbi0mZ3Q7cnhfcmVmaWxsX3RpbWVyLCBlcF9yeF9yZWZpbGxfdGltZXIsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjaGFuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlcF9mcmVlX2RtYV9jaGFuKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqY2hhbikKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoYW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChjaGFuLSZndDtjaGFuKSB7CiYjNDM7CQlpZiAoIWNoYW4tJmd0O2lzX3R4KSB7CiYjNDM7CQkJLyogZXBfc3RvcCgpIHNldHMgY2xvc2luZyBiZWZvcmUgdGVhcmRvd24uIFRha2UgcnhfbG9jawomIzQzOwkJCSAqIHNvIGFueSByZWZpbGwgdGhhdCBhbHJlYWR5IHBhc3NlZCB0aGUgY2xvc2luZyBjaGVjawomIzQzOwkJCSAqIGZpbmlzaGVzIGFuZCBubyBsYXRlciBvbmUgc3VibWl0cyBvciBhcm1zIHRoZSB0aW1lciwKJiM0MzsJCQkgKiB0aGVuIHNodXQgZG93biB0aGUgdGltZXIgc28gaXQgY2Fubm90IGJlIHJlYXJtZWQKJiM0MzsJCQkgKiBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgZnJlZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJc3Bpbl9sb2NrX2JoKCZhbXA7Y2hhbi0mZ3Q7cnhfbG9jayk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjaGFuLSZndDtyeF9sb2NrKTsKJiM0MzsJCQl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7Y2hhbi0mZ3Q7cnhfcmVmaWxsX3RpbWVyKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRtYWVuZ2luZV90ZXJtaW5hdGVfc3luYyhjaGFuLSZndDtjaGFuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY2hhbi0mZ3Q7aXNfdHgpIHsKJiM0MzsJCXdoaWxlIChjaGFuLSZndDtyaW5nX3RhaWwgIT0gY2hhbi0mZ3Q7cmluZ19oZWFkKSB7CiYjNDM7CQkJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CiYjNDM7CQkJc2tidWZfZG1hID0gY2hhbi0mZ3Q7c2tiX3JpbmdbY2hhbi0mZ3Q7cmluZ190YWlsICZhbXA7CiYjNDM7CQkJCQkJICAoY2hhbi0mZ3Q7cmluZ19zaXplIC0gMSldOwomIzQzOwkJCWlmIChza2J1Zl9kbWEgJmFtcDsmYW1wOyBza2J1Zl9kbWEtJmd0O3NrYikgewomIzQzOwkJCQlkbWFfdW5tYXBfc2coY2hhbi0mZ3Q7ZG1hX2Rldiwgc2tidWZfZG1hLSZndDtzZ2wsCiYjNDM7CQkJCQkgICAgIHNrYnVmX2RtYS0mZ3Q7c2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MzsJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tidWZfZG1hLSZndDtza2IpOwomIzQzOwkJCQlza2J1Zl9kbWEtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJCWNoYW4tJmd0O3JpbmdfdGFpbCYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNoYW4tJmd0O3NrYl9yaW5nKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY2hhbi0mZ3Q7cmluZ19zaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hID0gY2hhbi0mZ3Q7c2tiX3JpbmdbaV07CiYjNDM7CiYjNDM7CQkJaWYgKHNrYnVmX2RtYSAmYW1wOyZhbXA7ICFjaGFuLSZndDtpc190eCAmYW1wOyZhbXA7IHNrYnVmX2RtYS0mZ3Q7c2tiKSB7CiYjNDM7CQkJCWRtYV91bm1hcF9zaW5nbGUoY2hhbi0mZ3Q7ZG1hX2RldiwKJiM0MzsJCQkJCQkgc2tidWZfZG1hLSZndDtkbWFfYWRkcmVzcywKJiM0MzsJCQkJCQkgY2hhbi0mZ3Q7ZXAtJmd0O21heF9mcm1fc2l6ZSwKJiM0MzsJCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tidWZfZG1hLSZndDtza2IpOwomIzQzOwkJCX0KJiM0MzsJCQlrZnJlZShjaGFuLSZndDtza2JfcmluZ1tpXSk7CiYjNDM7CQl9CiYjNDM7CQlrZnJlZShjaGFuLSZndDtza2JfcmluZyk7CiYjNDM7CX0KJiM0MzsJaWYgKGNoYW4tJmd0O2NoYW4pCiYjNDM7CQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tJmd0O2NoYW4pOwomIzQzOwomIzQzOwlrZnJlZShjaGFuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoZXAtJmd0O3R4X2NoYW5zKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgZXAtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWVwX2ZyZWVfZG1hX2NoYW4oZXAtJmd0O3R4X2NoYW5zW2ldKTsKJiM0MzsJCWtmcmVlKGVwLSZndDt0eF9jaGFucyk7CiYjNDM7CQllcC0mZ3Q7dHhfY2hhbnMgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChlcC0mZ3Q7cnhfY2hhbnMpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBlcC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZXBfZnJlZV9kbWFfY2hhbihlcC0mZ3Q7cnhfY2hhbnNbaV0pOwomIzQzOwkJa2ZyZWUoZXAtJmd0O3J4X2NoYW5zKTsKJiM0MzsJCWVwLSZndDtyeF9jaGFucyA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcF9pbml0X2RtYWVuZ2luZShzdHJ1Y3QgeGxueF90c25fZXAgKmVwKQomIzQzO3sKJiM0MzsJaW50IHR4X2FsbG9jYXRlZCA9IDAsIHJ4X2FsbG9jYXRlZCA9IDA7CiYjNDM7CWNoYXIgbmFtZVsxNl07CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWVwLSZndDt0eF9jaGFucyA9IGtjYWxsb2MoZXAtJmd0O251bV90eF9xdWV1ZXMsIHNpemVvZigqZXAtJmd0O3R4X2NoYW5zKSwKJiM0MzsJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXAtJmd0O3R4X2NoYW5zKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWVwLSZndDtyeF9jaGFucyA9IGtjYWxsb2MoZXAtJmd0O251bV9yeF9xdWV1ZXMsIHNpemVvZigqZXAtJmd0O3J4X2NoYW5zKSwKJiM0MzsJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXAtJmd0O3J4X2NoYW5zKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfZnJlZV90eDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXAtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7dHhfY2hhbiV1JiMzNDssIGVwLSZndDt0eF9kbWFfY2hhbl9tYXBbaV0pOwomIzQzOwkJZXAtJmd0O3R4X2NoYW5zW2ldID0gZXBfYWxsb2NfZG1hX2NoYW4oZXAsIG5hbWUsIHRydWUsCiYjNDM7CQkJCQkJICAgIFRYX0JEX05VTV9ERUZBVUxUKTsKJiM0MzsJCWlmIChJU19FUlIoZXAtJmd0O3R4X2NoYW5zW2ldKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIoZXAtJmd0O3R4X2NoYW5zW2ldKTsKJiM0MzsJCQllcC0mZ3Q7dHhfY2hhbnNbaV0gPSBOVUxMOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfY2hhbnM7CiYjNDM7CQl9CiYjNDM7CQl0eF9hbGxvY2F0ZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlcC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDtyeF9jaGFuJXUmIzM0OywgZXAtJmd0O3J4X2NoYW5fbnVtW2ldKTsKJiM0MzsJCWVwLSZndDtyeF9jaGFuc1tpXSA9IGVwX2FsbG9jX2RtYV9jaGFuKGVwLCBuYW1lLCBmYWxzZSwKJiM0MzsJCQkJCQkgICAgUlhfQkRfTlVNX0RFRkFVTFQpOwomIzQzOwkJaWYgKElTX0VSUihlcC0mZ3Q7cnhfY2hhbnNbaV0pKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihlcC0mZ3Q7cnhfY2hhbnNbaV0pOwomIzQzOwkJCWVwLSZndDtyeF9jaGFuc1tpXSA9IE5VTEw7CiYjNDM7CQkJZ290byBlcnJfZnJlZV9jaGFuczsKJiM0MzsJCX0KJiM0MzsJCXJ4X2FsbG9jYXRlZCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGVwLSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFlcF9yeF9yZWZpbGwoZXAtJmd0O3J4X2NoYW5zW2ldLCBmYWxzZSkpIHsKJiM0MzsJCQlkZXZfZXJyKGVwLSZndDtkZXYsICYjMzQ7UlggY2hhbm5lbCAlZDogbm8gZGVzY3JpcHRvcnMgYXJtZWRcbiYjMzQ7LAomIzQzOwkJCQlpKTsKJiM0MzsJCQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfY2hhbnM7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWVfY2hhbnM6CiYjNDM7CVdSSVRFX09OQ0UoZXAtJmd0O2Nsb3NpbmcsIHRydWUpOwomIzQzOwl3aGlsZSAoLS1yeF9hbGxvY2F0ZWQgJmd0Oz0gMCkKJiM0MzsJCWVwX2ZyZWVfZG1hX2NoYW4oZXAtJmd0O3J4X2NoYW5zW3J4X2FsbG9jYXRlZF0pOwomIzQzOwl3aGlsZSAoLS10eF9hbGxvY2F0ZWQgJmd0Oz0gMCkKJiM0MzsJCWVwX2ZyZWVfZG1hX2NoYW4oZXAtJmd0O3R4X2NoYW5zW3R4X2FsbG9jYXRlZF0pOwomIzQzOwlrZnJlZShlcC0mZ3Q7cnhfY2hhbnMpOwomIzQzOwllcC0mZ3Q7cnhfY2hhbnMgPSBOVUxMOwomIzQzO2Vycl9mcmVlX3R4OgomIzQzOwlrZnJlZShlcC0mZ3Q7dHhfY2hhbnMpOwomIzQzOwllcC0mZ3Q7dHhfY2hhbnMgPSBOVUxMOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZyA9IHsgLnJlc2V0ID0gMSB9OwomIzQzOwlzdHJ1Y3QgZG1hX2NoYW4gKnJlc2V0X2NoYW47CiYjNDM7CWNoYXIgbmFtZVsxNl07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDt0eF9jaGFuJXUmIzM0OywgZXAtJmd0O3R4X2RtYV9jaGFuX21hcFswXSk7CiYjNDM7CXJlc2V0X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLSZndDtkZXYsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKHJlc2V0X2NoYW4pKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtJmd0O2RldiwgUFRSX0VSUihyZXNldF9jaGFuKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZXF1ZXN0ICVzIGZvciByZXNldFxuJiMzNDssIG5hbWUpOwomIzQzOwomIzQzOwlyZXQgPSB4aWxpbnhfdmRtYV9jaGFubmVsX3NldF9jb25maWcocmVzZXRfY2hhbiwgJmFtcDtjZmcpOwomIzQzOwlkbWFfcmVsZWFzZV9jaGFubmVsKHJlc2V0X2NoYW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGVwLSZndDtkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZXNldCBETUEgY29udHJvbGxlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQYXJzZSB0aGUgJiMzNDt0eC1xdWV1ZXMtY29uZmlnJiMzNDsgY2hpbGQgb2YgdGhlIEVQIG5vZGUuIFRoZSBsb2dpY2FsIHF1ZXVlCiYjNDM7ICogaW5kZXggaXMgdGFrZW4gZnJvbSB0aGUgJiMzNDtxdWV1ZSZsdDtOJmd0OyYjMzQ7IG5vZGUgbmFtZSwgc28gdGhlIG1hcHBpbmcgZG9lcyBub3QKJiM0MzsgKiBkZXBlbmQgb24gdGhlIG9yZGVyIHRoZSBjaGlsZCBub2RlcyBhcHBlYXIgaW4gdGhlIGRldmljZSB0cmVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wLCB1MTYgdHhfcHJlc2VudCkKJiM0Mzt7CiYjNDM7CURFQ0xBUkVfQklUTUFQKHF1ZXVlX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307CiYjNDM7CURFQ0xBUkVfQklUTUFQKGNoYW5fc2VlbiwgVFNOX01BWF9UWF9RVUVVRSkgPSB7fTsKJiM0MzsJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQodHhjZmdfbnAsIHFub2RlKSB7CiYjNDM7CQl1MzIgY2hhbiwgcXVldWU7CiYjNDM7CiYjNDM7CQlpZiAoIXN0cl9oYXNfcHJlZml4KHFub2RlLSZndDtuYW1lLCAmIzM0O3F1ZXVlJiMzNDspIHx8CiYjNDM7CQkgICAga3N0cnRvdTMyKHFub2RlLSZndDtuYW1lICYjNDM7IHN0cmxlbigmIzM0O3F1ZXVlJiMzNDspLCAxMCwgJmFtcDtxdWV1ZSkgfHwKJiM0MzsJCSAgICBxdWV1ZSAmZ3Q7PSBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcykKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O3R4LWNvbmZpZzogaW52YWxpZCBxdWV1ZSBub2RlICVwT0ZuIChoYXZlICV1IHF1ZXVlcylcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBxbm9kZSwgZXAtJmd0O251bV90eF9xdWV1ZXMpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RfYW5kX3NldF9iaXQocXVldWUsIHF1ZXVlX3NlZW4pKQomIzQzOwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGVwLSZndDtkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7dHgtY29uZmlnOiBxdWV1ZSAldSBkZXNjcmliZWQgdHdpY2VcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBxdWV1ZSk7CiYjNDM7CiYjNDM7CQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihxbm9kZSwgJiMzNDt4bG54LGRtYS1jaGFubmVsLW51bSYjMzQ7LCAmYW1wO2NoYW4pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC0mZ3Q7ZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7dHgtY29uZmlnOiBxdWV1ZSAldSBtaXNzaW5nIHhsbngsZG1hLWNoYW5uZWwtbnVtXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgcXVldWUpOwomIzQzOwomIzQzOwkJaWYgKGNoYW4gJmd0Oz0gVFNOX01BWF9UWF9RVUVVRSB8fCAhKHR4X3ByZXNlbnQgJmFtcDsgQklUKGNoYW4pKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O3R4LWNvbmZpZzogcXVldWUgJXUgbWFwcyB0byBjaGFubmVsICV1IG5vdCBwcmVzZW50IGluIGRtYS1uYW1lc1xuJiMzNDssCiYjNDM7CQkJCQkgICAgIHF1ZXVlLCBjaGFuKTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW4sIGNoYW5fc2VlbikpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt0eC1jb25maWc6IGNoYW5uZWwgJXUgYWxyZWFkeSBhc3NpZ25lZCB0byBhbm90aGVyIHF1ZXVlXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgY2hhbik7CiYjNDM7CiYjNDM7CQllcC0mZ3Q7dHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9IGNoYW47CiYjNDM7CQljb3VudCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNvdW50ICE9IGVwLSZndDtudW1fdHhfcXVldWVzKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O3R4LWNvbmZpZzogZGVzY3JpYmVkICV1IHF1ZXVlcyBidXQgZXhwZWN0ZWQgJXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGNvdW50LCBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVwX2NvdW50X2RtYV9xdWV1ZXMoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKm91dF90eCwgdTMyICpvdXRfcngsCiYjNDM7CQkJICAgICAgIHUxNiAqdHhfcHJlc2VudCwgdTMyICpyeF9jaGFuX251bSkKJiM0Mzt7CiYjNDM7CXUzMiB0eCA9IDAsIHJ4ID0gMDsKJiM0MzsJdTE2IHJ4X3ByZXNlbnQgPSAwOwomIzQzOwlpbnQgbiwgaSwgcmV0OwomIzQzOwomIzQzOwluID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkZXYtJmd0O29mX25vZGUsICYjMzQ7ZG1hLW5hbWVzJiMzNDspOwomIzQzOwlpZiAobiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIG4sICYjMzQ7ZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJCXNpemVfdCBwbGVuOwomIzQzOwkJdTMyIGlkeDsKJiM0MzsKJiM0MzsJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KGRldi0mZ3Q7b2Zfbm9kZSwgJiMzNDtkbWEtbmFtZXMmIzM0OywKJiM0MzsJCQkJCQkgICAgaSwgJmFtcDtuYW1lKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxuJiMzNDssIGkpOwomIzQzOwomIzQzOwkJcGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsICYjMzQ7dHhfY2hhbiYjMzQ7KTsKJiM0MzsJCWlmIChwbGVuKSB7CiYjNDM7CQkJaWYgKGtzdHJ0b3UzMihuYW1lICYjNDM7IHBsZW4sIDEwLCAmYW1wO2lkeCkgfHwKJiM0MzsJCQkgICAgaWR4ICZndDs9IFRTTl9NQVhfVFhfUVVFVUUpCiYjNDM7CQkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCQkgICAgICYjMzQ7aW52YWxpZCBUWCBjaGFubmVsIG5hbWUgJXNcbiYjMzQ7LAomIzQzOwkJCQkJCSAgICAgbmFtZSk7CiYjNDM7CiYjNDM7CQkJaWYgKCp0eF9wcmVzZW50ICZhbXA7IEJJVChpZHgpKQomIzQzOwkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkJICAgICAmIzM0O2R1cGxpY2F0ZSBUWCBjaGFubmVsICVzXG4mIzM0OywKJiM0MzsJCQkJCQkgICAgIG5hbWUpOwomIzQzOwomIzQzOwkJCSp0eF9wcmVzZW50IHw9IEJJVChpZHgpOwomIzQzOwkJCXR4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXBsZW4gPSBzdHJfaGFzX3ByZWZpeChuYW1lLCAmIzM0O3J4X2NoYW4mIzM0Oyk7CiYjNDM7CQlpZiAocGxlbikgewomIzQzOwkJCWlmIChrc3RydG91MzIobmFtZSAmIzQzOyBwbGVuLCAxMCwgJmFtcDtpZHgpIHx8CiYjNDM7CQkJICAgIGlkeCAmZ3Q7PSBUU05fTUFYX1JYX1FVRVVFKQomIzQzOwkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkJICAgICAmIzM0O2ludmFsaWQgUlggY2hhbm5lbCBuYW1lICVzXG4mIzM0OywKJiM0MzsJCQkJCQkgICAgIG5hbWUpOwomIzQzOwomIzQzOwkJCWlmIChyeF9wcmVzZW50ICZhbXA7IEJJVChpZHgpKQomIzQzOwkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkJICAgICAmIzM0O2R1cGxpY2F0ZSBSWCBjaGFubmVsICVzXG4mIzM0OywKJiM0MzsJCQkJCQkgICAgIG5hbWUpOwomIzQzOwomIzQzOwkJCXJ4X3ByZXNlbnQgfD0gQklUKGlkeCk7CiYjNDM7CQkJcnhfY2hhbl9udW1bcnhdID0gaWR4OwomIzQzOwkJCXJ4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O3VucmVjb2duaXNlZCBkbWEtbmFtZXMgZW50cnkgJXNcbiYjMzQ7LCBuYW1lKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXR4KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgICYjMzQ7bm8gVFggY2hhbm5lbHMgaW4gZG1hLW5hbWVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICghcngpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAgJiMzNDtubyBSWCBjaGFubmVscyBpbiBkbWEtbmFtZXNcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJKm91dF90eCA9IHR4OwomIzQzOwkqb3V0X3J4ID0gcng7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlcF9mcmVlX3BvcnRfbWQoc3RydWN0IHhsbnhfdHNuX2VwICplcCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChlcC0mZ3Q7cG9ydF9tZFtpXSkgewomIzQzOwkJCWRzdF9yZWxlYXNlKCZhbXA7ZXAtJmd0O3BvcnRfbWRbaV0tJmd0O2RzdCk7CiYjNDM7CQkJZXAtJmd0O3BvcnRfbWRbaV0gPSBOVUxMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfYWxsb2NfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IFRTTl9UVVNFUl9QT1JUX01BQzE7IGkgJmx0Oz0gVFNOX1RVU0VSX1BPUlRfTUFDMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kOwomIzQzOwomIzQzOwkJbWQgPSBtZXRhZGF0YV9kc3RfYWxsb2MoMCwgTUVUQURBVEFfSFdfUE9SVF9NVVgsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFtZCkgewomIzQzOwkJCWVwX2ZyZWVfcG9ydF9tZChlcCk7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQl9CiYjNDM7CQltZC0mZ3Q7dS5wb3J0X2luZm8ucG9ydF9pZCA9IGk7CiYjNDM7CQllcC0mZ3Q7cG9ydF9tZFtpXSA9IG1kOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhsbnhfdHNuX2VwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwl1MzIgcnhfY2hhbl9udW1bVFNOX01BWF9SWF9RVUVVRV07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wOwomIzQzOwl1MzIgbnVtX3R4LCBudW1fcngsIG51bV9wcmlvOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlwX25wOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwICplcDsKJiM0MzsJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwomIzQzOwl1MTYgdHhfcHJlc2VudCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlyZXQgPSBlcF9jb3VudF9kbWFfcXVldWVzKGRldiwgJmFtcDtudW1fdHgsICZhbXA7bnVtX3J4LCAmYW1wO3R4X3ByZXNlbnQsIHJ4X2NoYW5fbnVtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlwX25wID0gb2ZfZ2V0X3BhcmVudChkZXYtJmd0O29mX25vZGUpOwomIzQzOwlpZiAoIWlwX25wKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAmIzM0O21pc3NpbmcgcGFyZW50IElQIG5vZGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoaXBfbnAsICYjMzQ7eGxueCxudW0tcHJpb3JpdGllcyYjMzQ7LCAmYW1wO251bV9wcmlvKTsKJiM0MzsJb2Zfbm9kZV9wdXQoaXBfbnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7bWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChudW1fdHggIT0gbnVtX3ByaW8pCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAgJiMzNDtUWCBjaGFubmVsIGNvdW50ICV1IG11c3QgZXF1YWwgbnVtLXByaW9yaXRpZXMgJXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgIG51bV90eCwgbnVtX3ByaW8pOwomIzQzOwomIzQzOwluZGV2ID0gYWxsb2NfbmV0ZGV2X21xcyhzaXplb2YoKmVwKSwgJiMzNDtlcCVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiYjNDM7CQkJCWV0aGVyX3NldHVwLCBudW1fdHgsIG51bV9yeCk7CiYjNDM7CWlmICghbmRldikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpOwomIzQzOwluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDtlcF9uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7ZXBfZXRodG9vbF9vcHM7CiYjNDM7CW5kZXYtJmd0O2ZlYXR1cmVzID0gTkVUSUZfRl9TRzsKJiM0MzsKJiM0MzsJZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJZXAtJmd0O25kZXYgPSBuZGV2OwomIzQzOwllcC0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwllcC0mZ3Q7bnVtX3R4X3F1ZXVlcyA9IG51bV90eDsKJiM0MzsJZXAtJmd0O251bV9yeF9xdWV1ZXMgPSBudW1fcng7CiYjNDM7CWVwLSZndDttYXhfZnJtX3NpemUgPSBUU05fTUFYX1ZMQU5fRlJBTUVfU0laRTsKJiM0MzsJbWVtY3B5KGVwLSZndDtyeF9jaGFuX251bSwgcnhfY2hhbl9udW0sIG51bV9yeCAqIHNpemVvZigqcnhfY2hhbl9udW0pKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRTTl9NQVhfVFhfUVVFVUU7IGkmIzQzOyYjNDM7KQomIzQzOwkJZXAtJmd0O3R4X2RtYV9jaGFuX21hcFtpXSA9IFRTTl9ETUFfQ0hfSU5WQUxJRDsKJiM0MzsKJiM0MzsJdHhjZmdfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7dHgtcXVldWVzLWNvbmZpZyYjMzQ7KTsKJiM0MzsJaWYgKCF0eGNmZ19ucCkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O21pc3NpbmcgdHgtcXVldWVzLWNvbmZpZyBub2RlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGVycl9mcmVlX25kZXY7CiYjNDM7CX0KJiM0MzsJcmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7CiYjNDM7CW9mX25vZGVfcHV0KHR4Y2ZnX25wKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmRldjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG8KJiM0MzsJICogZ2F0ZSBvbiB0aGUgTUNETUEgcHJvdmlkZXIgYmVpbmcgYm91bmQuIFRoaXMga2VlcHMgLUVQUk9CRV9ERUZFUiBpbgomIzQzOwkgKiB0aGUgcHJvYmUgcGF0aCwgc28gdGhlIG5ldGRldiBpcyBvbmx5IHJlZ2lzdGVyZWQgb25jZSB0aGUgcHJvdmlkZXIgaXMKJiM0MzsJICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBlcF9yZXNldF9kbWFfY29udHJvbGxlcihlcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9mcmVlX25kZXY7CiYjNDM7CiYjNDM7CXJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtJmd0O29mX25vZGUsIG1hY19hZGRyKTsKJiM0MzsJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7CiYjNDM7CQlnb3RvIGVycl9mcmVlX25kZXY7CiYjNDM7CX0gZWxzZSBpZiAoIXJldCAmYW1wOyZhbXA7IGlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjX2FkZHIpKSB7CiYjNDM7CQlldGhfaHdfYWRkcl9zZXQobmRldiwgbWFjX2FkZHIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpOwomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O25vIHZhbGlkIE1BQyBpbiBEVCwgdXNpbmcgcmFuZG9tIGFkZHJlc3MgJXBNXG4mIzM0OywKJiM0MzsJCQkgbmRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGVwX2FsbG9jX3BvcnRfbWQoZXApOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBwZXItcG9ydCBtZXRhZGF0YVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfZnJlZV9uZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVwKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBuZXQgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGVycl9mcmVlX21kOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9mcmVlX21kOgomIzQzOwllcF9mcmVlX3BvcnRfbWQoZXApOwomIzQzO2Vycl9mcmVlX25kZXY6CiYjNDM7CWZyZWVfbmV0ZGV2KG5kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4bG54X3Rzbl9lcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFlcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXYoZXAtJmd0O25kZXYpOwomIzQzOwllcF9mcmVlX3BvcnRfbWQoZXApOwomIzQzOwlmcmVlX25ldGRldihlcC0mZ3Q7bmRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhsbnhfdHNuX2VwX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsdHNuLWVwLW1hYyYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGxueF90c25fZXBfb2ZfbWF0Y2gpOwomIzQzOwomIzQzO3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGxueF90c25fZXBfZHJpdmVyID0gewomIzQzOwkucHJvYmUJPSB4bG54X3Rzbl9lcF9wcm9iZSwKJiM0MzsJLnJlbW92ZQk9IHhsbnhfdHNuX2VwX3JlbW92ZSwKJiM0MzsJLmRyaXZlcgk9IHsKJiM0MzsJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAomIzQzOwkJLm9mX21hdGNoX3RhYmxlCT0geGxueF90c25fZXBfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQzM2EwMGRkNmQxNWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jCkBAIC0wLDAgJiM0MzsxLDEwNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaW1lIFNlbnNpdGl2ZSBOZXR3b3JraW5nIChUU04pIEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX3BsYXRmb3JtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt4aWxpbnhfdHNuLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVFNOX05VTV9DTE9DS1MJCTYKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgeGxueF90c25faXAgLSB3cmFwcGVyLXByaXZhdGUgSVAgc3RhdGUKJiM0MzsgKiBAY2xrczogYnVsay1tYW5hZ2VkIElQIGNsb2NrcwomIzQzOyAqLwomIzQzO3N0cnVjdCB4bG54X3Rzbl9pcCB7CiYjNDM7CXN0cnVjdCBjbGtfYnVsa19kYXRhIGNsa3NbVFNOX05VTV9DTE9DS1NdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0c25fY2xrX25hbWVzW1RTTl9OVU1fQ0xPQ0tTXSA9IHsKJiM0MzsJJiMzNDtndHgmIzM0OywKJiM0MzsJJiMzNDtndHg5MCYjMzQ7LAomIzQzOwkmIzM0O2hvc3RfcnhmaWZvJiMzNDssCiYjNDM7CSYjMzQ7aG9zdF90eGZpZm8mIzM0OywKJiM0MzsJJiMzNDtyZWYmIzM0OywKJiM0MzsJJiMzNDtzX2F4aSYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdHNuX2Nsa19idWxrX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9pcCAqdyA9IGRhdGE7CiYjNDM7CiYjNDM7CWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKFRTTl9OVU1fQ0xPQ0tTLCB3LSZndDtjbGtzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0c25faXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgeGxueF90c25faXAgKnc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXcgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKncpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF3KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgVFNOX05VTV9DTE9DS1M7IGkmIzQzOyYjNDM7KQomIzQzOwkJdy0mZ3Q7Y2xrc1tpXS5pZCA9IHRzbl9jbGtfbmFtZXNbaV07CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX2J1bGtfZ2V0KGRldiwgVFNOX05VTV9DTE9DS1MsIHctJmd0O2Nsa3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGdldCBjbG9ja3NcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoVFNOX05VTV9DTE9DS1MsIHctJmd0O2Nsa3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBjbG9ja3NcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgdHNuX2Nsa19idWxrX2Rpc2FibGUsIHcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fb2ZfcGxhdGZvcm1fcG9wdWxhdGUoZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdHNuX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjAmIzM0OyB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRzbl9vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHNuX2RyaXZlciA9IHsKJiM0MzsJLnByb2JlID0gdHNuX2lwX3Byb2JlLAomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O3hpbGlueC10c24mIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IHRzbl9vZl9tYXRjaCwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgdHNuX2RyaXZlcnNbXSA9IHsKJiM0MzsJJmFtcDt0c25fZHJpdmVyLAomIzQzOwkmYW1wO3hsbnhfdHNuX2VwX2RyaXZlciwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHhsbnhfdHNuX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwbGF0Zm9ybV9yZWdpc3Rlcl9kcml2ZXJzKHRzbl9kcml2ZXJzLCBBUlJBWV9TSVpFKHRzbl9kcml2ZXJzKSk7CiYjNDM7fQomIzQzO21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fZXhpdCB4bG54X3Rzbl9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlwbGF0Zm9ybV91bnJlZ2lzdGVyX2RyaXZlcnModHNuX2RyaXZlcnMsIEFSUkFZX1NJWkUodHNuX2RyaXZlcnMpKTsKJiM0Mzt9CiYjNDM7bW9kdWxlX2V4aXQoeGxueF90c25fZXhpdCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O1NyaW5pdmFzIE5lZWxpICZsdDtzcmluaXZhcy5uZWVsaUBhbWQuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgd3JhcHBlciBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDIzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogWGlsaW54IFRTTiBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoLCBpbnRyb2R1Y2luZyB0aGUgWGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXIsIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBzZWUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIChgLnlhbWxgIGFuZCBgTUFJTlRBSU5FUlNgKSwgS2NvbmZpZyBhbmQgTWFrZWZpbGUgYWRkaXRpb25zIGluZGljYXRpbmcgYSBuZXcgYHRzbi9gIHN1YmRpcmVjdG9yeSwgYW5kIHRoZSBjb3JlIGRyaXZlciBmaWxlcyAoYC5jYCBhbmQgYC5oYCkuIFRoaXMgc3VnZ2VzdHMgYSBuZXcgZnVuY3Rpb25hbCBibG9jaywgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBPcGVuRmlybXdhcmUvRGV2aWNldHJlZSAoJiMzNDt4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wJiMzNDsgYW5kICYjMzQ7eGxueCx0c24tZXAtbWFjJiMzNDspLiBJdCYjMzk7cyAqZGVmaW5pdGVseSogaW50ZXJlc3RpbmcsIGJ1dCBteSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBgT0ZfQUREUkVTU2AgYW5kIGBYSUxJTlhfRE1BYC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eSB3aXRoaW4gc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ2FuIEkgdHJpZ2dlciB0aGUgYHhsbnhfdHNuX2VwX2RyaXZlcmAgb3IgYHRzbl9kcml2ZXJgIGluIFFFTVUgKGFtZDY0KSBpbiBHQ0U/IERvZXMgUUVNVSBlbXVsYXRlIFhpbGlueCBUU04gTUFDIG9yIFhpbGlueCBETUE/IE9yIGlzIHRoaXMsIGFzIEkgc3VzcGVjdCwgaGFyZHdhcmUtZGVwZW5kZW50LCBwb3NzaWJseSBhbiBGUEdBL1p5bnFNUCBTb0Mtc3BlY2lmaWMgY29tcG9uZW50PyBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHNpZ25pZmljYW50IGh1cmRsZS4KCkkgbmVlZCB0byBleHBsb3JlIGhvdyBwbGF0Zm9ybSBkZXZpY2VzLCBlc3BlY2lhbGx5IHRob3NlIERULWJhc2VkLCBiZWhhdmUgaW4geDg2XzY0IGVudmlyb25tZW50cy4gQ2FuIERldmljZSBUcmVlIG92ZXJsYXlzIGluc3RhbnRpYXRlIHRoaXM/IFdpbGwgSSBuZWVkIHRvIGVtdWxhdGUgdGhlIHBsYXRmb3JtIG9yIHVzZSBhIGRlZGljYXRlZCBoYXJkd2FyZSBzZXR1cD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBvdGhlciBYaWxpbnggRXRoZXJuZXQgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSBPRi0gb3IgRFQtYmFzZWQsIGFyZSBoYW5kbGVkLiBIYXMgYW55b25lIHN1Y2Nlc3NmdWxseSBmdXp6ZWQgc2ltaWxhciBkcml2ZXJzPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gSXMgdGhpcyBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU/IEkgbmVlZCB0byBrbm93IGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZW11bGF0ZWQgb3IgaWYgdGhlIGhhcmR3YXJlIGlzIG5lY2Vzc2FyeS4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgJiMzNDt2ZW5kb3Itc3BlY2lmaWMuLi5yZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsgbWFrZXMgbWUgd29ycmllZC4gSSBhbSBjb25jZXJuZWQgdGhpcyBpcyBzaW1pbGFyIHRvIHRoYXQuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSwgdGhpcyBpc24mIzM5O3QgYW4gJiMzNDt1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCYjMzQ7LCBpLmUuIHRoYXQgaXQgaXNuJiMzOTt0IG9ubHkgY2FsbGVkIGR1cmluZyBwaHlzaWNhbCBob3QtdW5wbHVnLgoKTXkgbmV4dCBzdGVwcyBpbnZvbHZlIGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciBgWElMSU5YX0RNQWAsIGBPRl9BRERSRVNTYCwgYW5kIG90aGVyIFhpbGlueCBFdGhlcm5ldCBkcml2ZXIgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlbiBjaGVja2luZyB3aGF0JiMzOTtzIGZlYXNpYmxlIGdpdmVuIHRoZSB0eXBpY2FsIHN5emthbGxlciBsaW1pdGF0aW9ucy4gSXMgaXQgYSAqZ28qIG9yIGEgKm5vLWdvKj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWElMSU5YX0RNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS9LY29uZmlnPTY3ND1jb25maWcgWEdFTkVfRE1BXG4tLVxuZHJpdmVycy9kbWEvS2NvbmZpZy02ODItXG5kcml2ZXJzL2RtYS9LY29uZmlnOjY4Mzpjb25maWcgWElMSU5YX0RNQVxuZHJpdmVycy9kbWEvS2NvbmZpZy02ODQtXHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggQVhJIERNQVMgRW5naW5lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGEgRE1BIENvbmZpZ3VyYXRpb24gQ29uY2VybioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBETUEgY29uZmlndXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYGRyaXZlcnMvZG1hL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgbGluZSA2ODMuIFRoYXQgYXJlYSBsaWtlbHkgaG9sZHMgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHdoYXRldmVyIERNQSBpc3N1ZSBJJiMzOTttIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgY29uZmlndXJlZCB0aGVyZS4gSSBiZXQgaXQgd2lsbCBwcm92aWRlIHRoZSBrZXkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODA6XHRcdGhlbHBcbiA2ODE6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUE0gWC1HZW5lIFNvQyBETUEgZW5naW5lLlxuIDY4MjpcdFxuIDY4MzpcdGNvbmZpZyBYSUxJTlhfRE1BXG4gNjg0Olx0XHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggQVhJIERNQVMgRW5naW5lXCYjMzQ7XG4gNjg1Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuIDY4NjpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiA2ODc6XHRcdGhlbHBcbiA2ODg6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFhpbGlueCBBWEkgVkRNQSBTb2Z0IElQLlxuIDY4OTpcdFxuIDY5MDpcdFx0ICBBWEkgVkRNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggZGlyZWN0IG1lbW9yeSBhY2Nlc3NcbiA2OTE6XHRcdCAgYmV0d2VlbiBtZW1vcnkgYW5kIEFYSTQtU3RyZWFtIHZpZGVvIHR5cGUgdGFyZ2V0XG4gNjkyOlx0XHQgIHBlcmlwaGVyYWxzIGluY2x1ZGluZyBwZXJpcGhlcmFscyB3aGljaCBzdXBwb3J0IEFYSTQtXG4gNjkzOlx0XHQgIFN0cmVhbSBWaWRlbyBQcm90b2NvbC4gIEl0IGhhcyB0d28gc3RyZWFtIGludGVyZmFjZXMvXG4gNjk0Olx0XHQgIGNoYW5uZWxzLCBNZW1vcnkgTWFwcGVkIHRvIFN0cmVhbSAoTU0yUykgYW5kIFN0cmVhbSB0b1xuIDY5NTpcdFx0ICBNZW1vcnkgTWFwcGVkIChTMk1NKSBmb3IgdGhlIGRhdGEgdHJhbnNmZXJzLlxuIDY5NjpcdFx0ICBBWEkgQ0RNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggZGlyZWN0IG1lbW9yeSBhY2Nlc3NcbiA2OTc6XHRcdCAgYmV0d2VlbiBhIG1lbW9yeS1tYXBwZWQgc291cmNlIGFkZHJlc3MgYW5kIGEgbWVtb3J5LW1hcHBlZFxuIDY5ODpcdFx0ICBkZXN0aW5hdGlvbiBhZGRyZXNzLlxuIDY5OTpcdFx0ICBBWEkgRE1BIGVuZ2luZSBwcm92aWRlcyBoaWdoLWJhbmR3aWR0aCBvbmUgZGltZW5zaW9uYWwgZGlyZWN0XG4gNzAwOlx0XHQgIG1lbW9yeSBhY2Nlc3MgYmV0d2VlbiBtZW1vcnkgYW5kIEFYSTQtU3RyZWFtIHRhcmdldCBwZXJpcGhlcmFscy5cbiA3MDE6XHRcdCAgQVhJIE1DRE1BIGVuZ2luZSBwcm92aWRlcyBoaWdoLWJhbmR3aWR0aCBkaXJlY3QgbWVtb3J5IGFjY2Vzc1xuIDcwMjpcdFx0ICBiZXR3ZWVuIG1lbW9yeSBhbmQgQVhJNC1TdHJlYW0gdGFyZ2V0IHBlcmlwaGVyYWxzLiBJdCBwcm92aWRlc1xuIDcwMzpcdFx0ICB0aGUgc2NhdHRlciBnYXRoZXIgaW50ZXJmYWNlIHdpdGggbXVsdGlwbGUgY2hhbm5lbHMgaW5kZXBlbmRlbnRcbiA3MDQ6XHRcdCAgY29uZmlndXJhdGlvbiBzdXBwb3J0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDIyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQ09ORklHX09GX0FERFJFU1NgLiBDYW4gd2UgcmVhbGlzdGljYWxseSBlbmFibGUgYENPTkZJR19PRl9BRERSRVNTYCBvbiBhbiB4ODZfNjQgYXJjaGl0ZWN0dXJlPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBUbyBhbnN3ZXIgdGhhdCBkZWZpbml0aXZlbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBPRl9BRERSRVNTYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW5zIGFuZCBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYXBwbGljYWJpbGl0eSBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBnZXQgdG8gdGhlIHJvb3Qgb2YgaXRzIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9GX0FERFJFU1MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9LY29uZmlnPTgzPWNvbmZpZyBPRl9EWU5BTUlDXG4tLVxuZHJpdmVycy9vZi9LY29uZmlnLTkwLVxuZHJpdmVycy9vZi9LY29uZmlnOjkxOmNvbmZpZyBPRl9BRERSRVNTXG5kcml2ZXJzL29mL0tjb25maWctOTItXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9vZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNvbWV0aGluZyBhcm91bmQgbGluZSA5MSwgb3IgYXQgbGVhc3QgaW4gdGhhdCB2aWNpbml0eS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3Qgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbiBvciBwb3RlbnRpYWxseSBhIHNwZWNpZmljIGRyaXZlciYjMzk7cyBidWlsZCBvcHRpb25zIG1pZ2h0IGJlIGRlZmluZWQgdGhlcmUuIEl0JiMzOTtzIGEgaHVuY2ggYmFzZWQgb24gY29tbW9uIHBhdHRlcm5zIGluIGVtYmVkZGVkIHN5c3RlbXMgZGV2ZWxvcG1lbnQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGxpZXMgd2l0aGluIHRob3NlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcbiAgODE6XHQjIEhhcmRseSBhbnkgcGxhdGZvcm1zIG5lZWQgdGhpcy4gIEl0IGlzIHNhZmUgdG8gc2VsZWN0LCBidXQgb25seSBkbyBzbyBpZiB5b3VcbiAgODI6XHQjIG5lZWQgaXQuXG4gIDgzOlx0Y29uZmlnIE9GX0RZTkFNSUNcbiAgODQ6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZHluYW1pYyBkZXZpY2UgdHJlZXNcJiMzNDsgaWYgT0ZfVU5JVFRFU1RcbiAgODU6XHRcdHNlbGVjdCBPRl9LT0JKXG4gIDg2Olx0XHRoZWxwXG4gIDg3Olx0XHQgIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgZGV2aWNlIHRyZWUgY2FuIGJlIG1hbmlwdWxhdGVkIGF0IHJ1bnRpbWUuXG4gIDg4Olx0XHQgIFdoaWxlIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgb24gc3VjaCBwbGF0Zm9ybXMsIHlvdVxuICA4OTpcdFx0ICBjYW4gZW5hYmxlIGl0IG1hbnVhbGx5IHRvIGltcHJvdmUgZGV2aWNlIHRyZWUgdW5pdCB0ZXN0IGNvdmVyYWdlLlxuICA5MDpcdFxuICA5MTpcdGNvbmZpZyBPRl9BRERSRVNTXG4gIDkyOlx0XHRkZWZfYm9vbCB5XG4gIDkzOlx0XHRkZXBlbmRzIG9uICFTUEFSQyBcdTAwMjZcdTAwMjYgKEhBU19JT01FTSB8fCBVTUwpXG4gIDk0Olx0XG4gIDk1Olx0Y29uZmlnIE9GX0lSUVxuICA5NjpcdFx0ZGVmX2Jvb2wgeVxuICA5NzpcdFx0ZGVwZW5kcyBvbiAhU1BBUkMgXHUwMDI2XHUwMDI2IElSUV9ET01BSU5cbiAgOTg6XHRcbiAgOTk6XHRjb25maWcgT0ZfUkVTRVJWRURfTUVNXG4gMTAwOlx0XHRkZWZfYm9vbCBPRl9FQVJMWV9GTEFUVFJFRVxuIDEwMTpcdFxuIDEwMjpcdGNvbmZpZyBPRl9SRVNPTFZFXG4gMTAzOlx0XHRib29sXG4gMTA0Olx0XG4gMTA1Olx0Y29uZmlnIE9GX09WRVJMQVlcbiAxMDY6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIFRyZWUgb3ZlcmxheXNcJiMzNDtcbiAxMDc6XHRcdHNlbGVjdCBPRl9EWU5BTUlDXG4gMTA4Olx0XHRzZWxlY3QgT0ZfRkxBVFRSRUVcbiAxMDk6XHRcdHNlbGVjdCBPRl9SRVNPTFZFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODI5CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDEyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IE5lZ2F0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBgeGxueF90c25gIGNvbXBvbmVudCBpcyBzb21ldGhpbmcgd2UgY2FuIGVmZmVjdGl2ZWx5IGZ1enouIEZpcnN0LCBpcyBpdCBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpYyB0byBoYXJkd2FyZT8gIFllcywgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFuIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIG9uIGFuIEZQR0Egb3IgU29DLiBTbywgaXQgZGVmaW5pdGVseSByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZTogYW4gRlBHQSBhbmQgcmVsYXRlZCBJUCBibG9ja3MsIGluY2x1ZGluZyBYaWxpbngmIzM5O3MgTUNETUEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGUgZHJpdmVyIGRvZXMuIEZyb20gdGhlIGNvZGUsIGl0IHByb2JlcyBmb3IgY2xvY2tzIGFuZCBwb3B1bGF0ZXMgc3ViZGV2aWNlcyBhbmQgYWxzbyByZXF1ZXN0cyBhbmQgY29uZmlndXJlcyBETUEgY2hhbm5lbHMsIGludGVyYWN0aW5nIHdpdGggdGhlIFhpbGlueCBWRE1BL01DRE1BLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB0aGlzIGhhcmR3YXJlIGJlIGVtdWxhdGVkIGluIG91ciBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgUUVNVSBvciBHQ0UgVk1zIG9uIGFtZDY0PyBOby4gVGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uIG9mIHRoaXMgWGlsaW54LXNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIHRoZSBUU04gRlBHQSBNQUMgb3IgTUNETUEsIGluIHRob3NlIGVudmlyb25tZW50cy4KCkxldCYjMzk7cyBjb25zdWx0IHRoZSBzeXprYWxsZXIgY3JpdGVyaWEgcmVnYXJkaW5nIHdoZW4gKm5vdCogdG8gZnV6ei4gIEl0JiMzOTtzIGNsZWFyIGZyb20gdGhlIGRvY3VtZW50YXRpb24gdGhhdCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUgZmFsbCB1bmRlciB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeSBhbmQgdGhhdCBzdWNoIGRyaXZlcnMgc2hvdWxkbiYjMzk7dCBiZSBmdXp6ZWQuIFRoaXMgaXMgYSB2ZXJ5IGltcG9ydGFudCBwb2ludCEKClNvLCBkb2VzIHRoaXMgZHJpdmVyIGludGVyYWN0IHdpdGggYW55IHZpcnR1YWwgYnVzZXM/IE5vLiBJdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgcHJvdmlkZWQgYnkgWGlsaW54LiBJdCYjMzk7cyBub3QgcmVhY2hhYmxlIHZpYSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIG9yIHNvY2tldHMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIHNvbGUgZXh0ZW50IG9mIHRoZSBjaGFuZ2UuIFRoZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgbG9vayBsaWtlIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGFuZCBNYWtlZmlsZSB1cGRhdGVzIGFsb25nc2lkZSB0aGUgbmV3IGRyaXZlciBmaWxlczogYHhsbnhfdHNuLmhgLCBgeGxueF90c25fZXAuY2AsIGB4bG54X3Rzbl9tYWluLmNgLiBFdmVyeXRoaW5nIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL2AgZGlyZWN0b3J5LCBpbmNsdWRpbmcgRGV2aWNlIFRyZWUgYmluZGluZ3MuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgZHJpdmVyIGlzIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBoYXJkd2FyZSB1bmF2YWlsYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cywgaXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgbW9kaWZpZWQgY29kZSBpcyB2ZW5kb3Itc3BlY2lmaWMgYW5kIHJlcXVpcmVzIGFuIEZQR0EvU29DLiAgVGh1cywgdGhpcyBjb2RlIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAgYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZy4gSSB3aWxsIHNldCB0aGUgZmllbGRzIHJlcXVpcmVkIGJ5IGBzZXQtcmVzdWx0c2AgYXM6Ci0gYFdvcnRoRnV6emluZ2A6IGZhbHNlCi0gYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gKFRpbWUtU2Vuc2l0aXZlIE5ldHdvcmtpbmcpIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChgZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9gKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuCi0gYEZvY3VzU3ltYm9sc2A6IFtdIChlbXB0eSBsaXN0KQotIGBFbmFibGVDb25maWdzYDogW10gKGVtcHR5IGxpc3QpCgpOb3csIGxldCYjMzk7cyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHBsYXRmb3JtIGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAgY29yZSAoZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi8pLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgdmVuZG9yLXNwZWNpZmljIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuLykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjM1LjQxMjYyODAyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzQwNTIzMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzozNS40MTI2MzIzMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzcxMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI3ZGFkZWUwYjYzZWRjZGM5MzUzZTRiNjFmODRmZWE0ZDQzY2IzMjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjoxNzozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGU2NWQxNzEwZGE3OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXFxuQEAgLTAsMCArMSwzNjQgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFhpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGltcGxlbWVudHMgSUVFRSA4MDIuMSBUaW1lLVNlbnNpdGl2ZVxcbisgIE5ldHdvcmtpbmcgKFRTTikgc3RhbmRhcmRzIGFuZCBwcm92aWRlcyBsb3ctbGF0ZW5jeSBuZXR3b3JrIGNvbm5lY3Rpdml0eVxcbisgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydFxcbisgIHN3aXRjaCwgd2l0aCB0d28gcG9ydHMgY29ubmVjdGVkIHRvIHRoZSBleHRlcm5hbCBuZXR3b3JrIGFuZCBvbmUgcG9ydFxcbisgIGNvbm5lY3RlZCB0byBhbiBpbnRlcm5hbCBlbmRwb2ludC4gSXQgYWxzbyBzdXBwb3J0cyBHTUlJL1JHTUlJIGludGVyZmFjZXNcXG4rICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdFxcbisgIDEwMCBNYi9zIGFuZCAxIEdiL3Mgc3BlZWRzLlxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBTcmluaXZhcyBOZWVsaSBcXHUwMDNjc3Jpbml2YXMubmVlbGlAYW1kLmNvbVxcdTAwM2VcXG4rICAtIE5hZ2FkaGVlcmFqIFJvdHRlbGEgXFx1MDAzY25hZ2FkaGVlcmFqLnJvdHRlbGFAYW1kLmNvbVxcdTAwM2VcXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGNvbnN0OiB4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBHVFggY2xvY2sgZm9yIHRyYW5zbWl0dGVyIGxvZ2ljIGFuZCBSVENcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1RYIDkwLWRlZ3JlZSBwaGFzZSBzaGlmdGVkIGNsb2NrIGZvciBSR01JSVxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFJYIEZJRk8gY2xvY2tcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogSG9zdCBUWCBGSUZPIGNsb2NrXFxuKyAgICAgIC0gZGVzY3JpcHRpb246IFJlZmVyZW5jZSBjbG9jayBmb3IgSURFTEFZIGNvbnRyb2xcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVhJLUxpdGUgcmVnaXN0ZXIgaW50ZXJmYWNlIGNsb2NrXFxuK1xcbisgIGNsb2NrLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gY29uc3Q6IGd0eFxcbisgICAgICAtIGNvbnN0OiBndHg5MFxcbisgICAgICAtIGNvbnN0OiBob3N0X3J4Zmlmb1xcbisgICAgICAtIGNvbnN0OiBob3N0X3R4Zmlmb1xcbisgICAgICAtIGNvbnN0OiByZWZcXG4rICAgICAgLSBjb25zdDogc19heGlcXG4rXFxuKyAgcmFuZ2VzOiB0cnVlXFxuK1xcbisgICcjYWRkcmVzcy1jZWxscyc6XFxuKyAgICBjb25zdDogMVxcbitcXG4rICAnI3NpemUtY2VsbHMnOlxcbisgICAgY29uc3Q6IDFcXG4rXFxuKyAgeGxueCxudW0tcHJpb3JpdGllczpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbisgICAgbWluaW11bTogMlxcbisgICAgbWF4aW11bTogOFxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIE51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgKHByaW9yaXRpZXMpIGNvbmZpZ3VyZWQgaW4gdGhlIElQLlxcbisgICAgICBUaGlzIGlzIGFuIElQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mXFxuKyAgICAgIHByaW9yaXR5IHF1ZXVlcyBhdmFpbGFibGUgZm9yIFFvUyBzY2hlZHVsaW5nLiBUcmFmZmljIGNsYXNzZXMgbWFwIHRvXFxuKyAgICAgIElFRUUgODAyLjFRIHByaW9yaXR5IGxldmVscyAoMC03KS5cXG4rXFxuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgIFxcXCJeZXRoZXJuZXRAWzAtOWEtZl0rJFxcXCI6XFxuKyAgICB0eXBlOiBvYmplY3RcXG4rICAgICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXFxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgRW5kcG9pbnQgTUFDIHN1Yi1ub2RlLiBQcm92aWRlcyB0aGUgaG9zdC1zaWRlIGRhdGEgcGF0aCB0aHJvdWdoIHRoZVxcbisgICAgICBETUEgY2hhbm5lbHMgZGVzY3JpYmVkIGJ5IGl0cyBkbWFzIC8gZG1hLW5hbWVzLlxcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICBjb25zdDogeGxueCx0c24tZXAtbWFjXFxuK1xcbisgICAgICByZWc6XFxuKyAgICAgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgICAgIGRtYXM6XFxuKyAgICAgICAgbWluSXRlbXM6IDJcXG4rICAgICAgICBtYXhJdGVtczogMTZcXG4rXFxuKyAgICAgIGRtYS1uYW1lczpcXG4rICAgICAgICBtaW5JdGVtczogMlxcbisgICAgICAgIG1heEl0ZW1zOiAxNlxcbisgICAgICAgIGl0ZW1zOlxcbisgICAgICAgICAgcGF0dGVybjogXFxcIl4odHh8cngpX2NoYW5bMC03XSRcXFwiXFxuKyAgICAgICAgZGVzY3JpcHRpb246IHxcXG4rICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICdkbWFzJywgb25lIHBlciBETUEgY2hhbm5lbCBhbmQgaW5cXG4rICAgICAgICAgIHRoZSBzYW1lIG9yZGVyLiBUWCBjaGFubmVsIG5hbWVzIHVzZSBcXFwidHhfY2hhblxcdTAwM2NOXFx1MDAzZVxcXCIgYW5kIFJYIGNoYW5uZWxcXG4rICAgICAgICAgIG5hbWVzIHVzZSBcXFwicnhfY2hhblxcdTAwM2NOXFx1MDAzZVxcXCIsIHdoZXJlIE4gaXMgMC4uNy4gRXhhbXBsZTogXFxcInR4X2NoYW4wXFxcIixcXG4rICAgICAgICAgIFxcXCJ0eF9jaGFuMVxcXCIsIC4uLiwgXFxcInJ4X2NoYW4wXFxcIiwgXFxcInJ4X2NoYW4xXFxcIiwgLi4uLlxcbitcXG4rICAgICAgdHgtcXVldWVzLWNvbmZpZzpcXG4rICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rICAgICAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgIFRYIHF1ZXVlIGNvbmZpZ3VyYXRpb24gbm9kZSB0aGF0IG1hcHMgSVAgcHJpb3JpdHkgcXVldWVzIHRvXFxuKyAgICAgICAgICBETUEgVFggY2hhbm5lbHMuIFRoZSBUU04gSVAgc3VwcG9ydHMgbXVsdGlwbGUgcHJpb3JpdHkgcXVldWVzIGZvclxcbisgICAgICAgICAgUW9TIHNjaGVkdWxpbmcsIGFuZCBlYWNoIHF1ZXVlIGNhbiBiZSBjb25uZWN0ZWQgdG8gYSBzcGVjaWZpYyBETUFcXG4rICAgICAgICAgIGNoYW5uZWwuIFRoaXMgbWFwcGluZyBkZWZpbmVzIHdoaWNoIERNQSBUWCBjaGFubmVsIGlzIHVzZWQgdG9cXG4rICAgICAgICAgIHRyYW5zbWl0IHBhY2tldHMgZm9yIGVhY2ggcHJpb3JpdHkgcXVldWUuIEZvciBleGFtcGxlLCBxdWV1ZTBcXG4rICAgICAgICAgIHdpdGggeGxueCxkbWEtY2hhbm5lbC1udW0gc2V0IHRvIDUgbWVhbnMgcHJpb3JpdHkgcXVldWUgMCB1c2VzXFxuKyAgICAgICAgICB0eF9jaGFuNSBmb3IgZGF0YSB0cmFuc2Zlci5cXG4rXFxuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgICAgICBcXFwiXnF1ZXVlWzAtN10kXFxcIjpcXG4rICAgICAgICAgICAgdHlwZTogb2JqZWN0XFxuKyAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICAgICAgRWFjaCBzdWJub2RlIHJlcHJlc2VudHMgYSBwcmlvcml0eSBxdWV1ZS4gVGhlXFxuKyAgICAgICAgICAgICAgeGxueCxkbWEtY2hhbm5lbC1udW0gcHJvcGVydHkgc3BlY2lmaWVzIHdoaWNoIERNQSBUWCBjaGFubmVsXFxuKyAgICAgICAgICAgICAgKHR4X2NoYW4wIHRvIHR4X2NoYW43KSBpcyBjb25uZWN0ZWQgdG8gdGhpcyBxdWV1ZSBmb3JcXG4rICAgICAgICAgICAgICB0cmFuc21pdHRpbmcgcGFja2V0cy5cXG4rICAgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bTpcXG4rICAgICAgICAgICAgICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICAgICAgICAgIERNQSBjaGFubmVsIHRoYXQgdHJhbnNtaXRzIHRoaXMgcHJpb3JpdHkgcXVldWUsIGdpdmVuIGFzXFxuKyAgICAgICAgICAgICAgICAgIHRoZSBOIG9mIHRoZSB0eF9jaGFuTiBlbnRyeSBpbiBkbWEtbmFtZXMuXFxuKyAgICAgICAgICAgICAgICBtaW5pbXVtOiAwXFxuKyAgICAgICAgICAgICAgICBtYXhpbXVtOiA3XFxuK1xcbisgICAgICAgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAgICAgICAtIHhsbngsZG1hLWNoYW5uZWwtbnVtXFxuK1xcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gY29tcGF0aWJsZVxcbisgICAgICAtIHJlZ1xcbisgICAgICAtIGRtYXNcXG4rICAgICAgLSBkbWEtbmFtZXNcXG4rICAgICAgLSB0eC1xdWV1ZXMtY29uZmlnXFxuK1xcbisgIFxcXCJec3dpdGNoQFswLTlhLWZdKyRcXFwiOlxcbisgICAgdHlwZTogb2JqZWN0XFxuKyAgICAkcmVmOiAvc2NoZW1hcy9uZXQvZHNhL2RzYS55YW1sIy8kZGVmcy9ldGhlcm5ldC1wb3J0c1xcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFRocmVlLXBvcnQgRXRoZXJuZXQgc3dpdGNoIHN1Yi1ub2RlLiBDb250YWlucyB0aGUgc3dpdGNoIGZhYnJpY1xcbisgICAgICByZWdpc3RlciB3aW5kb3cgYW5kIHRoZSB0d28gcGVyLU1BQyByZWdpc3RlciB3aW5kb3dzLiBFYWNoIHBlci1NQUNcXG4rICAgICAgd2luZG93IGhvdXNlcyBhbiBNRElPIGNvbnRyb2xsZXIgYW5kIGEgUFRQIHJlZ2lzdGVyIGJsb2NrIGF0IGZpeGVkXFxuKyAgICAgIG9mZnNldHMuIFRoZSBJUCdzIHBlci1NQUMgYW5kIFBUUC10aW1lciBpbnRlcnJ1cHRzIGFyZSBleHBvc2VkIGhlcmUuXFxuK1xcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICBjb25zdDogeGxueCx0c24tc3dpdGNoXFxuK1xcbisgICAgICByZWc6XFxuKyAgICAgICAgaXRlbXM6XFxuKyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBTd2l0Y2ggZmFicmljIHJlZ2lzdGVyIHdpbmRvd1xcbisgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMSByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUClcXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1BQzIgcmVnaXN0ZXIgd2luZG93IChpbmNsdWRlcyBNRElPIGFuZCBQVFApXFxuK1xcbisgICAgICByZWctbmFtZXM6XFxuKyAgICAgICAgaXRlbXM6XFxuKyAgICAgICAgICAtIGNvbnN0OiBzd2l0Y2hcXG4rICAgICAgICAgIC0gY29uc3Q6IG1hYzFcXG4rICAgICAgICAgIC0gY29uc3Q6IG1hYzJcXG4rXFxuKyAgICAgIGludGVycnVwdHM6XFxuKyAgICAgICAgbWluSXRlbXM6IDdcXG4rICAgICAgICBtYXhJdGVtczogN1xcbitcXG4rICAgICAgaW50ZXJydXB0LW5hbWVzOlxcbisgICAgICAgIGl0ZW1zOlxcbisgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzFcXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90eF9tYWMxXFxuKyAgICAgICAgICAtIGNvbnN0OiBtYWNfaXJxX21hYzFcXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90aW1lclxcbisgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzJcXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90eF9tYWMyXFxuKyAgICAgICAgICAtIGNvbnN0OiBtYWNfaXJxX21hYzJcXG4rXFxuKyAgICAgIG1kaW8tMTpcXG4rICAgICAgICAkcmVmOiAvc2NoZW1hcy9uZXQvbWRpby55YW1sI1xcbisgICAgICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgTURJTyBidXMgY29udHJvbGxlciBmb3IgTUFDMS4gUmVnaXN0ZXJzIHJlc2lkZSBpbnNpZGUgdGhlIG1hYzFcXG4rICAgICAgICAgIHJlZy1uYW1lcyB3aW5kb3cuXFxuKyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rICAgICAgbWRpby0yOlxcbisgICAgICAgICRyZWY6IC9zY2hlbWFzL25ldC9tZGlvLnlhbWwjXFxuKyAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMyLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMlxcbisgICAgICAgICAgcmVnLW5hbWVzIHdpbmRvdy5cXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydHMkXFxcIjpcXG4rICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuKyAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICcjYWRkcmVzcy1jZWxscyc6XFxuKyAgICAgICAgICAgIGNvbnN0OiAxXFxuK1xcbisgICAgICAgICAgJyNzaXplLWNlbGxzJzpcXG4rICAgICAgICAgICAgY29uc3Q6IDBcXG4rXFxuKyAgICAgICAgICBwb3J0QDA6XFxuKyAgICAgICAgICAgIHR5cGU6IG9iamVjdFxcbisgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWVcXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICAgICAgQ1BVIHBvcnQuIFdpcmVkIGludGVybmFsbHkgdG8gdGhlIGVuZHBvaW50IE1BQyBzaWJsaW5nLlxcbitcXG4rICAgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgICByZWc6XFxuKyAgICAgICAgICAgICAgICBjb25zdDogMFxcbitcXG4rICAgICAgICAgICAgICBwaHktbW9kZTpcXG4rICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbFxcbitcXG4rICAgICAgICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgICAgICAgLSBldGhlcm5ldFxcbitcXG4rICAgICAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgICAgIFxcXCJecG9ydEBbMS0yXSRcXFwiOlxcbisgICAgICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlXFxuKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgICAgIEV4dGVybmFsIEV0aGVybmV0IHBvcnQuIHBvcnRAMSBpcyB3aXJlZCB0byBNQUMxIGFuZCByZWFjaGVkXFxuKyAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbWRpby0xIGJ1cywgcG9ydEAyIGlzIHdpcmVkIHRvIE1BQzIgYW5kIHJlYWNoZWRcXG4rICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBtZGlvLTIgYnVzLlxcbitcXG4rICAgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgICByZWc6XFxuKyAgICAgICAgICAgICAgICBlbnVtOiBbMSwgMl1cXG4rXFxuKyAgICAgICAgICAgICAgcGh5LW1vZGU6XFxuKyAgICAgICAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAgICAgICAtIGdtaWlcXG4rICAgICAgICAgICAgICAgICAgLSByZ21paVxcbisgICAgICAgICAgICAgICAgICAtIHJnbWlpLWlkXFxuK1xcbisgICAgICAgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAgICAgICAtIHJlZ1xcbisgICAgICAgICAgICAgIC0gcGh5LW1vZGVcXG4rICAgICAgICAgICAgICAtIHBoeS1oYW5kbGVcXG4rXFxuKyAgICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgICAtIHBvcnRAMFxcbisgICAgICAgICAgLSBwb3J0QDFcXG4rICAgICAgICAgIC0gcG9ydEAyXFxuK1xcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gY29tcGF0aWJsZVxcbisgICAgICAtIHJlZ1xcbisgICAgICAtIHJlZy1uYW1lc1xcbisgICAgICAtIGludGVycnVwdHNcXG4rICAgICAgLSBpbnRlcnJ1cHQtbmFtZXNcXG4rXFxuKyAgICBvbmVPZjpcXG4rICAgICAgLSByZXF1aXJlZDogW3BvcnRzXVxcbisgICAgICAtIHJlcXVpcmVkOiBbZXRoZXJuZXQtcG9ydHNdXFxuK1xcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIGNsb2Nrc1xcbisgIC0gY2xvY2stbmFtZXNcXG4rICAtIHhsbngsbnVtLXByaW9yaXRpZXNcXG4rICAtIHJhbmdlc1xcbisgIC0gJyNhZGRyZXNzLWNlbGxzJ1xcbisgIC0gJyNzaXplLWNlbGxzJ1xcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICB0c25AODAwNDAwMDAge1xcbisgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLTMuMFxcXCI7XFxuKyAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18yXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18yXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18xXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18xXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNm1pc2NfY2xrXzNcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNm1pc2NfY2xrXzBcXHUwMDNlO1xcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXFxcImd0eFxcXCIsIFxcXCJndHg5MFxcXCIsIFxcXCJob3N0X3J4Zmlmb1xcXCIsIFxcXCJob3N0X3R4Zmlmb1xcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgICBcXFwicmVmXFxcIiwgXFxcInNfYXhpXFxcIjtcXG4rICAgICAgICB4bG54LG51bS1wcmlvcml0aWVzID0gXFx1MDAzYzhcXHUwMDNlO1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgIHJhbmdlcyA9IFxcdTAwM2MweDAgMHg4MDA0MDAwMCAweDQwMDAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXBfbWFjOiBldGhlcm5ldEAxNjAwMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tZXAtbWFjXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4MTYwMDAgMHhhMDAwXFx1MDAzZTtcXG4rICAgICAgICAgICAgZG1hcyA9IFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMVxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMlxcdTAwM2UsXFxuKyAgICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDNcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDRcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDVcXHUwMDNlLFxcbisgICAgICAgICAgICAgICAgICAgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCA2XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCA3XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCAxNlxcdTAwM2UsXFxuKyAgICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDE3XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCAxOFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMTlcXHUwMDNlLFxcbisgICAgICAgICAgICAgICAgICAgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCAyMFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMjFcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDIyXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICAgIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMjNcXHUwMDNlO1xcbisgICAgICAgICAgICBkbWEtbmFtZXMgPSBcXFwidHhfY2hhbjBcXFwiLCBcXFwidHhfY2hhbjFcXFwiLCBcXFwidHhfY2hhbjJcXFwiLCBcXFwidHhfY2hhbjNcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwidHhfY2hhbjRcXFwiLCBcXFwidHhfY2hhbjVcXFwiLCBcXFwidHhfY2hhbjZcXFwiLCBcXFwidHhfY2hhbjdcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwicnhfY2hhbjBcXFwiLCBcXFwicnhfY2hhbjFcXFwiLCBcXFwicnhfY2hhbjJcXFwiLCBcXFwicnhfY2hhbjNcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwicnhfY2hhbjRcXFwiLCBcXFwicnhfY2hhbjVcXFwiLCBcXFwicnhfY2hhbjZcXFwiLCBcXFwicnhfY2hhbjdcXFwiO1xcbisgICAgICAgICAgICB0eC1xdWV1ZXMtY29uZmlnIHtcXG4rICAgICAgICAgICAgICAgIHF1ZXVlMCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXFx1MDAzYzB4N1xcdTAwM2U7IH07XFxuKyAgICAgICAgICAgICAgICBxdWV1ZTEgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFxcdTAwM2MweDZcXHUwMDNlOyB9O1xcbisgICAgICAgICAgICAgICAgcXVldWUyIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcXHUwMDNjMHg1XFx1MDAzZTsgfTtcXG4rICAgICAgICAgICAgICAgIHF1ZXVlMyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXFx1MDAzYzB4NFxcdTAwM2U7IH07XFxuKyAgICAgICAgICAgICAgICBxdWV1ZTQgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFxcdTAwM2MweDNcXHUwMDNlOyB9O1xcbisgICAgICAgICAgICAgICAgcXVldWU1IHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcXHUwMDNjMHgyXFx1MDAzZTsgfTtcXG4rICAgICAgICAgICAgICAgIHF1ZXVlNiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXFx1MDAzYzB4MVxcdTAwM2U7IH07XFxuKyAgICAgICAgICAgICAgICBxdWV1ZTcgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFxcdTAwM2MweDBcXHUwMDNlOyB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuK1xcbisgICAgICAgIHN3aXRjaEAzODAwMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tc3dpdGNoXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4MzgwMDAgMHg4MDAwXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICAgXFx1MDAzYzB4MDAwMDAgMHgxNDAwMFxcdTAwM2UsXFxuKyAgICAgICAgICAgICAgICAgIFxcdTAwM2MweDIwMDAwIDB4MTQwMDBcXHUwMDNlO1xcbisgICAgICAgICAgICByZWctbmFtZXMgPSBcXFwic3dpdGNoXFxcIiwgXFxcIm1hYzFcXFwiLCBcXFwibWFjMlxcXCI7XFxuK1xcbisgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gXFx1MDAzY1xcdTAwMjZpbnRjXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0cyA9IFxcdTAwM2MwIDJcXHUwMDNlLCBcXHUwMDNjMiAyXFx1MDAzZSwgXFx1MDAzYzQgMlxcdTAwM2UsIFxcdTAwM2M2IDJcXHUwMDNlLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzYzEgMlxcdTAwM2UsIFxcdTAwM2MzIDJcXHUwMDNlLCBcXHUwMDNjNSAyXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gXFxcInB0cF9yeF9tYWMxXFxcIiwgXFxcInB0cF90eF9tYWMxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1hY19pcnFfbWFjMVxcXCIsIFxcXCJwdHBfdGltZXJcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicHRwX3J4X21hYzJcXFwiLCBcXFwicHRwX3R4X21hYzJcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibWFjX2lycV9tYWMyXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIG1kaW8tMSB7XFxuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgcGh5MDogZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgIH07XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBtZGlvLTIge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgIHBoeTE6IGV0aGVybmV0LXBoeUAxIHtcXG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcG9ydHMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwb3J0QDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBldGhlcm5ldCA9IFxcdTAwM2NcXHUwMDI2ZXBfbWFjXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJpbnRlcm5hbFxcXCI7XFxuK1xcbisgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsge1xcbisgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IFxcdTAwM2MxMDAwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7XFxuKyAgICAgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICAgICAgcG9ydEAxIHtcXG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2cGh5MFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcXFwicmdtaWktaWRcXFwiO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwb3J0QDIge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MyXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXFx1MDAzY1xcdTAwMjZwaHkxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJyZ21paS1pZFxcXCI7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYjIzZmI2ZjJmNGVmNC4uZmY5NGUzMTRlZWIxZiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTI5OTExLDYgKzI5OTExLDE0IEBAIE06XFx0SGFyc2ggSmFpbiBcXHUwMDNjaC5qYWluQGFtZC5jb21cXHUwMDNlXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdGRyaXZlcnMvY2hhci9od19yYW5kb20veGlsaW54LXRybmcuY1xcbiBcXG4rWElMSU5YIFRTTiBFTkRQT0lOVCBFVEhFUk5FVCBNQUMgRFJJVkVSXFxuK006XFx0TmFnYWRoZWVyYWogUm90dGVsYSBcXHUwMDNjbmFnYWRoZWVyYWoucm90dGVsYUBhbWQuY29tXFx1MDAzZVxcbitNOlxcdFNyaW5pdmFzIE5lZWxpIFxcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXFx1MDAzZVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vXFxuK1xcbiBYSUxJTlggVUFSVExJVEUgU0VSSUFMIERSSVZFUlxcbiBNOlxcdFBldGVyIEtvcnNnYWFyZCBcXHUwMDNjamFjbWV0QHN1bnNpdGUuZGtcXHUwMDNlXFxuIEw6XFx0bGludXgtc2VyaWFsQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXFxuaW5kZXggNzUwMjIxNGNjN2Q1MC4uYzZkNzA0YzhkM2Q0NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXFxuQEAgLTQxLDQgKzQxLDUgQEAgY29uZmlnIFhJTElOWF9MTF9URU1BQ1xcbiBcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDXFxuIFxcdCAgY29yZSB1c2VkIGluIFhpbGlueCBTcGFydGFuIGFuZCBWaXJ0ZXggRlBHQXNcXG4gXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnXFxcIlxcbiBlbmRpZiAjIE5FVF9WRU5ET1JfWElMSU5YXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZVxcbmluZGV4IDdkN2RjMTc3MTQyM2UuLjY2ZGFiMDEyNjUwYjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXFxuQEAgLTgsMyArOCw0IEBAIG9iai0kKENPTkZJR19YSUxJTlhfTExfVEVNQUMpICs9IGxsX3RlbWFjLm9cXG4gb2JqLSQoQ09ORklHX1hJTElOWF9FTUFDTElURSkgKz0geGlsaW54X2VtYWNsaXRlLm9cXG4geGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vXFxuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICs9IHhpbGlueF9lbWFjLm9cXG4rb2JqLSQoQ09ORklHX1hJTElOWF9UU04pICs9IHRzbi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yOTJmMTc2OTQ0MDQyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uXFxuKyNcXG4rXFxuK2NvbmZpZyBYSUxJTlhfVFNOXFxuK1xcdHRyaXN0YXRlIFxcXCJYaWxpbnggVFNOIEV0aGVybmV0IGRyaXZlclxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBPRl9BRERSRVNTXFxuK1xcdGRlcGVuZHMgb24gWElMSU5YX0RNQVxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFNRC9YaWxpbnggVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZ1xcbitcXHQgIChUU04pIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUC4gSXQgcHJvdmlkZXMgdGhlIHdyYXBwZXIgZGV2aWNlXFxuK1xcdCAgYW5kIHRoZSBlbmRwb2ludCBNQUMgdGhhdCBjb25uZWN0cyB0aGUgSVAgdG8gdGhlIGhvc3QgQ1BVLiBUaGVcXG4rXFx0ICB0aHJlZS1wb3J0IHN3aXRjaCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBhbmlvbiBEU0EgZHJpdmVyLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTg4NjgyOGIzODZmNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlXFxuQEAgLTAsMCArMSwyIEBAXFxuK29iai0kKENPTkZJR19YSUxJTlhfVFNOKSArPSB4aWxpbnhfdHNuLm9cXG4reGlsaW54X3Rzbi15IDo9IHhpbGlueF90c25fbWFpbi5vIHhpbGlueF90c25fZXAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMDc1N2UyMmQxZmQxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oXFxuQEAgLTAsMCArMSwxNSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgZHJpdmVyLCBzaGFyZWQgZGVmaW5pdGlvbnMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfWElMSU5YX1RTTl9IXFxuKyNkZWZpbmUgX1hJTElOWF9UU05fSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbitcXG4rZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGxueF90c25fZXBfZHJpdmVyO1xcbitcXG4rI2VuZGlmIC8qIF9YSUxJTlhfVFNOX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGI3ZGEyNjUyMWQwMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuY1xcbkBAIC0wLDAgKzEsMTAzNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jaXJjX2J1Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hL3hpbGlueF9kbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwieGlsaW54X3Rzbi5oXFxcIlxcbitcXG4rI2RlZmluZSBEUklWRVJfTkFNRVxcdFxcdFxcdFxcXCJ4aWxpbnhfdHNuX2VwXFxcIlxcbitcXG4rI2RlZmluZSBUU05fRE1BX0NIX0lOVkFMSURcXHRcXHQweEZGVVxcbisjZGVmaW5lIFRTTl9NQVhfVFhfUVVFVUVcXHRcXHQ4XFxuKyNkZWZpbmUgVFNOX01BWF9SWF9RVUVVRVxcdFxcdDhcXG4rXFxuKyNkZWZpbmUgVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkVcXHRcXHQoRVRIX0RBVEFfTEVOICsgVkxBTl9FVEhfSExFTiArIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEVUSF9GQ1NfTEVOKVxcbitcXG4rI2RlZmluZSBUWF9CRF9OVU1fREVGQVVMVFxcdFxcdDY0XFxuKyNkZWZpbmUgUlhfQkRfTlVNX0RFRkFVTFRcXHRcXHQxMjhcXG4rXFxuKyNkZWZpbmUgRVBfUlhfUkVGSUxMX1JFVFJZXFx0XFx0bXNlY3NfdG9famlmZmllcygxMClcXG4rXFxuKy8qXFxuKyAqIFRoZSBETUEgZGVzY3JpcHRvciBzaWRlYmFuZCBzdGF0dXMgd29yZCBwYWNrcyBUSUQvVERFU1QvVFVTRVIgdG9nZXRoZXI7XFxuKyAqIFRVU0VSIG9jY3VwaWVzIHRoZSBsb3cgYnl0ZSwgVElEL1RERVNUIHNpdCBpbiB0aGUgdXBwZXIgYml0cy5cXG4rICovXFxuKyNkZWZpbmUgVFNOX1RVU0VSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuKy8qIFRVU0VSIElucHV0IFBvcnQgSUQgZmllbGQgKGJpdHMgWzU6NF0gb2YgdGhlIFRVU0VSIGZpZWxkKSAqL1xcbisjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0lEX01BU0tcXHRcXHRHRU5NQVNLKDUsIDQpXFxuKyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfRVBcXHRcXHQweDBcXG4rI2RlZmluZSBUU05fVFVTRVJfUE9SVF9NQUMxXFx0XFx0MHgxXFxuKyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfTUFDMlxcdFxcdDB4MlxcbitcXG4rLyogU2l6ZWQgdG8gaW5kZXggcG9ydF9tZFtdIGJ5IFRVU0VSIHBvcnRfaWQgKDEgb3IgMiwgc2xvdCAwIHVudXNlZCkgKi9cXG4rI2RlZmluZSBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTXFx0KFRTTl9UVVNFUl9QT1JUX01BQzIgKyAxKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAtIHNrYiBjb250YWluZXIgZm9yIGVhY2ggaW4tZmxpZ2h0IERNQSBkZXNjcmlwdG9yXFxuKyAqIEBzZ2w6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgYmFja2luZyB0aGUgRE1BIG1hcHBpbmdcXG4rICogQGRlc2M6IGRtYWVuZ2luZSBkZXNjcmlwdG9yIGhhbmRsZVxcbisgKiBAZG1hX2FkZHJlc3M6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHNnbCBlbnRyeSAoUlggcGF0aClcXG4rICogQHNrYjogU0tCIG93bmluZyB0aGUgYnVmZmVyXFxuKyAqIEBzZ19sZW46IG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIEBzZ2wgKFRYIHBhdGgpXFxuKyAqL1xcbitzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3Ige1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dsW01BWF9TS0JfRlJBR1MgKyAxXTtcXG4rXFx0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjO1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyZXNzO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRpbnQgc2dfbGVuO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAtIG9uZSBETUEgY2hhbm5lbCBhbmQgaXRzIFNLQiByaW5nXFxuKyAqIEBza2JfcmluZzogcGVyLXNsb3QgU0tCIGRlc2NyaXB0b3JzXFxuKyAqIEBlcDogcG9pbnRlciBiYWNrIHRvIHRoZSBvd25pbmcgRVAgaW5zdGFuY2VcXG4rICogQGNoYW46IGRtYWVuZ2luZSBjaGFubmVsIGhhbmRsZVxcbisgKiBAZG1hX2RldjogZGV2aWNlIHVzZWQgZm9yIERNQSBtYXBwaW5nICh0aGUgRE1BIGVuZ2luZSwgbm90IHRoZSBFUClcXG4rICogQHJpbmdfaGVhZDogcHJvZHVjZXIgaW5kZXhcXG4rICogQHJpbmdfdGFpbDogY29uc3VtZXIgaW5kZXhcXG4rICogQHJpbmdfc2l6ZTogbnVtYmVyIG9mIHNsb3RzIGluIEBza2JfcmluZ1xcbisgKiBAcnhfbG9jazogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGJldHdlZW4gdGhlIFJYIGNhbGxiYWNrIGFuZCB0aGUgcmVmaWxsIHRpbWVyXFxuKyAqIEB0eF9sb2NrOiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgYmV0d2VlbiB4bWl0IGFuZCBUWCBjb21wbGV0aW9uXFxuKyAqIEByeF9yZWZpbGxfdGltZXI6IHJldHJpZXMgUlggcmVmaWxsIGFmdGVyIGFuIGFsbG9jYXRpb24gZmFpbHVyZVxcbisgKiBAaXNfdHg6IHRydWUgZm9yIFRYIGNoYW5uZWxzLCBmYWxzZSBmb3IgUlhcXG4rICovXFxuK3N0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiB7XFxuK1xcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqKnNrYl9yaW5nO1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwO1xcbitcXHRzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRtYV9kZXY7XFxuK1xcdHUzMiByaW5nX2hlYWQ7XFxuK1xcdHUzMiByaW5nX3RhaWw7XFxuK1xcdHUzMiByaW5nX3NpemU7XFxuK1xcdHNwaW5sb2NrX3QgcnhfbG9jaztcXHQvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgKi9cXG4rXFx0c3BpbmxvY2tfdCB0eF9sb2NrO1xcdC8qIHNlcmlhbGlzZXMgQHJpbmdfaGVhZCBhbmQgQHJpbmdfdGFpbCAqL1xcbitcXHRzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWZpbGxfdGltZXI7XFxuK1xcdGJvb2wgaXNfdHg7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHhsbnhfdHNuX2VwIC0gRVAgTUFDIHByaXZhdGUgZGF0YSwgZW1iZWRkZWQgaW4gbmV0X2RldmljZSBwcml2IGFyZWFcXG4rICogQG5kZXY6IHRoZSBjb25kdWl0IG5ldGRldiAoXFxcImVwMFxcXCIgZm9yIHRoZSBmaXJzdCBJUCBpbnN0YW5jZSlcXG4rICogQGRldjogYmFja2luZyBkZXZpY2VcXG4rICogQG51bV90eF9xdWV1ZXM6IG51bWJlciBvZiBUWCBETUEgY2hhbm5lbHMgKG9uZSBwZXIgcHJpb3JpdHkpXFxuKyAqIEBudW1fcnhfcXVldWVzOiBudW1iZXIgb2YgUlggRE1BIGNoYW5uZWxzXFxuKyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLVxcdTAwM2UgcGh5c2ljYWwgRE1BIGNoYW5uZWwgbnVtYmVyXFxuKyAqIEByeF9jaGFuX251bTogUlggcmluZyBpbmRleCAtXFx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcXG4rICogQG1heF9mcm1fc2l6ZTogbWF4aW11bSBmcmFtZSBzaXplIGFjY2VwdGVkIG9uIFJYXFxuKyAqIEB0eF9jaGFuczogYXJyYXkgb2YgVFggY2hhbm5lbHMgKHNpemUgQG51bV90eF9xdWV1ZXMpXFxuKyAqIEByeF9jaGFuczogYXJyYXkgb2YgUlggY2hhbm5lbHMgKHNpemUgQG51bV9yeF9xdWV1ZXMpXFxuKyAqIEBjbG9zaW5nOiBzZXQgaW4gbmRvX3N0b3Agc28gdGhlIFJYIGNvbXBsZXRpb24gY2FsbGJhY2sgc3RvcHMgcmUtYXJtaW5nXFxuKyAqIEBwb3J0X21kOiBwZXItVFVTRVItcG9ydCBNRVRBREFUQV9IV19QT1JUX01VWCBlbnRyaWVzIGF0dGFjaGVkIG9uIFJYLFxcbisgKlxcdGluZGV4ZWQgYnkgcG9ydF9pZCAoMSBmb3IgTUFDMSwgMiBmb3IgTUFDMilcXG4rICovXFxuK3N0cnVjdCB4bG54X3Rzbl9lcCB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHUzMiBudW1fdHhfcXVldWVzO1xcbitcXHR1MzIgbnVtX3J4X3F1ZXVlcztcXG4rXFx0dTMyIHR4X2RtYV9jaGFuX21hcFtUU05fTUFYX1RYX1FVRVVFXTtcXG4rXFx0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xcbitcXHR1MzIgbWF4X2ZybV9zaXplO1xcbitcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoqdHhfY2hhbnM7XFxuK1xcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnJ4X2NoYW5zO1xcbitcXG4rXFx0Ym9vbCBjbG9zaW5nO1xcbitcXG4rXFx0c3RydWN0IG1ldGFkYXRhX2RzdCAqcG9ydF9tZFtYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpcXG4rZXBfZ2V0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiwgaW50IGlkeClcXG4re1xcbitcXHRyZXR1cm4geGNoYW4tXFx1MDAzZXNrYl9yaW5nW2lkeF07XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVwX2RtYV9yeF9jYih2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzdWx0KTtcXG4rXFxuK3N0YXRpYyBpbnQgZXBfcnhfc3VibWl0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYV9yeF9kZXNjO1xcbitcXHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHhjaGFuLVxcdTAwM2VlcDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0ZG1hX2FkZHJfdCBhZGRyO1xcbitcXG4rXFx0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQgXFx1MDAyNiAoeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcXG4rXFx0aWYgKCFza2J1Zl9kbWEpXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXG4rXFx0c2tiID0gZGV2X2FsbG9jX3NrYihlcC1cXHUwMDNlbWF4X2ZybV9zaXplKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c2dfaW5pdF90YWJsZShza2J1Zl9kbWEtXFx1MDAzZXNnbCwgMSk7XFxuK1xcdGFkZHIgPSBkbWFfbWFwX3NpbmdsZSh4Y2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tiLVxcdTAwM2VkYXRhLCBlcC1cXHUwMDNlbWF4X2ZybV9zaXplLFxcbitcXHRcXHRcXHQgICAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbitcXHRpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoeGNoYW4tXFx1MDAzZWRtYV9kZXYsIGFkZHIpKSkge1xcbitcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbitcXHRcXHRcXHRkZXZfd2FybihlcC1cXHUwMDNlZGV2LCBcXFwiRE1BIG1hcHBpbmcgZXJyb3Igb24gUlggc3VibWl0XFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbitcXHR9XFxuK1xcdHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cXHUwMDNlc2dsKSA9IGFkZHI7XFxuK1xcdHNnX2RtYV9sZW4oc2tidWZfZG1hLVxcdTAwM2VzZ2wpID0gZXAtXFx1MDAzZW1heF9mcm1fc2l6ZTtcXG4rXFx0ZG1hX3J4X2Rlc2MgPSBkbWFlbmdpbmVfcHJlcF9zbGF2ZV9zZyh4Y2hhbi1cXHUwMDNlY2hhbiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIDEsIERNQV9ERVZfVE9fTUVNLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBETUFfUFJFUF9JTlRFUlJVUFQpO1xcbitcXHRpZiAoIWRtYV9yeF9kZXNjKVxcbitcXHRcXHRnb3RvIGVycl91bm1hcF9za2I7XFxuK1xcbitcXHRza2J1Zl9kbWEtXFx1MDAzZXNrYiA9IHNrYjtcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2VkbWFfYWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cXHUwMDNlc2dsKTtcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2VkZXNjID0gZG1hX3J4X2Rlc2M7XFxuK1xcdGRtYV9yeF9kZXNjLVxcdTAwM2VjYWxsYmFja19wYXJhbSA9IHhjaGFuO1xcbitcXHRkbWFfcnhfZGVzYy1cXHUwMDNlY2FsbGJhY2tfcmVzdWx0ID0gZXBfZG1hX3J4X2NiO1xcbitcXHR4Y2hhbi1cXHUwMDNlcmluZ19oZWFkKys7XFxuK1xcdGRtYWVuZ2luZV9zdWJtaXQoZG1hX3J4X2Rlc2MpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfdW5tYXBfc2tiOlxcbitcXHRkbWFfdW5tYXBfc2luZ2xlKHhjaGFuLVxcdTAwM2VkbWFfZGV2LCBhZGRyLCBlcC1cXHUwMDNlbWF4X2ZybV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xcbitlcnJfZnJlZV9za2I6XFxuK1xcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGVwX3J4X3JlZmlsbChzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuLCBib29sIGFybV90aW1lcilcXG4re1xcbitcXHRpbnQgYXZhaWwsIGk7XFxuK1xcbitcXHRndWFyZChzcGlubG9ja19iaCkoXFx1MDAyNnhjaGFuLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UoeGNoYW4tXFx1MDAzZWVwLVxcdTAwM2VjbG9zaW5nKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0YXZhaWwgPSBDSVJDX1NQQUNFKHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQsIFJFQURfT05DRSh4Y2hhbi1cXHUwMDNlcmluZ190YWlsKSxcXG4rXFx0XFx0XFx0ICAgeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhdmFpbDsgaSsrKSB7XFxuK1xcdFxcdGlmIChlcF9yeF9zdWJtaXRfZGVzYyh4Y2hhbikpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFxuK1xcdGlmICh4Y2hhbi1cXHUwMDNlcmluZ19oZWFkICE9IFJFQURfT05DRSh4Y2hhbi1cXHUwMDNlcmluZ190YWlsKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoYXJtX3RpbWVyKVxcbitcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnhjaGFuLVxcdTAwM2VyeF9yZWZpbGxfdGltZXIsIGppZmZpZXMgKyBFUF9SWF9SRUZJTExfUkVUUlkpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9yeF9yZWZpbGxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiA9IHRpbWVyX2NvbnRhaW5lcl9vZih4Y2hhbiwgdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4X3JlZmlsbF90aW1lcik7XFxuK1xcbitcXHRlcF9yeF9yZWZpbGwoeGNoYW4sIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9kbWFfcnhfY2Iodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlc3VsdClcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcXG4rXFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XFxuK1xcdHNpemVfdCBtZXRhX2xlbiwgbWV0YV9tYXhfbGVuLCByeF9sZW47XFxuK1xcdHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSB4Y2hhbi1cXHUwMDNlZXA7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZXAtXFx1MDAzZW5kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHUzMiBwb3J0X2lkLCB0dXNlcjtcXG4rXFx0dTMyICptZXRhZGF0YTtcXG4rXFxuK1xcdHNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi1cXHUwMDNlcmluZ190YWlsIFxcdTAwMjYgKHhjaGFuLVxcdTAwM2VyaW5nX3NpemUgLSAxKSk7XFxuK1xcdFdSSVRFX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCArIDEpO1xcbitcXHRza2IgPSBza2J1Zl9kbWEtXFx1MDAzZXNrYjtcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2Vza2IgPSBOVUxMO1xcbitcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVxcdTAwM2VkbWFfYWRkcmVzcyxcXG4rXFx0XFx0XFx0IGVwLVxcdTAwM2VtYXhfZnJtX3NpemUsIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcbitcXHRpZiAocmVzdWx0LVxcdTAwM2VyZXN1bHQgIT0gRE1BX1RSQU5TX05PRVJST1IpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZXAtXFx1MDAzZWRldiwgXFxcIlJYIERNQSB0cmFuc2ZlciBlcnJvciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IHJlc3VsdC1cXHUwMDNlcmVzdWx0KTtcXG4rXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZXJyb3JzKTtcXG4rXFx0XFx0Z290byBzdWJtaXRfbmV3O1xcbitcXHR9XFxuK1xcbitcXHRtZXRhZGF0YSA9IGRtYWVuZ2luZV9kZXNjX2dldF9tZXRhZGF0YV9wdHIoc2tidWZfZG1hLVxcdTAwM2VkZXNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bWV0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtZXRhX21heF9sZW4pO1xcbitcXHRpZiAoSVNfRVJSX09SX05VTEwobWV0YWRhdGEpKSB7XFxuK1xcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdGRldl93YXJuKGVwLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gZ2V0IFJYIG1ldGFkYXRhIHBvaW50ZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9kcm9wcGVkKTtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpO1xcbitcXHRcXHRnb3RvIHN1Ym1pdF9uZXc7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE1DRE1BIG1ldGFkYXRhOiBbMF0gPSBzdGF0dXMsIFsxXSA9IHNpZGViYW5kIChUSUQvVERFU1QvVFVTRVIpLCBbMi4uXSA9IGFwcCAqL1xcbitcXHR0dXNlciA9IG1ldGFkYXRhWzFdIFxcdTAwMjYgVFNOX1RVU0VSX01BU0s7XFxuK1xcdHJ4X2xlbiA9IGVwLVxcdTAwM2VtYXhfZnJtX3NpemUgLSByZXN1bHQtXFx1MDAzZXJlc2lkdWU7XFxuK1xcbitcXHRpZiAocnhfbGVuIFxcdTAwM2UgZXAtXFx1MDAzZW1heF9mcm1fc2l6ZSB8fCByeF9sZW4gXFx1MDAzYyBFVEhfSExFTikge1xcbitcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbitcXHRcXHRcXHRkZXZfd2FybihlcC1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBSWCBsZW5ndGggJXp1IChtYXg9JXUsIG1pbj0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCByeF9sZW4sIGVwLVxcdTAwM2VtYXhfZnJtX3NpemUsIEVUSF9ITEVOKTtcXG4rXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZXJyb3JzKTtcXG4rXFx0XFx0Z290byBzdWJtaXRfbmV3O1xcbitcXHR9XFxuK1xcbitcXHRwb3J0X2lkID0gRklFTERfR0VUKFRTTl9UVVNFUl9QT1JUX0lEX01BU0ssIHR1c2VyKTtcXG4rXFx0aWYgKHBvcnRfaWQgIT0gVFNOX1RVU0VSX1BPUlRfTUFDMSBcXHUwMDI2XFx1MDAyNiBwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzIpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0ZGV2X2RiZyhlcC1cXHUwMDNlZGV2LCBcXFwiUlggZHJvcHBpbmcgdW5leHBlY3RlZCBUVVNFUiBwb3J0X2lkPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwb3J0X2lkKTtcXG4rXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdGdvdG8gc3VibWl0X25ldztcXG4rXFx0fVxcbitcXG4rXFx0c2tiX3B1dChza2IsIHJ4X2xlbik7XFxuK1xcdGlmIChuZXRkZXZfdXNlc19kc2EobmRldikpIHtcXG4rXFx0XFx0ZHN0X2hvbGQoXFx1MDAyNmVwLVxcdTAwM2Vwb3J0X21kW3BvcnRfaWRdLVxcdTAwM2Vkc3QpO1xcbitcXHRcXHRza2JfZHN0X3NldChza2IsIFxcdTAwMjZlcC1cXHUwMDNlcG9ydF9tZFtwb3J0X2lkXS1cXHUwMDNlZHN0KTtcXG4rXFx0fVxcbitcXHRza2ItXFx1MDAzZWRldiA9IG5kZXY7XFxuK1xcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpO1xcbitcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuK1xcdF9fbmV0aWZfcngoc2tiKTtcXG4rXFxuK1xcdERFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7XFxuK1xcdERFVl9TVEFUU19BREQobmRldiwgcnhfYnl0ZXMsIHJ4X2xlbik7XFxuK1xcbitzdWJtaXRfbmV3OlxcbitcXHRlcF9yeF9yZWZpbGwoeGNoYW4sIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9kbWFfdHhfY2Iodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlc3VsdClcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcXG4rXFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XFxuK1xcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRpbnQgc2dfbGVuO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spIHtcXG4rXFx0XFx0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sXFxuK1xcdFxcdFxcdFxcdFxcdHhjaGFuLVxcdTAwM2VyaW5nX3RhaWwgXFx1MDAyNiAoeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcXG4rXFx0XFx0aWYgKCFza2J1Zl9kbWEgfHwgIXNrYnVmX2RtYS1cXHUwMDNlc2tiKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRza2IgPSBza2J1Zl9kbWEtXFx1MDAzZXNrYjtcXG4rXFx0XFx0c2dsID0gc2tidWZfZG1hLVxcdTAwM2VzZ2w7XFxuK1xcdFxcdHNnX2xlbiA9IHNrYnVmX2RtYS1cXHUwMDNlc2dfbGVuO1xcbitcXG4rXFx0XFx0ZG1hX3VubWFwX3NnKHhjaGFuLVxcdTAwM2VkbWFfZGV2LCBzZ2wsIHNnX2xlbiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcbitcXHRcXHRza2J1Zl9kbWEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCArIDEpO1xcbitcXHR9XFxuK1xcbitcXHRuZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuK1xcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xcbitcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShyZXN1bHQtXFx1MDAzZXJlc3VsdCAhPSBETUFfVFJBTlNfTk9FUlJPUikpIHtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9lcnJvcnMpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X3BhY2tldHMpO1xcbitcXHRcXHRERVZfU1RBVFNfQUREKG5kZXYsIHR4X2J5dGVzLCBsZW4pO1xcbitcXHR9XFxuK1xcbitcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuK1xcdG5ldGlmX3R4cV9jb21wbGV0ZWRfd2FrZSh0eHEsIDEsIGxlbixcXG4rXFx0XFx0XFx0XFx0IENJUkNfU1BBQ0UoUkVBRF9PTkNFKHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUkVBRF9PTkNFKHhjaGFuLVxcdTAwM2VyaW5nX3RhaWwpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSksIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgZXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYV90eF9kZXNjO1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hO1xcbitcXHRpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbjtcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXHRpbnQgc2dfbGVuLCBuZW50cywgcmV0O1xcbitcXHRkbWFfY29va2llX3QgY29va2llO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHF1ZXVlIFxcdTAwM2U9IGVwLVxcdTAwM2VudW1fdHhfcXVldWVzKSkge1xcbitcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbitcXHRcXHRcXHRuZXRkZXZfd2FybihuZGV2LCBcXFwiSW52YWxpZCBUWCBxdWV1ZSAlZCAobWF4ICV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHF1ZXVlLCBlcC1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuK1xcdFxcdGdvdG8gZXJyX2Ryb3Bfc2tiO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXAtXFx1MDAzZXR4X2RtYV9jaGFuX21hcFtxdWV1ZV0gPT0gVFNOX0RNQV9DSF9JTlZBTElEKSB7XFxuK1xcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdG5ldGRldl93YXJuKG5kZXYsIFxcXCJMb2dpY2FsIFRYIHF1ZXVlICVkIGhhcyBpbnZhbGlkIERNQSBtYXBwaW5nXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcXVldWUpO1xcbitcXHRcXHRnb3RvIGVycl9kcm9wX3NrYjtcXG4rXFx0fVxcbitcXG4rXFx0eGNoYW4gPSBlcC1cXHUwMDNldHhfY2hhbnNbcXVldWVdO1xcbitcXG4rXFx0c2dfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncyArIDE7XFxuK1xcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgcXVldWUpO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4Y2hhbi1cXHUwMDNldHhfbG9jayk7XFxuK1xcdGlmIChDSVJDX1NQQUNFKHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQsIFJFQURfT05DRSh4Y2hhbi1cXHUwMDNlcmluZ190YWlsKSxcXG4rXFx0XFx0ICAgICAgIHhjaGFuLVxcdTAwM2VyaW5nX3NpemUpIFxcdTAwM2M9IDEpIHtcXG4rXFx0XFx0bmV0aWZfdHhxX3RyeV9zdG9wKHR4cSxcXG4rXFx0XFx0XFx0XFx0ICAgQ0lSQ19TUEFDRSh4Y2hhbi1cXHUwMDNlcmluZ19oZWFkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHhjaGFuLVxcdTAwM2VyaW5nX3NpemUpLFxcbitcXHRcXHRcXHRcXHQgICAyKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhjaGFuLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0bmV0ZGV2X3dhcm4obmRldiwgXFxcIlRTTiBUWCByaW5nIGZ1bGxcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbitcXHR9XFxuK1xcbitcXHRza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbiwgeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCBcXHUwMDI2ICh4Y2hhbi1cXHUwMDNlcmluZ19zaXplIC0gMSkpO1xcbitcXHRpZiAoIXNrYnVmX2RtYSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXHRcXHRnb3RvIGVycl9kcm9wX3NrYjtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXG4rXFx0c2dfaW5pdF90YWJsZShza2J1Zl9kbWEtXFx1MDAzZXNnbCwgc2dfbGVuKTtcXG4rXFx0cmV0ID0gc2tiX3RvX3NndmVjKHNrYiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsIDAsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2Ryb3Bfc2tiO1xcbitcXHRzZ19sZW4gPSByZXQ7XFxuK1xcbitcXHRuZW50cyA9IGRtYV9tYXBfc2coeGNoYW4tXFx1MDAzZWRtYV9kZXYsIHNrYnVmX2RtYS1cXHUwMDNlc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xcbitcXHRpZiAoIW5lbnRzKVxcbitcXHRcXHRnb3RvIGVycl9kcm9wX3NrYjtcXG4rXFxuK1xcdGRtYV90eF9kZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2coeGNoYW4tXFx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cXHUwMDNlc2dsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBuZW50cywgRE1BX01FTV9UT19ERVYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7XFxuK1xcdGlmICghZG1hX3R4X2Rlc2MpXFxuK1xcdFxcdGdvdG8gZXJyX3VubWFwX3NnO1xcbitcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2Vza2IgPSBza2I7XFxuK1xcdHNrYnVmX2RtYS1cXHUwMDNlc2dfbGVuID0gc2dfbGVuO1xcbitcXHRkbWFfdHhfZGVzYy1cXHUwMDNlY2FsbGJhY2tfcGFyYW0gPSB4Y2hhbjtcXG4rXFx0ZG1hX3R4X2Rlc2MtXFx1MDAzZWNhbGxiYWNrX3Jlc3VsdCA9IGVwX2RtYV90eF9jYjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXHRjb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRtYV90eF9kZXNjKTtcXG4rXFx0aWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXHRcXHRza2J1Zl9kbWEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdGdvdG8gZXJyX3VubWFwX3NnO1xcbitcXHR9XFxuK1xcdFdSSVRFX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCwgeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCArIDEpO1xcbitcXHRuZXRkZXZfdHhfc2VudF9xdWV1ZSh0eHEsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0bmV0aWZfdHhxX21heWJlX3N0b3AodHhxLFxcbitcXHRcXHRcXHQgICAgIENJUkNfU1BBQ0UoeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCxcXG4rXFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHhjaGFuLVxcdTAwM2VyaW5nX3RhaWwpLFxcbitcXHRcXHRcXHRcXHRcXHR4Y2hhbi1cXHUwMDNlcmluZ19zaXplKSxcXG4rXFx0XFx0XFx0ICAgICAyLCAyKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhjaGFuLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFxuK1xcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFxuK1xcdHJldHVybiBORVRERVZfVFhfT0s7XFxuK1xcbitlcnJfdW5tYXBfc2c6XFxuK1xcdGRtYV91bm1hcF9zZyh4Y2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsIHNnX2xlbiwgRE1BX1RPX0RFVklDRSk7XFxuK2Vycl9kcm9wX3NrYjpcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9kcm9wcGVkKTtcXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rfVxcbitcXG4rc3RhdGljIGludCBlcF9pbml0X2RtYWVuZ2luZShzdHJ1Y3QgeGxueF90c25fZXAgKmVwKTtcXG4rc3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XFxuK1xcbitzdGF0aWMgaW50IGVwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0V1JJVEVfT05DRShlcC1cXHUwMDNlY2xvc2luZywgZmFsc2UpO1xcbitcXG4rXFx0cmV0ID0gZXBfaW5pdF9kbWFlbmdpbmUoZXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIERNQSBlbmdpbmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0bmV0aWZfdHhfZGlzYWJsZShuZGV2KTtcXG4rXFx0V1JJVEVfT05DRShlcC1cXHUwMDNlY2xvc2luZywgdHJ1ZSk7XFxuK1xcdGVwX2V4aXRfZG1hZW5naW5lKGVwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5kZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3R4X3Jlc2V0X3N1YnF1ZXVlKG5kZXYsIGkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICplZClcXG4re1xcbitcXHRzdHJzY3B5KGVkLVxcdTAwM2Vkcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoZWQtXFx1MDAzZWRyaXZlcikpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVwX25ldGRldl9vcHMgPSB7XFxuK1xcdC5uZG9fb3BlblxcdFxcdD0gZXBfb3BlbixcXG4rXFx0Lm5kb19zdG9wXFx0XFx0PSBlcF9zdG9wLFxcbitcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGVwX3N0YXJ0X3htaXQsXFxuK1xcdC5uZG9fdmFsaWRhdGVfYWRkclxcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuK1xcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVwX2V0aHRvb2xfb3BzID0ge1xcbitcXHQuZ2V0X2RydmluZm9cXHQ9IGVwX2dldF9kcnZpbmZvLFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqXFxuK2VwX2FsbG9jX2RtYV9jaGFuKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAsIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfdHgsXFxuK1xcdFxcdCAgaW50IHJpbmdfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKmNoYW47XFxuK1xcdHN0cnVjdCBkbWFfY2hhbiAqZXJyX2NoYW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Y2hhbiA9IGt6YWxsb2Nfb2JqKCpjaGFuKTtcXG4rXFx0aWYgKCFjaGFuKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGNoYW4tXFx1MDAzZWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVxcdTAwM2VkZXYsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKGNoYW4tXFx1MDAzZWNoYW4pKSB7XFxuK1xcdFxcdGVycl9jaGFuID0gY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFx0XFx0a2ZyZWUoY2hhbik7XFxuK1xcdFxcdHJldHVybiBFUlJfQ0FTVChlcnJfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGNoYW4tXFx1MDAzZXNrYl9yaW5nID0ga2NhbGxvYyhyaW5nX3NpemUsIHNpemVvZigqY2hhbi1cXHUwMDNlc2tiX3JpbmcpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjaGFuLVxcdTAwM2Vza2JfcmluZykge1xcbitcXHRcXHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXFx1MDAzZWNoYW4pO1xcbitcXHRcXHRrZnJlZShjaGFuKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByaW5nX3NpemU7IGkrKykge1xcbitcXHRcXHRjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSA9IGt6YWxsb2Nfb2JqKCpjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSk7XFxuK1xcdFxcdGlmICghY2hhbi1cXHUwMDNlc2tiX3JpbmdbaV0pIHtcXG4rXFx0XFx0XFx0d2hpbGUgKC0taSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRcXHRrZnJlZShjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSk7XFxuK1xcdFxcdFxcdGtmcmVlKGNoYW4tXFx1MDAzZXNrYl9yaW5nKTtcXG4rXFx0XFx0XFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFx0XFx0XFx0a2ZyZWUoY2hhbik7XFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNoYW4tXFx1MDAzZWlzX3R4ID0gaXNfdHg7XFxuK1xcdGNoYW4tXFx1MDAzZWVwID0gZXA7XFxuK1xcdGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSA9IHJpbmdfc2l6ZTtcXG4rXFx0Y2hhbi1cXHUwMDNlZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFx0aWYgKGlzX3R4KSB7XFxuK1xcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZjaGFuLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmNoYW4tXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2Y2hhbi1cXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBlcF9yeF9yZWZpbGxfdGltZXIsIDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY2hhbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZXBfZnJlZV9kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKmNoYW4pXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIWNoYW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChjaGFuLVxcdTAwM2VjaGFuKSB7XFxuK1xcdFxcdGlmICghY2hhbi1cXHUwMDNlaXNfdHgpIHtcXG4rXFx0XFx0XFx0LyogZXBfc3RvcCgpIHNldHMgY2xvc2luZyBiZWZvcmUgdGVhcmRvd24uIFRha2UgcnhfbG9ja1xcbitcXHRcXHRcXHQgKiBzbyBhbnkgcmVmaWxsIHRoYXQgYWxyZWFkeSBwYXNzZWQgdGhlIGNsb3NpbmcgY2hlY2tcXG4rXFx0XFx0XFx0ICogZmluaXNoZXMgYW5kIG5vIGxhdGVyIG9uZSBzdWJtaXRzIG9yIGFybXMgdGhlIHRpbWVyLFxcbitcXHRcXHRcXHQgKiB0aGVuIHNodXQgZG93biB0aGUgdGltZXIgc28gaXQgY2Fubm90IGJlIHJlYXJtZWRcXG4rXFx0XFx0XFx0ICogYmVmb3JlIHRoZSBjaGFubmVsIGlzIGZyZWVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjaGFuLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNoYW4tXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZjaGFuLVxcdTAwM2VyeF9yZWZpbGxfdGltZXIpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoY2hhbi1cXHUwMDNlY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjaGFuLVxcdTAwM2Vpc190eCkge1xcbitcXHRcXHR3aGlsZSAoY2hhbi1cXHUwMDNlcmluZ190YWlsICE9IGNoYW4tXFx1MDAzZXJpbmdfaGVhZCkge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcXG4rXFxuK1xcdFxcdFxcdHNrYnVmX2RtYSA9IGNoYW4tXFx1MDAzZXNrYl9yaW5nW2NoYW4tXFx1MDAzZXJpbmdfdGFpbCBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgKGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSAtIDEpXTtcXG4rXFx0XFx0XFx0aWYgKHNrYnVmX2RtYSBcXHUwMDI2XFx1MDAyNiBza2J1Zl9kbWEtXFx1MDAzZXNrYikge1xcbitcXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2coY2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2tidWZfZG1hLVxcdTAwM2VzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xcbitcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2J1Zl9kbWEtXFx1MDAzZXNrYik7XFxuK1xcdFxcdFxcdFxcdHNrYnVmX2RtYS1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjaGFuLVxcdTAwM2VyaW5nX3RhaWwrKztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoY2hhbi1cXHUwMDNlc2tiX3JpbmcpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNoYW4tXFx1MDAzZXJpbmdfc2l6ZTsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hID0gY2hhbi1cXHUwMDNlc2tiX3JpbmdbaV07XFxuK1xcbitcXHRcXHRcXHRpZiAoc2tidWZfZG1hIFxcdTAwMjZcXHUwMDI2ICFjaGFuLVxcdTAwM2Vpc190eCBcXHUwMDI2XFx1MDAyNiBza2J1Zl9kbWEtXFx1MDAzZXNrYikge1xcbitcXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKGNoYW4tXFx1MDAzZWRtYV9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBza2J1Zl9kbWEtXFx1MDAzZWRtYV9hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY2hhbi1cXHUwMDNlZXAtXFx1MDAzZW1heF9mcm1fc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYnVmX2RtYS1cXHUwMDNlc2tiKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRrZnJlZShjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0a2ZyZWUoY2hhbi1cXHUwMDNlc2tiX3JpbmcpO1xcbitcXHR9XFxuK1xcdGlmIChjaGFuLVxcdTAwM2VjaGFuKVxcbitcXHRcXHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXFx1MDAzZWNoYW4pO1xcbitcXG4rXFx0a2ZyZWUoY2hhbik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVwX2V4aXRfZG1hZW5naW5lKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoZXAtXFx1MDAzZXR4X2NoYW5zKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlcC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHRlcF9mcmVlX2RtYV9jaGFuKGVwLVxcdTAwM2V0eF9jaGFuc1tpXSk7XFxuK1xcdFxcdGtmcmVlKGVwLVxcdTAwM2V0eF9jaGFucyk7XFxuK1xcdFxcdGVwLVxcdTAwM2V0eF9jaGFucyA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0aWYgKGVwLVxcdTAwM2VyeF9jaGFucykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXAtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0XFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cXHUwMDNlcnhfY2hhbnNbaV0pO1xcbitcXHRcXHRrZnJlZShlcC1cXHUwMDNlcnhfY2hhbnMpO1xcbitcXHRcXHRlcC1cXHUwMDNlcnhfY2hhbnMgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcXG4re1xcbitcXHRpbnQgdHhfYWxsb2NhdGVkID0gMCwgcnhfYWxsb2NhdGVkID0gMDtcXG4rXFx0Y2hhciBuYW1lWzE2XTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGVwLVxcdTAwM2V0eF9jaGFucyA9IGtjYWxsb2MoZXAtXFx1MDAzZW51bV90eF9xdWV1ZXMsIHNpemVvZigqZXAtXFx1MDAzZXR4X2NoYW5zKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWVwLVxcdTAwM2V0eF9jaGFucylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcC1cXHUwMDNlcnhfY2hhbnMgPSBrY2FsbG9jKGVwLVxcdTAwM2VudW1fcnhfcXVldWVzLCBzaXplb2YoKmVwLVxcdTAwM2VyeF9jaGFucyksXFxuK1xcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFlcC1cXHUwMDNlcnhfY2hhbnMpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV90eDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVwLVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwidHhfY2hhbiV1XFxcIiwgZXAtXFx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSk7XFxuK1xcdFxcdGVwLVxcdTAwM2V0eF9jaGFuc1tpXSA9IGVwX2FsbG9jX2RtYV9jaGFuKGVwLCBuYW1lLCB0cnVlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgVFhfQkRfTlVNX0RFRkFVTFQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGVwLVxcdTAwM2V0eF9jaGFuc1tpXSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihlcC1cXHUwMDNldHhfY2hhbnNbaV0pO1xcbitcXHRcXHRcXHRlcC1cXHUwMDNldHhfY2hhbnNbaV0gPSBOVUxMO1xcbitcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2NoYW5zO1xcbitcXHRcXHR9XFxuK1xcdFxcdHR4X2FsbG9jYXRlZCsrO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXAtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCJyeF9jaGFuJXVcXFwiLCBlcC1cXHUwMDNlcnhfY2hhbl9udW1baV0pO1xcbitcXHRcXHRlcC1cXHUwMDNlcnhfY2hhbnNbaV0gPSBlcF9hbGxvY19kbWFfY2hhbihlcCwgbmFtZSwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBSWF9CRF9OVU1fREVGQVVMVCk7XFxuK1xcdFxcdGlmIChJU19FUlIoZXAtXFx1MDAzZXJ4X2NoYW5zW2ldKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGVwLVxcdTAwM2VyeF9jaGFuc1tpXSk7XFxuK1xcdFxcdFxcdGVwLVxcdTAwM2VyeF9jaGFuc1tpXSA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY2hhbnM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cnhfYWxsb2NhdGVkKys7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlcC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdGlmICghZXBfcnhfcmVmaWxsKGVwLVxcdTAwM2VyeF9jaGFuc1tpXSwgZmFsc2UpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZXAtXFx1MDAzZWRldiwgXFxcIlJYIGNoYW5uZWwgJWQ6IG5vIGRlc2NyaXB0b3JzIGFybWVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRpKTtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9jaGFucztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX2NoYW5zOlxcbitcXHRXUklURV9PTkNFKGVwLVxcdTAwM2VjbG9zaW5nLCB0cnVlKTtcXG4rXFx0d2hpbGUgKC0tcnhfYWxsb2NhdGVkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXFx1MDAzZXJ4X2NoYW5zW3J4X2FsbG9jYXRlZF0pO1xcbitcXHR3aGlsZSAoLS10eF9hbGxvY2F0ZWQgXFx1MDAzZT0gMClcXG4rXFx0XFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cXHUwMDNldHhfY2hhbnNbdHhfYWxsb2NhdGVkXSk7XFxuK1xcdGtmcmVlKGVwLVxcdTAwM2VyeF9jaGFucyk7XFxuK1xcdGVwLVxcdTAwM2VyeF9jaGFucyA9IE5VTEw7XFxuK2Vycl9mcmVlX3R4OlxcbitcXHRrZnJlZShlcC1cXHUwMDNldHhfY2hhbnMpO1xcbitcXHRlcC1cXHUwMDNldHhfY2hhbnMgPSBOVUxMO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXFxuK3tcXG4rXFx0c3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmcgPSB7IC5yZXNldCA9IDEgfTtcXG4rXFx0c3RydWN0IGRtYV9jaGFuICpyZXNldF9jaGFuO1xcbitcXHRjaGFyIG5hbWVbMTZdO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwidHhfY2hhbiV1XFxcIiwgZXAtXFx1MDAzZXR4X2RtYV9jaGFuX21hcFswXSk7XFxuK1xcdHJlc2V0X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVxcdTAwM2VkZXYsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKHJlc2V0X2NoYW4pKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cXHUwMDNlZGV2LCBQVFJfRVJSKHJlc2V0X2NoYW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVxdWVzdCAlcyBmb3IgcmVzZXRcXFxcblxcXCIsIG5hbWUpO1xcbitcXG4rXFx0cmV0ID0geGlsaW54X3ZkbWFfY2hhbm5lbF9zZXRfY29uZmlnKHJlc2V0X2NoYW4sIFxcdTAwMjZjZmcpO1xcbitcXHRkbWFfcmVsZWFzZV9jaGFubmVsKHJlc2V0X2NoYW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVzZXQgRE1BIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBhcnNlIHRoZSBcXFwidHgtcXVldWVzLWNvbmZpZ1xcXCIgY2hpbGQgb2YgdGhlIEVQIG5vZGUuIFRoZSBsb2dpY2FsIHF1ZXVlXFxuKyAqIGluZGV4IGlzIHRha2VuIGZyb20gdGhlIFxcXCJxdWV1ZVxcdTAwM2NOXFx1MDAzZVxcXCIgbm9kZSBuYW1lLCBzbyB0aGUgbWFwcGluZyBkb2VzIG5vdFxcbisgKiBkZXBlbmQgb24gdGhlIG9yZGVyIHRoZSBjaGlsZCBub2RlcyBhcHBlYXIgaW4gdGhlIGRldmljZSB0cmVlLlxcbisgKi9cXG4rc3RhdGljIGludCBlcF9wYXJzZV90eF9xdWV1ZV9jb25maWcoc3RydWN0IHhsbnhfdHNuX2VwICplcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdHhjZmdfbnAsIHUxNiB0eF9wcmVzZW50KVxcbit7XFxuK1xcdERFQ0xBUkVfQklUTUFQKHF1ZXVlX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307XFxuK1xcdERFQ0xBUkVfQklUTUFQKGNoYW5fc2VlbiwgVFNOX01BWF9UWF9RVUVVRSkgPSB7fTtcXG4rXFx0dW5zaWduZWQgaW50IGNvdW50ID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHR4Y2ZnX25wLCBxbm9kZSkge1xcbitcXHRcXHR1MzIgY2hhbiwgcXVldWU7XFxuK1xcbitcXHRcXHRpZiAoIXN0cl9oYXNfcHJlZml4KHFub2RlLVxcdTAwM2VuYW1lLCBcXFwicXVldWVcXFwiKSB8fFxcbitcXHRcXHQgICAga3N0cnRvdTMyKHFub2RlLVxcdTAwM2VuYW1lICsgc3RybGVuKFxcXCJxdWV1ZVxcXCIpLCAxMCwgXFx1MDAyNnF1ZXVlKSB8fFxcbitcXHRcXHQgICAgcXVldWUgXFx1MDAzZT0gZXAtXFx1MDAzZW51bV90eF9xdWV1ZXMpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVxcdTAwM2VkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcInR4LWNvbmZpZzogaW52YWxpZCBxdWV1ZSBub2RlICVwT0ZuIChoYXZlICV1IHF1ZXVlcylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcW5vZGUsIGVwLVxcdTAwM2VudW1fdHhfcXVldWVzKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KHF1ZXVlLCBxdWV1ZV9zZWVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwidHgtY29uZmlnOiBxdWV1ZSAldSBkZXNjcmliZWQgdHdpY2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcXVldWUpO1xcbitcXG4rXFx0XFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocW5vZGUsIFxcXCJ4bG54LGRtYS1jaGFubmVsLW51bVxcXCIsIFxcdTAwMjZjaGFuKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ0eC1jb25maWc6IHF1ZXVlICV1IG1pc3NpbmcgeGxueCxkbWEtY2hhbm5lbC1udW1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcXVldWUpO1xcbitcXG4rXFx0XFx0aWYgKGNoYW4gXFx1MDAzZT0gVFNOX01BWF9UWF9RVUVVRSB8fCAhKHR4X3ByZXNlbnQgXFx1MDAyNiBCSVQoY2hhbikpKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ0eC1jb25maWc6IHF1ZXVlICV1IG1hcHMgdG8gY2hhbm5lbCAldSBub3QgcHJlc2VudCBpbiBkbWEtbmFtZXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcXVldWUsIGNoYW4pO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbiwgY2hhbl9zZWVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwidHgtY29uZmlnOiBjaGFubmVsICV1IGFscmVhZHkgYXNzaWduZWQgdG8gYW5vdGhlciBxdWV1ZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjaGFuKTtcXG4rXFxuK1xcdFxcdGVwLVxcdTAwM2V0eF9kbWFfY2hhbl9tYXBbcXVldWVdID0gY2hhbjtcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNvdW50ICE9IGVwLVxcdTAwM2VudW1fdHhfcXVldWVzKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ0eC1jb25maWc6IGRlc2NyaWJlZCAldSBxdWV1ZXMgYnV0IGV4cGVjdGVkICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvdW50LCBlcC1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlcF9jb3VudF9kbWFfcXVldWVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpvdXRfdHgsIHUzMiAqb3V0X3J4LFxcbitcXHRcXHRcXHQgICAgICAgdTE2ICp0eF9wcmVzZW50LCB1MzIgKnJ4X2NoYW5fbnVtKVxcbit7XFxuK1xcdHUzMiB0eCA9IDAsIHJ4ID0gMDtcXG4rXFx0dTE2IHJ4X3ByZXNlbnQgPSAwO1xcbitcXHRpbnQgbiwgaSwgcmV0O1xcbitcXG4rXFx0biA9IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3MoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZG1hLW5hbWVzXFxcIik7XFxuK1xcdGlmIChuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBuLCBcXFwiZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqbmFtZTtcXG4rXFx0XFx0c2l6ZV90IHBsZW47XFxuK1xcdFxcdHUzMiBpZHg7XFxuK1xcbitcXHRcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJkbWEtbmFtZXNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaSwgXFx1MDAyNm5hbWUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxcXFxuXFxcIiwgaSk7XFxuK1xcbitcXHRcXHRwbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgXFxcInR4X2NoYW5cXFwiKTtcXG4rXFx0XFx0aWYgKHBsZW4pIHtcXG4rXFx0XFx0XFx0aWYgKGtzdHJ0b3UzMihuYW1lICsgcGxlbiwgMTAsIFxcdTAwMjZpZHgpIHx8XFxuK1xcdFxcdFxcdCAgICBpZHggXFx1MDAzZT0gVFNOX01BWF9UWF9RVUVVRSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJpbnZhbGlkIFRYIGNoYW5uZWwgbmFtZSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuYW1lKTtcXG4rXFxuK1xcdFxcdFxcdGlmICgqdHhfcHJlc2VudCBcXHUwMDI2IEJJVChpZHgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcImR1cGxpY2F0ZSBUWCBjaGFubmVsICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5hbWUpO1xcbitcXG4rXFx0XFx0XFx0KnR4X3ByZXNlbnQgfD0gQklUKGlkeCk7XFxuK1xcdFxcdFxcdHR4Kys7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgXFxcInJ4X2NoYW5cXFwiKTtcXG4rXFx0XFx0aWYgKHBsZW4pIHtcXG4rXFx0XFx0XFx0aWYgKGtzdHJ0b3UzMihuYW1lICsgcGxlbiwgMTAsIFxcdTAwMjZpZHgpIHx8XFxuK1xcdFxcdFxcdCAgICBpZHggXFx1MDAzZT0gVFNOX01BWF9SWF9RVUVVRSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJpbnZhbGlkIFJYIGNoYW5uZWwgbmFtZSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuYW1lKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChyeF9wcmVzZW50IFxcdTAwMjYgQklUKGlkeCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZHVwbGljYXRlIFJYIGNoYW5uZWwgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmFtZSk7XFxuK1xcbitcXHRcXHRcXHRyeF9wcmVzZW50IHw9IEJJVChpZHgpO1xcbitcXHRcXHRcXHRyeF9jaGFuX251bVtyeF0gPSBpZHg7XFxuK1xcdFxcdFxcdHJ4Kys7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcInVucmVjb2duaXNlZCBkbWEtbmFtZXMgZW50cnkgJXNcXFxcblxcXCIsIG5hbWUpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXR4KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIm5vIFRYIGNoYW5uZWxzIGluIGRtYS1uYW1lc1xcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoIXJ4KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIm5vIFJYIGNoYW5uZWxzIGluIGRtYS1uYW1lc1xcXFxuXFxcIik7XFxuK1xcbitcXHQqb3V0X3R4ID0gdHg7XFxuK1xcdCpvdXRfcnggPSByeDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9mcmVlX3BvcnRfbWQoc3RydWN0IHhsbnhfdHNuX2VwICplcClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTOyBpKyspIHtcXG4rXFx0XFx0aWYgKGVwLVxcdTAwM2Vwb3J0X21kW2ldKSB7XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZlcC1cXHUwMDNlcG9ydF9tZFtpXS1cXHUwMDNlZHN0KTtcXG4rXFx0XFx0XFx0ZXAtXFx1MDAzZXBvcnRfbWRbaV0gPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBlcF9hbGxvY19wb3J0X21kKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSBUU05fVFVTRVJfUE9SVF9NQUMxOyBpIFxcdTAwM2M9IFRTTl9UVVNFUl9QT1JUX01BQzI7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZDtcXG4rXFxuK1xcdFxcdG1kID0gbWV0YWRhdGFfZHN0X2FsbG9jKDAsIE1FVEFEQVRBX0hXX1BPUlRfTVVYLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFtZCkge1xcbitcXHRcXHRcXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0fVxcbitcXHRcXHRtZC1cXHUwMDNldS5wb3J0X2luZm8ucG9ydF9pZCA9IGk7XFxuK1xcdFxcdGVwLVxcdTAwM2Vwb3J0X21kW2ldID0gbWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhsbnhfdHNuX2VwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wO1xcbitcXHR1MzIgbnVtX3R4LCBudW1fcngsIG51bV9wcmlvO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmlwX25wO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcDtcXG4rXFx0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xcbitcXHR1MTYgdHhfcHJlc2VudCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0cmV0ID0gZXBfY291bnRfZG1hX3F1ZXVlcyhkZXYsIFxcdTAwMjZudW1fdHgsIFxcdTAwMjZudW1fcngsIFxcdTAwMjZ0eF9wcmVzZW50LCByeF9jaGFuX251bSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpcF9ucCA9IG9mX2dldF9wYXJlbnQoZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG4rXFx0aWYgKCFpcF9ucClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwibWlzc2luZyBwYXJlbnQgSVAgbm9kZVxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihpcF9ucCwgXFxcInhsbngsbnVtLXByaW9yaXRpZXNcXFwiLCBcXHUwMDI2bnVtX3ByaW8pO1xcbitcXHRvZl9ub2RlX3B1dChpcF9ucCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwibWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChudW1fdHggIT0gbnVtX3ByaW8pXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiVFggY2hhbm5lbCBjb3VudCAldSBtdXN0IGVxdWFsIG51bS1wcmlvcml0aWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIG51bV90eCwgbnVtX3ByaW8pO1xcbitcXG4rXFx0bmRldiA9IGFsbG9jX25ldGRldl9tcXMoc2l6ZW9mKCplcCksIFxcXCJlcCVkXFxcIiwgTkVUX05BTUVfRU5VTSxcXG4rXFx0XFx0XFx0XFx0ZXRoZXJfc2V0dXAsIG51bV90eCwgbnVtX3J4KTtcXG4rXFx0aWYgKCFuZGV2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldik7XFxuK1xcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2ZXBfbmV0ZGV2X29wcztcXG4rXFx0bmRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2ZXBfZXRodG9vbF9vcHM7XFxuK1xcdG5kZXYtXFx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRztcXG4rXFxuK1xcdGVwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGVwLVxcdTAwM2VuZGV2ID0gbmRldjtcXG4rXFx0ZXAtXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0ZXAtXFx1MDAzZW51bV90eF9xdWV1ZXMgPSBudW1fdHg7XFxuK1xcdGVwLVxcdTAwM2VudW1fcnhfcXVldWVzID0gbnVtX3J4O1xcbitcXHRlcC1cXHUwMDNlbWF4X2ZybV9zaXplID0gVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkU7XFxuK1xcdG1lbWNweShlcC1cXHUwMDNlcnhfY2hhbl9udW0sIHJ4X2NoYW5fbnVtLCBudW1fcnggKiBzaXplb2YoKnJ4X2NoYW5fbnVtKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVFNOX01BWF9UWF9RVUVVRTsgaSsrKVxcbitcXHRcXHRlcC1cXHUwMDNldHhfZG1hX2NoYW5fbWFwW2ldID0gVFNOX0RNQV9DSF9JTlZBTElEO1xcbitcXG4rXFx0dHhjZmdfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJ0eC1xdWV1ZXMtY29uZmlnXFxcIik7XFxuK1xcdGlmICghdHhjZmdfbnApIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwibWlzc2luZyB0eC1xdWV1ZXMtY29uZmlnIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25kZXY7XFxuK1xcdH1cXG4rXFx0cmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7XFxuK1xcdG9mX25vZGVfcHV0KHR4Y2ZnX25wKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9uZGV2O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG9cXG4rXFx0ICogZ2F0ZSBvbiB0aGUgTUNETUEgcHJvdmlkZXIgYmVpbmcgYm91bmQuIFRoaXMga2VlcHMgLUVQUk9CRV9ERUZFUiBpblxcbitcXHQgKiB0aGUgcHJvYmUgcGF0aCwgc28gdGhlIG5ldGRldiBpcyBvbmx5IHJlZ2lzdGVyZWQgb25jZSB0aGUgcHJvdmlkZXIgaXNcXG4rXFx0ICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBlcF9yZXNldF9kbWFfY29udHJvbGxlcihlcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbmRldjtcXG4rXFxuK1xcdHJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtXFx1MDAzZW9mX25vZGUsIG1hY19hZGRyKTtcXG4rXFx0aWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbmRldjtcXG4rXFx0fSBlbHNlIGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjX2FkZHIpKSB7XFxuK1xcdFxcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcXG4rXFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwibm8gdmFsaWQgTUFDIGluIERULCB1c2luZyByYW5kb20gYWRkcmVzcyAlcE1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBuZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGVwX2FsbG9jX3BvcnRfbWQoZXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgcGVyLXBvcnQgbWV0YWRhdGFcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25kZXY7XFxuK1xcdH1cXG4rXFxuK1xcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVwKTtcXG4rXFxuK1xcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX21kO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX21kOlxcbitcXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xcbitlcnJfZnJlZV9uZGV2OlxcbitcXHRmcmVlX25ldGRldihuZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeGxueF90c25fZXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXG4rXFx0aWYgKCFlcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXYoZXAtXFx1MDAzZW5kZXYpO1xcbitcXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xcbitcXHRmcmVlX25ldGRldihlcC1cXHUwMDNlbmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhsbnhfdHNuX2VwX29mX21hdGNoW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tZXAtbWFjXFxcIiB9LFxcbitcXHR7IH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGxueF90c25fZXBfb2ZfbWF0Y2gpO1xcbitcXG4rc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXIgPSB7XFxuK1xcdC5wcm9iZVxcdD0geGxueF90c25fZXBfcHJvYmUsXFxuK1xcdC5yZW1vdmVcXHQ9IHhsbnhfdHNuX2VwX3JlbW92ZSxcXG4rXFx0LmRyaXZlclxcdD0ge1xcbitcXHRcXHQubmFtZVxcdFxcdD0gRFJJVkVSX05BTUUsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZVxcdD0geGxueF90c25fZXBfb2ZfbWF0Y2gsXFxuK1xcdH0sXFxuK307XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kMzNhMDBkZDZkMTVlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmNcXG5AQCAtMCwwICsxLDEwNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rLypcXG4rICogVGltZSBTZW5zaXRpdmUgTmV0d29ya2luZyAoVFNOKSBFdGhlcm5ldCBNQUMgd3JhcHBlciBkcml2ZXIuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInhpbGlueF90c24uaFxcXCJcXG4rXFxuKyNkZWZpbmUgVFNOX05VTV9DTE9DS1NcXHRcXHQ2XFxuK1xcbisvKipcXG4rICogc3RydWN0IHhsbnhfdHNuX2lwIC0gd3JhcHBlci1wcml2YXRlIElQIHN0YXRlXFxuKyAqIEBjbGtzOiBidWxrLW1hbmFnZWQgSVAgY2xvY2tzXFxuKyAqL1xcbitzdHJ1Y3QgeGxueF90c25faXAge1xcbitcXHRzdHJ1Y3QgY2xrX2J1bGtfZGF0YSBjbGtzW1RTTl9OVU1fQ0xPQ0tTXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHNuX2Nsa19uYW1lc1tUU05fTlVNX0NMT0NLU10gPSB7XFxuK1xcdFxcXCJndHhcXFwiLFxcbitcXHRcXFwiZ3R4OTBcXFwiLFxcbitcXHRcXFwiaG9zdF9yeGZpZm9cXFwiLFxcbitcXHRcXFwiaG9zdF90eGZpZm9cXFwiLFxcbitcXHRcXFwicmVmXFxcIixcXG4rXFx0XFxcInNfYXhpXFxcIixcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHRzbl9jbGtfYnVsa19kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2lwICp3ID0gZGF0YTtcXG4rXFxuK1xcdGNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKFRTTl9OVU1fQ0xPQ0tTLCB3LVxcdTAwM2VjbGtzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0c25faXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgeGxueF90c25faXAgKnc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR3ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp3KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFRTTl9OVU1fQ0xPQ0tTOyBpKyspXFxuK1xcdFxcdHctXFx1MDAzZWNsa3NbaV0uaWQgPSB0c25fY2xrX25hbWVzW2ldO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXQoZGV2LCBUU05fTlVNX0NMT0NLUywgdy1cXHUwMDNlY2xrcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIGdldCBjbG9ja3NcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoVFNOX05VTV9DTE9DS1MsIHctXFx1MDAzZWNsa3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBlbmFibGUgY2xvY2tzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHRzbl9jbGtfYnVsa19kaXNhYmxlLCB3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRzbl9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjBcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0c25fb2ZfbWF0Y2gpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHNuX2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0gdHNuX2lwX3Byb2JlLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJ4aWxpbngtdHNuXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gdHNuX29mX21hdGNoLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCB0c25fZHJpdmVyc1tdID0ge1xcbitcXHRcXHUwMDI2dHNuX2RyaXZlcixcXG4rXFx0XFx1MDAyNnhsbnhfdHNuX2VwX2RyaXZlcixcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHhsbnhfdHNuX2luaXQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gcGxhdGZvcm1fcmVnaXN0ZXJfZHJpdmVycyh0c25fZHJpdmVycywgQVJSQVlfU0laRSh0c25fZHJpdmVycykpO1xcbit9XFxuK21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpO1xcbitcXG4rc3RhdGljIHZvaWQgX19leGl0IHhsbnhfdHNuX2V4aXQodm9pZClcXG4re1xcbitcXHRwbGF0Zm9ybV91bnJlZ2lzdGVyX2RyaXZlcnModHNuX2RyaXZlcnMsIEFSUkFZX1NJWkUodHNuX2RyaXZlcnMpKTtcXG4rfVxcbittb2R1bGVfZXhpdCh4bG54X3Rzbl9leGl0KTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIlNyaW5pdmFzIE5lZWxpIFxcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjM2LjA0MDk2NzExOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE3MTIxNTk4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuLykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiN2RhZGVlMGI2M2VkY2RjOTM1M2U0YjYxZjg0ZmVhNGQ0M2NiMzI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjoxNzozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGU2NWQxNzEwZGE3OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbFxuQEAgLTAsMCArMSwzNjQgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUNcbitcbitkZXNjcmlwdGlvbjpcbisgIFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAgaW1wbGVtZW50cyBJRUVFIDgwMi4xIFRpbWUtU2Vuc2l0aXZlXG4rICBOZXR3b3JraW5nIChUU04pIHN0YW5kYXJkcyBhbmQgcHJvdmlkZXMgbG93LWxhdGVuY3kgbmV0d29yayBjb25uZWN0aXZpdHlcbisgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydFxuKyAgc3dpdGNoLCB3aXRoIHR3byBwb3J0cyBjb25uZWN0ZWQgdG8gdGhlIGV4dGVybmFsIG5ldHdvcmsgYW5kIG9uZSBwb3J0XG4rICBjb25uZWN0ZWQgdG8gYW4gaW50ZXJuYWwgZW5kcG9pbnQuIEl0IGFsc28gc3VwcG9ydHMgR01JSS9SR01JSSBpbnRlcmZhY2VzXG4rICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdFxuKyAgMTAwIE1iL3MgYW5kIDEgR2IvcyBzcGVlZHMuXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIFNyaW5pdmFzIE5lZWxpIFx1MDAzY3NyaW5pdmFzLm5lZWxpQGFtZC5jb21cdTAwM2VcbisgIC0gTmFnYWRoZWVyYWogUm90dGVsYSBcdTAwM2NuYWdhZGhlZXJhai5yb3R0ZWxhQGFtZC5jb21cdTAwM2Vcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IHhsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjBcbitcbisgIGNsb2NrczpcbisgICAgaXRlbXM6XG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1RYIGNsb2NrIGZvciB0cmFuc21pdHRlciBsb2dpYyBhbmQgUlRDXG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1RYIDkwLWRlZ3JlZSBwaGFzZSBzaGlmdGVkIGNsb2NrIGZvciBSR01JSVxuKyAgICAgIC0gZGVzY3JpcHRpb246IEhvc3QgUlggRklGTyBjbG9ja1xuKyAgICAgIC0gZGVzY3JpcHRpb246IEhvc3QgVFggRklGTyBjbG9ja1xuKyAgICAgIC0gZGVzY3JpcHRpb246IFJlZmVyZW5jZSBjbG9jayBmb3IgSURFTEFZIGNvbnRyb2xcbisgICAgICAtIGRlc2NyaXB0aW9uOiBBWEktTGl0ZSByZWdpc3RlciBpbnRlcmZhY2UgY2xvY2tcbitcbisgIGNsb2NrLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBndHhcbisgICAgICAtIGNvbnN0OiBndHg5MFxuKyAgICAgIC0gY29uc3Q6IGhvc3RfcnhmaWZvXG4rICAgICAgLSBjb25zdDogaG9zdF90eGZpZm9cbisgICAgICAtIGNvbnN0OiByZWZcbisgICAgICAtIGNvbnN0OiBzX2F4aVxuK1xuKyAgcmFuZ2VzOiB0cnVlXG4rXG4rICAnI2FkZHJlc3MtY2VsbHMnOlxuKyAgICBjb25zdDogMVxuK1xuKyAgJyNzaXplLWNlbGxzJzpcbisgICAgY29uc3Q6IDFcbitcbisgIHhsbngsbnVtLXByaW9yaXRpZXM6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuKyAgICBtaW5pbXVtOiAyXG4rICAgIG1heGltdW06IDhcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgTnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyAocHJpb3JpdGllcykgY29uZmlndXJlZCBpbiB0aGUgSVAuXG4rICAgICAgVGhpcyBpcyBhbiBJUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0aGF0IGRldGVybWluZXMgdGhlIG51bWJlciBvZlxuKyAgICAgIHByaW9yaXR5IHF1ZXVlcyBhdmFpbGFibGUgZm9yIFFvUyBzY2hlZHVsaW5nLiBUcmFmZmljIGNsYXNzZXMgbWFwIHRvXG4rICAgICAgSUVFRSA4MDIuMVEgcHJpb3JpdHkgbGV2ZWxzICgwLTcpLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXCJeZXRoZXJuZXRAWzAtOWEtZl0rJFwiOlxuKyAgICB0eXBlOiBvYmplY3RcbisgICAgJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBFbmRwb2ludCBNQUMgc3ViLW5vZGUuIFByb3ZpZGVzIHRoZSBob3N0LXNpZGUgZGF0YSBwYXRoIHRocm91Z2ggdGhlXG4rICAgICAgRE1BIGNoYW5uZWxzIGRlc2NyaWJlZCBieSBpdHMgZG1hcyAvIGRtYS1uYW1lcy5cbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IHhsbngsdHNuLWVwLW1hY1xuK1xuKyAgICAgIHJlZzpcbisgICAgICAgIG1heEl0ZW1zOiAxXG4rXG4rICAgICAgZG1hczpcbisgICAgICAgIG1pbkl0ZW1zOiAyXG4rICAgICAgICBtYXhJdGVtczogMTZcbitcbisgICAgICBkbWEtbmFtZXM6XG4rICAgICAgICBtaW5JdGVtczogMlxuKyAgICAgICAgbWF4SXRlbXM6IDE2XG4rICAgICAgICBpdGVtczpcbisgICAgICAgICAgcGF0dGVybjogXCJeKHR4fHJ4KV9jaGFuWzAtN10kXCJcbisgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4rICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICdkbWFzJywgb25lIHBlciBETUEgY2hhbm5lbCBhbmQgaW5cbisgICAgICAgICAgdGhlIHNhbWUgb3JkZXIuIFRYIGNoYW5uZWwgbmFtZXMgdXNlIFwidHhfY2hhblx1MDAzY05cdTAwM2VcIiBhbmQgUlggY2hhbm5lbFxuKyAgICAgICAgICBuYW1lcyB1c2UgXCJyeF9jaGFuXHUwMDNjTlx1MDAzZVwiLCB3aGVyZSBOIGlzIDAuLjcuIEV4YW1wbGU6IFwidHhfY2hhbjBcIixcbisgICAgICAgICAgXCJ0eF9jaGFuMVwiLCAuLi4sIFwicnhfY2hhbjBcIiwgXCJyeF9jaGFuMVwiLCAuLi4uXG4rXG4rICAgICAgdHgtcXVldWVzLWNvbmZpZzpcbisgICAgICAgIHR5cGU6IG9iamVjdFxuKyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rICAgICAgICBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgVFggcXVldWUgY29uZmlndXJhdGlvbiBub2RlIHRoYXQgbWFwcyBJUCBwcmlvcml0eSBxdWV1ZXMgdG9cbisgICAgICAgICAgRE1BIFRYIGNoYW5uZWxzLiBUaGUgVFNOIElQIHN1cHBvcnRzIG11bHRpcGxlIHByaW9yaXR5IHF1ZXVlcyBmb3JcbisgICAgICAgICAgUW9TIHNjaGVkdWxpbmcsIGFuZCBlYWNoIHF1ZXVlIGNhbiBiZSBjb25uZWN0ZWQgdG8gYSBzcGVjaWZpYyBETUFcbisgICAgICAgICAgY2hhbm5lbC4gVGhpcyBtYXBwaW5nIGRlZmluZXMgd2hpY2ggRE1BIFRYIGNoYW5uZWwgaXMgdXNlZCB0b1xuKyAgICAgICAgICB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIHByaW9yaXR5IHF1ZXVlLiBGb3IgZXhhbXBsZSwgcXVldWUwXG4rICAgICAgICAgIHdpdGggeGxueCxkbWEtY2hhbm5lbC1udW0gc2V0IHRvIDUgbWVhbnMgcHJpb3JpdHkgcXVldWUgMCB1c2VzXG4rICAgICAgICAgIHR4X2NoYW41IGZvciBkYXRhIHRyYW5zZmVyLlxuK1xuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAgIFwiXnF1ZXVlWzAtN10kXCI6XG4rICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4rICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XG4rICAgICAgICAgICAgICBFYWNoIHN1Ym5vZGUgcmVwcmVzZW50cyBhIHByaW9yaXR5IHF1ZXVlLiBUaGVcbisgICAgICAgICAgICAgIHhsbngsZG1hLWNoYW5uZWwtbnVtIHByb3BlcnR5IHNwZWNpZmllcyB3aGljaCBETUEgVFggY2hhbm5lbFxuKyAgICAgICAgICAgICAgKHR4X2NoYW4wIHRvIHR4X2NoYW43KSBpcyBjb25uZWN0ZWQgdG8gdGhpcyBxdWV1ZSBmb3JcbisgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBwYWNrZXRzLlxuKyAgICAgICAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bTpcbisgICAgICAgICAgICAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4rICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICAgICAgICAgIERNQSBjaGFubmVsIHRoYXQgdHJhbnNtaXRzIHRoaXMgcHJpb3JpdHkgcXVldWUsIGdpdmVuIGFzXG4rICAgICAgICAgICAgICAgICAgdGhlIE4gb2YgdGhlIHR4X2NoYW5OIGVudHJ5IGluIGRtYS1uYW1lcy5cbisgICAgICAgICAgICAgICAgbWluaW11bTogMFxuKyAgICAgICAgICAgICAgICBtYXhpbXVtOiA3XG4rXG4rICAgICAgICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAgICAgICAtIHhsbngsZG1hLWNoYW5uZWwtbnVtXG4rXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICAgIC0gcmVnXG4rICAgICAgLSBkbWFzXG4rICAgICAgLSBkbWEtbmFtZXNcbisgICAgICAtIHR4LXF1ZXVlcy1jb25maWdcbitcbisgIFwiXnN3aXRjaEBbMC05YS1mXSskXCI6XG4rICAgIHR5cGU6IG9iamVjdFxuKyAgICAkcmVmOiAvc2NoZW1hcy9uZXQvZHNhL2RzYS55YW1sIy8kZGVmcy9ldGhlcm5ldC1wb3J0c1xuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaHJlZS1wb3J0IEV0aGVybmV0IHN3aXRjaCBzdWItbm9kZS4gQ29udGFpbnMgdGhlIHN3aXRjaCBmYWJyaWNcbisgICAgICByZWdpc3RlciB3aW5kb3cgYW5kIHRoZSB0d28gcGVyLU1BQyByZWdpc3RlciB3aW5kb3dzLiBFYWNoIHBlci1NQUNcbisgICAgICB3aW5kb3cgaG91c2VzIGFuIE1ESU8gY29udHJvbGxlciBhbmQgYSBQVFAgcmVnaXN0ZXIgYmxvY2sgYXQgZml4ZWRcbisgICAgICBvZmZzZXRzLiBUaGUgSVAncyBwZXItTUFDIGFuZCBQVFAtdGltZXIgaW50ZXJydXB0cyBhcmUgZXhwb3NlZCBoZXJlLlxuK1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICBjb25zdDogeGxueCx0c24tc3dpdGNoXG4rXG4rICAgICAgcmVnOlxuKyAgICAgICAgaXRlbXM6XG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IFN3aXRjaCBmYWJyaWMgcmVnaXN0ZXIgd2luZG93XG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1BQzEgcmVnaXN0ZXIgd2luZG93IChpbmNsdWRlcyBNRElPIGFuZCBQVFApXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1BQzIgcmVnaXN0ZXIgd2luZG93IChpbmNsdWRlcyBNRElPIGFuZCBQVFApXG4rXG4rICAgICAgcmVnLW5hbWVzOlxuKyAgICAgICAgaXRlbXM6XG4rICAgICAgICAgIC0gY29uc3Q6IHN3aXRjaFxuKyAgICAgICAgICAtIGNvbnN0OiBtYWMxXG4rICAgICAgICAgIC0gY29uc3Q6IG1hYzJcbitcbisgICAgICBpbnRlcnJ1cHRzOlxuKyAgICAgICAgbWluSXRlbXM6IDdcbisgICAgICAgIG1heEl0ZW1zOiA3XG4rXG4rICAgICAgaW50ZXJydXB0LW5hbWVzOlxuKyAgICAgICAgaXRlbXM6XG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF9yeF9tYWMxXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90eF9tYWMxXG4rICAgICAgICAgIC0gY29uc3Q6IG1hY19pcnFfbWFjMVxuKyAgICAgICAgICAtIGNvbnN0OiBwdHBfdGltZXJcbisgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzJcbisgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzJcbisgICAgICAgICAgLSBjb25zdDogbWFjX2lycV9tYWMyXG4rXG4rICAgICAgbWRpby0xOlxuKyAgICAgICAgJHJlZjogL3NjaGVtYXMvbmV0L21kaW8ueWFtbCNcbisgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMxLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMVxuKyAgICAgICAgICByZWctbmFtZXMgd2luZG93LlxuKyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuKyAgICAgIG1kaW8tMjpcbisgICAgICAgICRyZWY6IC9zY2hlbWFzL25ldC9tZGlvLnlhbWwjXG4rICAgICAgICBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgTURJTyBidXMgY29udHJvbGxlciBmb3IgTUFDMi4gUmVnaXN0ZXJzIHJlc2lkZSBpbnNpZGUgdGhlIG1hYzJcbisgICAgICAgICAgcmVnLW5hbWVzIHdpbmRvdy5cbisgICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgXCJeKGV0aGVybmV0LSk/cG9ydHMkXCI6XG4rICAgICAgICB0eXBlOiBvYmplY3RcbisgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgJyNhZGRyZXNzLWNlbGxzJzpcbisgICAgICAgICAgICBjb25zdDogMVxuK1xuKyAgICAgICAgICAnI3NpemUtY2VsbHMnOlxuKyAgICAgICAgICAgIGNvbnN0OiAwXG4rXG4rICAgICAgICAgIHBvcnRAMDpcbisgICAgICAgICAgICB0eXBlOiBvYmplY3RcbisgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWVcbisgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgICAgIENQVSBwb3J0LiBXaXJlZCBpbnRlcm5hbGx5IHRvIHRoZSBlbmRwb2ludCBNQUMgc2libGluZy5cbitcbisgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgICAgcmVnOlxuKyAgICAgICAgICAgICAgICBjb25zdDogMFxuK1xuKyAgICAgICAgICAgICAgcGh5LW1vZGU6XG4rICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbFxuK1xuKyAgICAgICAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgICAgICAgLSBldGhlcm5ldFxuK1xuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAgIFwiXnBvcnRAWzEtMl0kXCI6XG4rICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4rICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XG4rICAgICAgICAgICAgICBFeHRlcm5hbCBFdGhlcm5ldCBwb3J0LiBwb3J0QDEgaXMgd2lyZWQgdG8gTUFDMSBhbmQgcmVhY2hlZFxuKyAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbWRpby0xIGJ1cywgcG9ydEAyIGlzIHdpcmVkIHRvIE1BQzIgYW5kIHJlYWNoZWRcbisgICAgICAgICAgICAgIHRocm91Z2ggdGhlIG1kaW8tMiBidXMuXG4rXG4rICAgICAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgICAgIHJlZzpcbisgICAgICAgICAgICAgICAgZW51bTogWzEsIDJdXG4rXG4rICAgICAgICAgICAgICBwaHktbW9kZTpcbisgICAgICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgICAgICAtIGdtaWlcbisgICAgICAgICAgICAgICAgICAtIHJnbWlpXG4rICAgICAgICAgICAgICAgICAgLSByZ21paS1pZFxuK1xuKyAgICAgICAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgICAgICAgLSByZWdcbisgICAgICAgICAgICAgIC0gcGh5LW1vZGVcbisgICAgICAgICAgICAgIC0gcGh5LWhhbmRsZVxuK1xuKyAgICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAgIC0gcG9ydEAwXG4rICAgICAgICAgIC0gcG9ydEAxXG4rICAgICAgICAgIC0gcG9ydEAyXG4rXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICAgIC0gcmVnXG4rICAgICAgLSByZWctbmFtZXNcbisgICAgICAtIGludGVycnVwdHNcbisgICAgICAtIGludGVycnVwdC1uYW1lc1xuK1xuKyAgICBvbmVPZjpcbisgICAgICAtIHJlcXVpcmVkOiBbcG9ydHNdXG4rICAgICAgLSByZXF1aXJlZDogW2V0aGVybmV0LXBvcnRzXVxuK1xuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gY2xvY2tzXG4rICAtIGNsb2NrLW5hbWVzXG4rICAtIHhsbngsbnVtLXByaW9yaXRpZXNcbisgIC0gcmFuZ2VzXG4rICAtICcjYWRkcmVzcy1jZWxscydcbisgIC0gJyNzaXplLWNlbGxzJ1xuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIHRzbkA4MDA0MDAwMCB7XG4rICAgICAgICBjb21wYXRpYmxlID0gXCJ4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCI7XG4rICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZtaXNjX2Nsa18yXHUwMDNlLCBcdTAwM2NcdTAwMjZtaXNjX2Nsa18yXHUwMDNlLCBcdTAwM2NcdTAwMjZtaXNjX2Nsa18xXHUwMDNlLCBcdTAwM2NcdTAwMjZtaXNjX2Nsa18xXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2bWlzY19jbGtfM1x1MDAzZSwgXHUwMDNjXHUwMDI2bWlzY19jbGtfMFx1MDAzZTtcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXCJndHhcIiwgXCJndHg5MFwiLCBcImhvc3RfcnhmaWZvXCIsIFwiaG9zdF90eGZpZm9cIixcbisgICAgICAgICAgICAgICAgICAgICAgXCJyZWZcIiwgXCJzX2F4aVwiO1xuKyAgICAgICAgeGxueCxudW0tcHJpb3JpdGllcyA9IFx1MDAzYzhcdTAwM2U7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICByYW5nZXMgPSBcdTAwM2MweDAgMHg4MDA0MDAwMCAweDQwMDAwXHUwMDNlO1xuK1xuKyAgICAgICAgZXBfbWFjOiBldGhlcm5ldEAxNjAwMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieGxueCx0c24tZXAtbWFjXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxNjAwMCAweGEwMDBcdTAwM2U7XG4rICAgICAgICAgICAgZG1hcyA9IFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDBcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDFcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDJcdTAwM2UsXG4rICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDNcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDRcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDVcdTAwM2UsXG4rICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDZcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDdcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE2XHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAxN1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMThcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE5XHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyMFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMjFcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDIyXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyM1x1MDAzZTtcbisgICAgICAgICAgICBkbWEtbmFtZXMgPSBcInR4X2NoYW4wXCIsIFwidHhfY2hhbjFcIiwgXCJ0eF9jaGFuMlwiLCBcInR4X2NoYW4zXCIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eF9jaGFuNFwiLCBcInR4X2NoYW41XCIsIFwidHhfY2hhbjZcIiwgXCJ0eF9jaGFuN1wiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwicnhfY2hhbjBcIiwgXCJyeF9jaGFuMVwiLCBcInJ4X2NoYW4yXCIsIFwicnhfY2hhbjNcIixcbisgICAgICAgICAgICAgICAgICAgICAgICBcInJ4X2NoYW40XCIsIFwicnhfY2hhbjVcIiwgXCJyeF9jaGFuNlwiLCBcInJ4X2NoYW43XCI7XG4rICAgICAgICAgICAgdHgtcXVldWVzLWNvbmZpZyB7XG4rICAgICAgICAgICAgICAgIHF1ZXVlMCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHg3XHUwMDNlOyB9O1xuKyAgICAgICAgICAgICAgICBxdWV1ZTEgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4Nlx1MDAzZTsgfTtcbisgICAgICAgICAgICAgICAgcXVldWUyIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDVcdTAwM2U7IH07XG4rICAgICAgICAgICAgICAgIHF1ZXVlMyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHg0XHUwMDNlOyB9O1xuKyAgICAgICAgICAgICAgICBxdWV1ZTQgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4M1x1MDAzZTsgfTtcbisgICAgICAgICAgICAgICAgcXVldWU1IHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDJcdTAwM2U7IH07XG4rICAgICAgICAgICAgICAgIHF1ZXVlNiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHgxXHUwMDNlOyB9O1xuKyAgICAgICAgICAgICAgICBxdWV1ZTcgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4MFx1MDAzZTsgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbitcbisgICAgICAgIHN3aXRjaEAzODAwMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieGxueCx0c24tc3dpdGNoXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgzODAwMCAweDgwMDBcdTAwM2UsXG4rICAgICAgICAgICAgICAgICAgXHUwMDNjMHgwMDAwMCAweDE0MDAwXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgIFx1MDAzYzB4MjAwMDAgMHgxNDAwMFx1MDAzZTtcbisgICAgICAgICAgICByZWctbmFtZXMgPSBcInN3aXRjaFwiLCBcIm1hYzFcIiwgXCJtYWMyXCI7XG4rXG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmludGNcdTAwM2U7XG4rICAgICAgICAgICAgaW50ZXJydXB0cyA9IFx1MDAzYzAgMlx1MDAzZSwgXHUwMDNjMiAyXHUwMDNlLCBcdTAwM2M0IDJcdTAwM2UsIFx1MDAzYzYgMlx1MDAzZSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjMSAyXHUwMDNlLCBcdTAwM2MzIDJcdTAwM2UsIFx1MDAzYzUgMlx1MDAzZTtcbisgICAgICAgICAgICBpbnRlcnJ1cHQtbmFtZXMgPSBcInB0cF9yeF9tYWMxXCIsIFwicHRwX3R4X21hYzFcIixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hY19pcnFfbWFjMVwiLCBcInB0cF90aW1lclwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHRwX3J4X21hYzJcIiwgXCJwdHBfdHhfbWFjMlwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFjX2lycV9tYWMyXCI7XG4rXG4rICAgICAgICAgICAgbWRpby0xIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIHBoeTA6IGV0aGVybmV0LXBoeUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICBtZGlvLTIge1xuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgcGh5MTogZXRoZXJuZXQtcGh5QDEge1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBvcnRzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBvcnRAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSBcdTAwM2NcdTAwMjZlcF9tYWNcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwiaW50ZXJuYWxcIjtcbitcbisgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsge1xuKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gXHUwMDNjMTAwMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDtcbisgICAgICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgICAgIHBvcnRAMSB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9IFx1MDAzY1x1MDAyNnBoeTBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwicmdtaWktaWRcIjtcbisgICAgICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICAgICAgcG9ydEAyIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2cGh5MVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCJyZ21paS1pZFwiO1xuKyAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLmZmOTRlMzE0ZWViMWYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yOTkxMSw2ICsyOTkxMSwxNCBAQCBNOlx0SGFyc2ggSmFpbiBcdTAwM2NoLmphaW5AYW1kLmNvbVx1MDAzZVxuIFM6XHRNYWludGFpbmVkXG4gRjpcdGRyaXZlcnMvY2hhci9od19yYW5kb20veGlsaW54LXRybmcuY1xuIFxuK1hJTElOWCBUU04gRU5EUE9JTlQgRVRIRVJORVQgTUFDIERSSVZFUlxuK006XHROYWdhZGhlZXJhaiBSb3R0ZWxhIFx1MDAzY25hZ2FkaGVlcmFqLnJvdHRlbGFAYW1kLmNvbVx1MDAzZVxuK006XHRTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXG4rRjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vXG4rXG4gWElMSU5YIFVBUlRMSVRFIFNFUklBTCBEUklWRVJcbiBNOlx0UGV0ZXIgS29yc2dhYXJkIFx1MDAzY2phY21ldEBzdW5zaXRlLmRrXHUwMDNlXG4gTDpcdGxpbnV4LXNlcmlhbEB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXG5pbmRleCA3NTAyMjE0Y2M3ZDUwLi5jNmQ3MDRjOGQzZDQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXG5AQCAtNDEsNCArNDEsNSBAQCBjb25maWcgWElMSU5YX0xMX1RFTUFDXG4gXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDXG4gXHQgIGNvcmUgdXNlZCBpbiBYaWxpbnggU3BhcnRhbiBhbmQgVmlydGV4IEZQR0FzXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnXCJcbiBlbmRpZiAjIE5FVF9WRU5ET1JfWElMSU5YXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG5pbmRleCA3ZDdkYzE3NzE0MjNlLi42NmRhYjAxMjY1MGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbkBAIC04LDMgKzgsNCBAQCBvYmotJChDT05GSUdfWElMSU5YX0xMX1RFTUFDKSArPSBsbF90ZW1hYy5vXG4gb2JqLSQoQ09ORklHX1hJTElOWF9FTUFDTElURSkgKz0geGlsaW54X2VtYWNsaXRlLm9cbiB4aWxpbnhfZW1hYy1vYmpzIDo9IHhpbGlueF9heGllbmV0X21haW4ubyB4aWxpbnhfYXhpZW5ldF9tZGlvLm9cbiBvYmotJChDT05GSUdfWElMSU5YX0FYSV9FTUFDKSArPSB4aWxpbnhfZW1hYy5vXG4rb2JqLSQoQ09ORklHX1hJTElOWF9UU04pICs9IHRzbi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yOTJmMTc2OTQ0MDQyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWdcbkBAIC0wLDAgKzEsMTYgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBYSUxJTlhfVFNOXG4rXHR0cmlzdGF0ZSBcIlhpbGlueCBUU04gRXRoZXJuZXQgZHJpdmVyXCJcbitcdGRlcGVuZHMgb24gT0ZfQUREUkVTU1xuK1x0ZGVwZW5kcyBvbiBYSUxJTlhfRE1BXG4rXHRoZWxwXG4rXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBBTUQvWGlsaW54IFRpbWUtU2Vuc2l0aXZlIE5ldHdvcmtpbmdcbitcdCAgKFRTTikgRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQLiBJdCBwcm92aWRlcyB0aGUgd3JhcHBlciBkZXZpY2VcbitcdCAgYW5kIHRoZSBlbmRwb2ludCBNQUMgdGhhdCBjb25uZWN0cyB0aGUgSVAgdG8gdGhlIGhvc3QgQ1BVLiBUaGVcbitcdCAgdGhyZWUtcG9ydCBzd2l0Y2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBjb21wYW5pb24gRFNBIGRyaXZlci5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjU4ODY4MjhiMzg2ZjRcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vTWFrZWZpbGVcbkBAIC0wLDAgKzEsMiBAQFxuK29iai0kKENPTkZJR19YSUxJTlhfVFNOKSArPSB4aWxpbnhfdHNuLm9cbit4aWxpbnhfdHNuLXkgOj0geGlsaW54X3Rzbl9tYWluLm8geGlsaW54X3Rzbl9lcC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIwNzU3ZTIyZDFmZDFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oXG5AQCAtMCwwICsxLDE1IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBkcml2ZXIsIHNoYXJlZCBkZWZpbml0aW9ucy5cbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4rICovXG4rXG4rI2lmbmRlZiBfWElMSU5YX1RTTl9IXG4rI2RlZmluZSBfWElMSU5YX1RTTl9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbitcbitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXI7XG4rXG4rI2VuZGlmIC8qIF9YSUxJTlhfVFNOX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9lcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGI3ZGEyNjUyMWQwMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmNcbkBAIC0wLDAgKzEsMTAzNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLlxuKyAqXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jaXJjX2J1Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hL3hpbGlueF9kbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwieGlsaW54X3Rzbi5oXCJcbitcbisjZGVmaW5lIERSSVZFUl9OQU1FXHRcdFx0XCJ4aWxpbnhfdHNuX2VwXCJcbitcbisjZGVmaW5lIFRTTl9ETUFfQ0hfSU5WQUxJRFx0XHQweEZGVVxuKyNkZWZpbmUgVFNOX01BWF9UWF9RVUVVRVx0XHQ4XG4rI2RlZmluZSBUU05fTUFYX1JYX1FVRVVFXHRcdDhcbitcbisjZGVmaW5lIFRTTl9NQVhfVkxBTl9GUkFNRV9TSVpFXHRcdChFVEhfREFUQV9MRU4gKyBWTEFOX0VUSF9ITEVOICsgXFxcbitcdFx0XHRcdFx0IEVUSF9GQ1NfTEVOKVxuK1xuKyNkZWZpbmUgVFhfQkRfTlVNX0RFRkFVTFRcdFx0NjRcbisjZGVmaW5lIFJYX0JEX05VTV9ERUZBVUxUXHRcdDEyOFxuK1xuKyNkZWZpbmUgRVBfUlhfUkVGSUxMX1JFVFJZXHRcdG1zZWNzX3RvX2ppZmZpZXMoMTApXG4rXG4rLypcbisgKiBUaGUgRE1BIGRlc2NyaXB0b3Igc2lkZWJhbmQgc3RhdHVzIHdvcmQgcGFja3MgVElEL1RERVNUL1RVU0VSIHRvZ2V0aGVyO1xuKyAqIFRVU0VSIG9jY3VwaWVzIHRoZSBsb3cgYnl0ZSwgVElEL1RERVNUIHNpdCBpbiB0aGUgdXBwZXIgYml0cy5cbisgKi9cbisjZGVmaW5lIFRTTl9UVVNFUl9NQVNLXHRcdFx0R0VOTUFTSyg3LCAwKVxuKy8qIFRVU0VSIElucHV0IFBvcnQgSUQgZmllbGQgKGJpdHMgWzU6NF0gb2YgdGhlIFRVU0VSIGZpZWxkKSAqL1xuKyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfSURfTUFTS1x0XHRHRU5NQVNLKDUsIDQpXG4rI2RlZmluZSBUU05fVFVTRVJfUE9SVF9FUFx0XHQweDBcbisjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX01BQzFcdFx0MHgxXG4rI2RlZmluZSBUU05fVFVTRVJfUE9SVF9NQUMyXHRcdDB4MlxuK1xuKy8qIFNpemVkIHRvIGluZGV4IHBvcnRfbWRbXSBieSBUVVNFUiBwb3J0X2lkICgxIG9yIDIsIHNsb3QgMCB1bnVzZWQpICovXG4rI2RlZmluZSBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTXHQoVFNOX1RVU0VSX1BPUlRfTUFDMiArIDEpXG4rXG4rLyoqXG4rICogc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIC0gc2tiIGNvbnRhaW5lciBmb3IgZWFjaCBpbi1mbGlnaHQgRE1BIGRlc2NyaXB0b3JcbisgKiBAc2dsOiBzY2F0dGVyLWdhdGhlciBsaXN0IGJhY2tpbmcgdGhlIERNQSBtYXBwaW5nXG4rICogQGRlc2M6IGRtYWVuZ2luZSBkZXNjcmlwdG9yIGhhbmRsZVxuKyAqIEBkbWFfYWRkcmVzczogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3Qgc2dsIGVudHJ5IChSWCBwYXRoKVxuKyAqIEBza2I6IFNLQiBvd25pbmcgdGhlIGJ1ZmZlclxuKyAqIEBzZ19sZW46IG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIEBzZ2wgKFRYIHBhdGgpXG4rICovXG4rc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIHtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ2xbTUFYX1NLQl9GUkFHUyArIDFdO1xuK1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjO1xuK1x0ZG1hX2FkZHJfdCBkbWFfYWRkcmVzcztcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRpbnQgc2dfbGVuO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuIC0gb25lIERNQSBjaGFubmVsIGFuZCBpdHMgU0tCIHJpbmdcbisgKiBAc2tiX3Jpbmc6IHBlci1zbG90IFNLQiBkZXNjcmlwdG9yc1xuKyAqIEBlcDogcG9pbnRlciBiYWNrIHRvIHRoZSBvd25pbmcgRVAgaW5zdGFuY2VcbisgKiBAY2hhbjogZG1hZW5naW5lIGNoYW5uZWwgaGFuZGxlXG4rICogQGRtYV9kZXY6IGRldmljZSB1c2VkIGZvciBETUEgbWFwcGluZyAodGhlIERNQSBlbmdpbmUsIG5vdCB0aGUgRVApXG4rICogQHJpbmdfaGVhZDogcHJvZHVjZXIgaW5kZXhcbisgKiBAcmluZ190YWlsOiBjb25zdW1lciBpbmRleFxuKyAqIEByaW5nX3NpemU6IG51bWJlciBvZiBzbG90cyBpbiBAc2tiX3JpbmdcbisgKiBAcnhfbG9jazogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGJldHdlZW4gdGhlIFJYIGNhbGxiYWNrIGFuZCB0aGUgcmVmaWxsIHRpbWVyXG4rICogQHR4X2xvY2s6IHNlcmlhbGlzZXMgQHJpbmdfaGVhZCBhbmQgQHJpbmdfdGFpbCBiZXR3ZWVuIHhtaXQgYW5kIFRYIGNvbXBsZXRpb25cbisgKiBAcnhfcmVmaWxsX3RpbWVyOiByZXRyaWVzIFJYIHJlZmlsbCBhZnRlciBhbiBhbGxvY2F0aW9uIGZhaWx1cmVcbisgKiBAaXNfdHg6IHRydWUgZm9yIFRYIGNoYW5uZWxzLCBmYWxzZSBmb3IgUlhcbisgKi9cbitzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4ge1xuK1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICoqc2tiX3Jpbmc7XG4rXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwO1xuK1x0c3RydWN0IGRtYV9jaGFuICpjaGFuO1xuK1x0c3RydWN0IGRldmljZSAqZG1hX2RldjtcbitcdHUzMiByaW5nX2hlYWQ7XG4rXHR1MzIgcmluZ190YWlsO1xuK1x0dTMyIHJpbmdfc2l6ZTtcbitcdHNwaW5sb2NrX3QgcnhfbG9jaztcdC8qIHNlcmlhbGlzZXMgQHJpbmdfaGVhZCAqL1xuK1x0c3BpbmxvY2tfdCB0eF9sb2NrO1x0Lyogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGFuZCBAcmluZ190YWlsICovXG4rXHRzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWZpbGxfdGltZXI7XG4rXHRib29sIGlzX3R4O1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHhsbnhfdHNuX2VwIC0gRVAgTUFDIHByaXZhdGUgZGF0YSwgZW1iZWRkZWQgaW4gbmV0X2RldmljZSBwcml2IGFyZWFcbisgKiBAbmRldjogdGhlIGNvbmR1aXQgbmV0ZGV2IChcImVwMFwiIGZvciB0aGUgZmlyc3QgSVAgaW5zdGFuY2UpXG4rICogQGRldjogYmFja2luZyBkZXZpY2VcbisgKiBAbnVtX3R4X3F1ZXVlczogbnVtYmVyIG9mIFRYIERNQSBjaGFubmVscyAob25lIHBlciBwcmlvcml0eSlcbisgKiBAbnVtX3J4X3F1ZXVlczogbnVtYmVyIG9mIFJYIERNQSBjaGFubmVsc1xuKyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLVx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcbisgKiBAcnhfY2hhbl9udW06IFJYIHJpbmcgaW5kZXggLVx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcbisgKiBAbWF4X2ZybV9zaXplOiBtYXhpbXVtIGZyYW1lIHNpemUgYWNjZXB0ZWQgb24gUlhcbisgKiBAdHhfY2hhbnM6IGFycmF5IG9mIFRYIGNoYW5uZWxzIChzaXplIEBudW1fdHhfcXVldWVzKVxuKyAqIEByeF9jaGFuczogYXJyYXkgb2YgUlggY2hhbm5lbHMgKHNpemUgQG51bV9yeF9xdWV1ZXMpXG4rICogQGNsb3Npbmc6IHNldCBpbiBuZG9fc3RvcCBzbyB0aGUgUlggY29tcGxldGlvbiBjYWxsYmFjayBzdG9wcyByZS1hcm1pbmdcbisgKiBAcG9ydF9tZDogcGVyLVRVU0VSLXBvcnQgTUVUQURBVEFfSFdfUE9SVF9NVVggZW50cmllcyBhdHRhY2hlZCBvbiBSWCxcbisgKlx0aW5kZXhlZCBieSBwb3J0X2lkICgxIGZvciBNQUMxLCAyIGZvciBNQUMyKVxuKyAqL1xuK3N0cnVjdCB4bG54X3Rzbl9lcCB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHUzMiBudW1fdHhfcXVldWVzO1xuK1x0dTMyIG51bV9yeF9xdWV1ZXM7XG4rXHR1MzIgdHhfZG1hX2NoYW5fbWFwW1RTTl9NQVhfVFhfUVVFVUVdO1xuK1x0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xuK1x0dTMyIG1heF9mcm1fc2l6ZTtcbitcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnR4X2NoYW5zO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoqcnhfY2hhbnM7XG4rXG4rXHRib29sIGNsb3Npbmc7XG4rXG4rXHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICpwb3J0X21kW1hMTlhfVFNOX0VQX1BPUlRfTURfU0xPVFNdO1xuK307XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKlxuK2VwX2dldF9kZXNjKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4sIGludCBpZHgpXG4re1xuK1x0cmV0dXJuIHhjaGFuLVx1MDAzZXNrYl9yaW5nW2lkeF07XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVwX2RtYV9yeF9jYih2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzdWx0KTtcbitcbitzdGF0aWMgaW50IGVwX3J4X3N1Ym1pdF9kZXNjKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4pXG4re1xuK1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkbWFfcnhfZGVzYztcbitcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHhjaGFuLVx1MDAzZWVwO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGRtYV9hZGRyX3QgYWRkcjtcbitcbitcdHNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi1cdTAwM2VyaW5nX2hlYWQgXHUwMDI2ICh4Y2hhbi1cdTAwM2VyaW5nX3NpemUgLSAxKSk7XG4rXHRpZiAoIXNrYnVmX2RtYSlcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXG4rXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGVwLVx1MDAzZW1heF9mcm1fc2l6ZSk7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRzZ19pbml0X3RhYmxlKHNrYnVmX2RtYS1cdTAwM2VzZ2wsIDEpO1xuK1x0YWRkciA9IGRtYV9tYXBfc2luZ2xlKHhjaGFuLVx1MDAzZWRtYV9kZXYsIHNrYi1cdTAwM2VkYXRhLCBlcC1cdTAwM2VtYXhfZnJtX3NpemUsXG4rXHRcdFx0ICAgICAgRE1BX0ZST01fREVWSUNFKTtcbitcdGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcih4Y2hhbi1cdTAwM2VkbWFfZGV2LCBhZGRyKSkpIHtcbitcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbitcdFx0XHRkZXZfd2FybihlcC1cdTAwM2VkZXYsIFwiRE1BIG1hcHBpbmcgZXJyb3Igb24gUlggc3VibWl0XFxuXCIpO1xuK1xuK1x0XHRnb3RvIGVycl9mcmVlX3NrYjtcbitcdH1cbitcdHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cdTAwM2VzZ2wpID0gYWRkcjtcbitcdHNnX2RtYV9sZW4oc2tidWZfZG1hLVx1MDAzZXNnbCkgPSBlcC1cdTAwM2VtYXhfZnJtX3NpemU7XG4rXHRkbWFfcnhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLVx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4rXHRcdFx0XHRcdCAgICAgIDEsIERNQV9ERVZfVE9fTUVNLFxuK1x0XHRcdFx0XHQgICAgICBETUFfUFJFUF9JTlRFUlJVUFQpO1xuK1x0aWYgKCFkbWFfcnhfZGVzYylcbitcdFx0Z290byBlcnJfdW5tYXBfc2tiO1xuK1xuK1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IHNrYjtcbitcdHNrYnVmX2RtYS1cdTAwM2VkbWFfYWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cdTAwM2VzZ2wpO1xuK1x0c2tidWZfZG1hLVx1MDAzZWRlc2MgPSBkbWFfcnhfZGVzYztcbitcdGRtYV9yeF9kZXNjLVx1MDAzZWNhbGxiYWNrX3BhcmFtID0geGNoYW47XG4rXHRkbWFfcnhfZGVzYy1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBlcF9kbWFfcnhfY2I7XG4rXHR4Y2hhbi1cdTAwM2VyaW5nX2hlYWQrKztcbitcdGRtYWVuZ2luZV9zdWJtaXQoZG1hX3J4X2Rlc2MpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3VubWFwX3NrYjpcbitcdGRtYV91bm1hcF9zaW5nbGUoeGNoYW4tXHUwMDNlZG1hX2RldiwgYWRkciwgZXAtXHUwMDNlbWF4X2ZybV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuK2Vycl9mcmVlX3NrYjpcbitcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgYm9vbCBlcF9yeF9yZWZpbGwoc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiwgYm9vbCBhcm1fdGltZXIpXG4re1xuK1x0aW50IGF2YWlsLCBpO1xuK1xuK1x0Z3VhcmQoc3BpbmxvY2tfYmgpKFx1MDAyNnhjaGFuLVx1MDAzZXJ4X2xvY2spO1xuK1xuK1x0aWYgKFJFQURfT05DRSh4Y2hhbi1cdTAwM2VlcC1cdTAwM2VjbG9zaW5nKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0YXZhaWwgPSBDSVJDX1NQQUNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCwgUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCksXG4rXHRcdFx0ICAgeGNoYW4tXHUwMDNlcmluZ19zaXplKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGF2YWlsOyBpKyspIHtcbitcdFx0aWYgKGVwX3J4X3N1Ym1pdF9kZXNjKHhjaGFuKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuK1xuK1x0aWYgKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCAhPSBSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoYXJtX3RpbWVyKVxuK1x0XHRtb2RfdGltZXIoXHUwMDI2eGNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBqaWZmaWVzICsgRVBfUlhfUkVGSUxMX1JFVFJZKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZXBfcnhfcmVmaWxsX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4gPSB0aW1lcl9jb250YWluZXJfb2YoeGNoYW4sIHQsXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgcnhfcmVmaWxsX3RpbWVyKTtcbitcbitcdGVwX3J4X3JlZmlsbCh4Y2hhbiwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVwX2RtYV9yeF9jYih2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzdWx0KVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4gPSBkYXRhO1xuK1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4rXHRzaXplX3QgbWV0YV9sZW4sIG1ldGFfbWF4X2xlbiwgcnhfbGVuO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHhjaGFuLVx1MDAzZWVwO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBlcC1cdTAwM2VuZGV2O1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUzMiBwb3J0X2lkLCB0dXNlcjtcbitcdHUzMiAqbWV0YWRhdGE7XG4rXG4rXHRza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbiwgeGNoYW4tXHUwMDNlcmluZ190YWlsIFx1MDAyNiAoeGNoYW4tXHUwMDNlcmluZ19zaXplIC0gMSkpO1xuK1x0V1JJVEVfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwsIHhjaGFuLVx1MDAzZXJpbmdfdGFpbCArIDEpO1xuK1x0c2tiID0gc2tidWZfZG1hLVx1MDAzZXNrYjtcbitcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuK1xuK1x0ZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlZG1hX2FkZHJlc3MsXG4rXHRcdFx0IGVwLVx1MDAzZW1heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbitcbitcdGlmIChyZXN1bHQtXHUwMDNlcmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0ZGV2X3dhcm4oZXAtXHUwMDNlZGV2LCBcIlJYIERNQSB0cmFuc2ZlciBlcnJvciAlZFxcblwiLFxuK1x0XHRcdFx0IHJlc3VsdC1cdTAwM2VyZXN1bHQpO1xuK1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4rXHRcdGdvdG8gc3VibWl0X25ldztcbitcdH1cbitcbitcdG1ldGFkYXRhID0gZG1hZW5naW5lX2Rlc2NfZ2V0X21ldGFkYXRhX3B0cihza2J1Zl9kbWEtXHUwMDNlZGVzYyxcbitcdFx0XHRcdFx0XHQgICBcdTAwMjZtZXRhX2xlbixcbitcdFx0XHRcdFx0XHQgICBcdTAwMjZtZXRhX21heF9sZW4pO1xuK1x0aWYgKElTX0VSUl9PUl9OVUxMKG1ldGFkYXRhKSkge1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdGRldl93YXJuKGVwLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gZ2V0IFJYIG1ldGFkYXRhIHBvaW50ZXJcXG5cIik7XG4rXG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4rXHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZXJyb3JzKTtcbitcdFx0Z290byBzdWJtaXRfbmV3O1xuK1x0fVxuK1xuK1x0LyogTUNETUEgbWV0YWRhdGE6IFswXSA9IHN0YXR1cywgWzFdID0gc2lkZWJhbmQgKFRJRC9UREVTVC9UVVNFUiksIFsyLi5dID0gYXBwICovXG4rXHR0dXNlciA9IG1ldGFkYXRhWzFdIFx1MDAyNiBUU05fVFVTRVJfTUFTSztcbitcdHJ4X2xlbiA9IGVwLVx1MDAzZW1heF9mcm1fc2l6ZSAtIHJlc3VsdC1cdTAwM2VyZXNpZHVlO1xuK1xuK1x0aWYgKHJ4X2xlbiBcdTAwM2UgZXAtXHUwMDNlbWF4X2ZybV9zaXplIHx8IHJ4X2xlbiBcdTAwM2MgRVRIX0hMRU4pIHtcbitcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbitcdFx0XHRkZXZfd2FybihlcC1cdTAwM2VkZXYsIFwiSW52YWxpZCBSWCBsZW5ndGggJXp1IChtYXg9JXUsIG1pbj0ldSlcXG5cIixcbitcdFx0XHRcdCByeF9sZW4sIGVwLVx1MDAzZW1heF9mcm1fc2l6ZSwgRVRIX0hMRU4pO1xuK1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4rXHRcdGdvdG8gc3VibWl0X25ldztcbitcdH1cbitcbitcdHBvcnRfaWQgPSBGSUVMRF9HRVQoVFNOX1RVU0VSX1BPUlRfSURfTUFTSywgdHVzZXIpO1xuK1x0aWYgKHBvcnRfaWQgIT0gVFNOX1RVU0VSX1BPUlRfTUFDMSBcdTAwMjZcdTAwMjYgcG9ydF9pZCAhPSBUU05fVFVTRVJfUE9SVF9NQUMyKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0ZGV2X2RiZyhlcC1cdTAwM2VkZXYsIFwiUlggZHJvcHBpbmcgdW5leHBlY3RlZCBUVVNFUiBwb3J0X2lkPSV1XFxuXCIsXG4rXHRcdFx0XHRwb3J0X2lkKTtcbitcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9kcm9wcGVkKTtcbitcdFx0Z290byBzdWJtaXRfbmV3O1xuK1x0fVxuK1xuK1x0c2tiX3B1dChza2IsIHJ4X2xlbik7XG4rXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5kZXYpKSB7XG4rXHRcdGRzdF9ob2xkKFx1MDAyNmVwLVx1MDAzZXBvcnRfbWRbcG9ydF9pZF0tXHUwMDNlZHN0KTtcbitcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZlcC1cdTAwM2Vwb3J0X21kW3BvcnRfaWRdLVx1MDAzZWRzdCk7XG4rXHR9XG4rXHRza2ItXHUwMDNlZGV2ID0gbmRldjtcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7XG4rXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbitcdF9fbmV0aWZfcngoc2tiKTtcbitcbitcdERFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7XG4rXHRERVZfU1RBVFNfQUREKG5kZXYsIHJ4X2J5dGVzLCByeF9sZW4pO1xuK1xuK3N1Ym1pdF9uZXc6XG4rXHRlcF9yeF9yZWZpbGwoeGNoYW4sIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcF9kbWFfdHhfY2Iodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlc3VsdClcbit7XG4rXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcbitcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hO1xuK1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRpbnQgc2dfbGVuO1xuK1x0aW50IGxlbjtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jaykge1xuK1x0XHRza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbixcbitcdFx0XHRcdFx0eGNoYW4tXHUwMDNlcmluZ190YWlsIFx1MDAyNiAoeGNoYW4tXHUwMDNlcmluZ19zaXplIC0gMSkpO1xuK1x0XHRpZiAoIXNrYnVmX2RtYSB8fCAhc2tidWZfZG1hLVx1MDAzZXNrYilcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdHNrYiA9IHNrYnVmX2RtYS1cdTAwM2Vza2I7XG4rXHRcdHNnbCA9IHNrYnVmX2RtYS1cdTAwM2VzZ2w7XG4rXHRcdHNnX2xlbiA9IHNrYnVmX2RtYS1cdTAwM2VzZ19sZW47XG4rXG4rXHRcdGRtYV91bm1hcF9zZyh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBzZ2wsIHNnX2xlbiwgRE1BX1RPX0RFVklDRSk7XG4rXG4rXHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXHUwMDNlcmluZ190YWlsICsgMSk7XG4rXHR9XG4rXG4rXHRuZGV2ID0gc2tiLVx1MDAzZWRldjtcbitcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1x0bGVuID0gc2tiLVx1MDAzZWxlbjtcbitcbitcdGlmICh1bmxpa2VseShyZXN1bHQtXHUwMDNlcmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSkge1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X2Vycm9ycyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X3BhY2tldHMpO1xuK1x0XHRERVZfU1RBVFNfQUREKG5kZXYsIHR4X2J5dGVzLCBsZW4pO1xuK1x0fVxuK1xuK1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuK1x0bmV0aWZfdHhxX2NvbXBsZXRlZF93YWtlKHR4cSwgMSwgbGVuLFxuK1x0XHRcdFx0IENJUkNfU1BBQ0UoUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCksXG4rXHRcdFx0XHRcdCAgICBSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSxcbitcdFx0XHRcdFx0ICAgIHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSksIDIpO1xuK31cbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgZXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYV90eF9kZXNjO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4rXHRpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW47XG4rXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4rXHRpbnQgc2dfbGVuLCBuZW50cywgcmV0O1xuK1x0ZG1hX2Nvb2tpZV90IGNvb2tpZTtcbitcbitcdGlmICh1bmxpa2VseShxdWV1ZSBcdTAwM2U9IGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0bmV0ZGV2X3dhcm4obmRldiwgXCJJbnZhbGlkIFRYIHF1ZXVlICVkIChtYXggJXUpXFxuXCIsXG4rXHRcdFx0XHQgICAgcXVldWUsIGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuK1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbitcdH1cbitcbitcdGlmIChlcC1cdTAwM2V0eF9kbWFfY2hhbl9tYXBbcXVldWVdID09IFRTTl9ETUFfQ0hfSU5WQUxJRCkge1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdG5ldGRldl93YXJuKG5kZXYsIFwiTG9naWNhbCBUWCBxdWV1ZSAlZCBoYXMgaW52YWxpZCBETUEgbWFwcGluZ1xcblwiLFxuK1x0XHRcdFx0ICAgIHF1ZXVlKTtcbitcdFx0Z290byBlcnJfZHJvcF9za2I7XG4rXHR9XG4rXG4rXHR4Y2hhbiA9IGVwLVx1MDAzZXR4X2NoYW5zW3F1ZXVlXTtcbitcbitcdHNnX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyArIDE7XG4rXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5kZXYsIHF1ZXVlKTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbitcdGlmIChDSVJDX1NQQUNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCwgUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCksXG4rXHRcdCAgICAgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpIFx1MDAzYz0gMSkge1xuK1x0XHRuZXRpZl90eHFfdHJ5X3N0b3AodHhxLFxuK1x0XHRcdFx0ICAgQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsXG4rXHRcdFx0XHRcdCAgICAgIFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuK1x0XHRcdFx0XHQgICAgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpLFxuK1x0XHRcdFx0ICAgMik7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdG5ldGRldl93YXJuKG5kZXYsIFwiVFNOIFRYIHJpbmcgZnVsbFxcblwiKTtcbitcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0fVxuK1xuK1x0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVx1MDAzZXJpbmdfaGVhZCBcdTAwMjYgKHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcbitcdGlmICghc2tidWZfZG1hKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1xuK1x0c2dfaW5pdF90YWJsZShza2J1Zl9kbWEtXHUwMDNlc2dsLCBzZ19sZW4pO1xuK1x0cmV0ID0gc2tiX3RvX3NndmVjKHNrYiwgc2tidWZfZG1hLVx1MDAzZXNnbCwgMCwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbitcdHNnX2xlbiA9IHJldDtcbitcbitcdG5lbnRzID0gZG1hX21hcF9zZyh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuK1x0aWYgKCFuZW50cylcbitcdFx0Z290byBlcnJfZHJvcF9za2I7XG4rXG4rXHRkbWFfdHhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLVx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4rXHRcdFx0XHRcdCAgICAgIG5lbnRzLCBETUFfTUVNX1RPX0RFVixcbitcdFx0XHRcdFx0ICAgICAgRE1BX1BSRVBfSU5URVJSVVBUKTtcbitcdGlmICghZG1hX3R4X2Rlc2MpXG4rXHRcdGdvdG8gZXJyX3VubWFwX3NnO1xuK1xuK1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IHNrYjtcbitcdHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4gPSBzZ19sZW47XG4rXHRkbWFfdHhfZGVzYy1cdTAwM2VjYWxsYmFja19wYXJhbSA9IHhjaGFuO1xuK1x0ZG1hX3R4X2Rlc2MtXHUwMDNlY2FsbGJhY2tfcmVzdWx0ID0gZXBfZG1hX3R4X2NiO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0Y29va2llID0gZG1hZW5naW5lX3N1Ym1pdChkbWFfdHhfZGVzYyk7XG4rXHRpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0XHRza2J1Zl9kbWEtXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0Z290byBlcnJfdW5tYXBfc2c7XG4rXHR9XG4rXHRXUklURV9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCwgeGNoYW4tXHUwMDNlcmluZ19oZWFkICsgMSk7XG4rXHRuZXRkZXZfdHhfc2VudF9xdWV1ZSh0eHEsIHNrYi1cdTAwM2VsZW4pO1xuK1x0bmV0aWZfdHhxX21heWJlX3N0b3AodHhxLFxuK1x0XHRcdCAgICAgQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsXG4rXHRcdFx0XHRcdFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuK1x0XHRcdFx0XHR4Y2hhbi1cdTAwM2VyaW5nX3NpemUpLFxuK1x0XHRcdCAgICAgMiwgMik7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbitcbitcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuK1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcbitlcnJfdW5tYXBfc2c6XG4rXHRkbWFfdW5tYXBfc2coeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVx1MDAzZXNnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTtcbitlcnJfZHJvcF9za2I6XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9kcm9wcGVkKTtcbitcdHJldHVybiBORVRERVZfVFhfT0s7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XG4rc3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XG4rXG4rc3RhdGljIGludCBlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRXUklURV9PTkNFKGVwLVx1MDAzZWNsb3NpbmcsIGZhbHNlKTtcbitcbitcdHJldCA9IGVwX2luaXRfZG1hZW5naW5lKGVwKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcImZhaWxlZCB0byBpbml0aWFsaXplIERNQSBlbmdpbmVcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdG5ldGlmX3R4X2Rpc2FibGUobmRldik7XG4rXHRXUklURV9PTkNFKGVwLVx1MDAzZWNsb3NpbmcsIHRydWUpO1xuK1x0ZXBfZXhpdF9kbWFlbmdpbmUoZXApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdG5ldGRldl90eF9yZXNldF9zdWJxdWV1ZShuZGV2LCBpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZWQpXG4re1xuK1x0c3Ryc2NweShlZC1cdTAwM2Vkcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoZWQtXHUwMDNlZHJpdmVyKSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXBfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fb3Blblx0XHQ9IGVwX29wZW4sXG4rXHQubmRvX3N0b3BcdFx0PSBlcF9zdG9wLFxuK1x0Lm5kb19zdGFydF94bWl0XHRcdD0gZXBfc3RhcnRfeG1pdCxcbitcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbitcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXBfZXRodG9vbF9vcHMgPSB7XG4rXHQuZ2V0X2RydmluZm9cdD0gZXBfZ2V0X2RydmluZm8sXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpcbitlcF9hbGxvY19kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXAgKmVwLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX3R4LFxuK1x0XHQgIGludCByaW5nX3NpemUpXG4re1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuO1xuK1x0c3RydWN0IGRtYV9jaGFuICplcnJfY2hhbjtcbitcdGludCBpO1xuK1xuK1x0Y2hhbiA9IGt6YWxsb2Nfb2JqKCpjaGFuKTtcbitcdGlmICghY2hhbilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRjaGFuLVx1MDAzZWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVx1MDAzZWRldiwgbmFtZSk7XG4rXHRpZiAoSVNfRVJSKGNoYW4tXHUwMDNlY2hhbikpIHtcbitcdFx0ZXJyX2NoYW4gPSBjaGFuLVx1MDAzZWNoYW47XG4rXHRcdGtmcmVlKGNoYW4pO1xuK1x0XHRyZXR1cm4gRVJSX0NBU1QoZXJyX2NoYW4pO1xuK1x0fVxuK1xuK1x0Y2hhbi1cdTAwM2Vza2JfcmluZyA9IGtjYWxsb2MocmluZ19zaXplLCBzaXplb2YoKmNoYW4tXHUwMDNlc2tiX3JpbmcpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghY2hhbi1cdTAwM2Vza2JfcmluZykge1xuK1x0XHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXHUwMDNlY2hhbik7XG4rXHRcdGtmcmVlKGNoYW4pO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJpbmdfc2l6ZTsgaSsrKSB7XG4rXHRcdGNoYW4tXHUwMDNlc2tiX3JpbmdbaV0gPSBremFsbG9jX29iaigqY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSk7XG4rXHRcdGlmICghY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSkge1xuK1x0XHRcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuK1x0XHRcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSk7XG4rXHRcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZyk7XG4rXHRcdFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVx1MDAzZWNoYW4pO1xuK1x0XHRcdGtmcmVlKGNoYW4pO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRjaGFuLVx1MDAzZWlzX3R4ID0gaXNfdHg7XG4rXHRjaGFuLVx1MDAzZWVwID0gZXA7XG4rXHRjaGFuLVx1MDAzZXJpbmdfc2l6ZSA9IHJpbmdfc2l6ZTtcbitcdGNoYW4tXHUwMDNlZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLVx1MDAzZWNoYW4pO1xuK1x0aWYgKGlzX3R4KSB7XG4rXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmNoYW4tXHUwMDNldHhfbG9jayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuK1x0XHR0aW1lcl9zZXR1cChcdTAwMjZjaGFuLVx1MDAzZXJ4X3JlZmlsbF90aW1lciwgZXBfcnhfcmVmaWxsX3RpbWVyLCAwKTtcbitcdH1cbitcbitcdHJldHVybiBjaGFuO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcF9mcmVlX2RtYV9jaGFuKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqY2hhbilcbit7XG4rXHRpbnQgaTtcbitcbitcdGlmICghY2hhbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGNoYW4tXHUwMDNlY2hhbikge1xuK1x0XHRpZiAoIWNoYW4tXHUwMDNlaXNfdHgpIHtcbitcdFx0XHQvKiBlcF9zdG9wKCkgc2V0cyBjbG9zaW5nIGJlZm9yZSB0ZWFyZG93bi4gVGFrZSByeF9sb2NrXG4rXHRcdFx0ICogc28gYW55IHJlZmlsbCB0aGF0IGFscmVhZHkgcGFzc2VkIHRoZSBjbG9zaW5nIGNoZWNrXG4rXHRcdFx0ICogZmluaXNoZXMgYW5kIG5vIGxhdGVyIG9uZSBzdWJtaXRzIG9yIGFybXMgdGhlIHRpbWVyLFxuK1x0XHRcdCAqIHRoZW4gc2h1dCBkb3duIHRoZSB0aW1lciBzbyBpdCBjYW5ub3QgYmUgcmVhcm1lZFxuK1x0XHRcdCAqIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y2hhbi1cdTAwM2VyeF9sb2NrKTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuK1x0XHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2Y2hhbi1cdTAwM2VyeF9yZWZpbGxfdGltZXIpO1xuK1x0XHR9XG4rXG4rXHRcdGRtYWVuZ2luZV90ZXJtaW5hdGVfc3luYyhjaGFuLVx1MDAzZWNoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKGNoYW4tXHUwMDNlaXNfdHgpIHtcbitcdFx0d2hpbGUgKGNoYW4tXHUwMDNlcmluZ190YWlsICE9IGNoYW4tXHUwMDNlcmluZ19oZWFkKSB7XG4rXHRcdFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4rXG4rXHRcdFx0c2tidWZfZG1hID0gY2hhbi1cdTAwM2Vza2JfcmluZ1tjaGFuLVx1MDAzZXJpbmdfdGFpbCBcdTAwMjZcbitcdFx0XHRcdFx0XHQgIChjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpXTtcbitcdFx0XHRpZiAoc2tidWZfZG1hIFx1MDAyNlx1MDAyNiBza2J1Zl9kbWEtXHUwMDNlc2tiKSB7XG4rXHRcdFx0XHRkbWFfdW5tYXBfc2coY2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlc2dsLFxuK1x0XHRcdFx0XHQgICAgIHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tidWZfZG1hLVx1MDAzZXNrYik7XG4rXHRcdFx0XHRza2J1Zl9kbWEtXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0XHR9XG4rXHRcdFx0Y2hhbi1cdTAwM2VyaW5nX3RhaWwrKztcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGNoYW4tXHUwMDNlc2tiX3JpbmcpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2hhbi1cdTAwM2VyaW5nX3NpemU7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hID0gY2hhbi1cdTAwM2Vza2JfcmluZ1tpXTtcbitcbitcdFx0XHRpZiAoc2tidWZfZG1hIFx1MDAyNlx1MDAyNiAhY2hhbi1cdTAwM2Vpc190eCBcdTAwMjZcdTAwMjYgc2tidWZfZG1hLVx1MDAzZXNrYikge1xuK1x0XHRcdFx0ZG1hX3VubWFwX3NpbmdsZShjaGFuLVx1MDAzZWRtYV9kZXYsXG4rXHRcdFx0XHRcdFx0IHNrYnVmX2RtYS1cdTAwM2VkbWFfYWRkcmVzcyxcbitcdFx0XHRcdFx0XHQgY2hhbi1cdTAwM2VlcC1cdTAwM2VtYXhfZnJtX3NpemUsXG4rXHRcdFx0XHRcdFx0IERNQV9GUk9NX0RFVklDRSk7XG4rXHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2J1Zl9kbWEtXHUwMDNlc2tiKTtcbitcdFx0XHR9XG4rXHRcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSk7XG4rXHRcdH1cbitcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZyk7XG4rXHR9XG4rXHRpZiAoY2hhbi1cdTAwM2VjaGFuKVxuK1x0XHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXHUwMDNlY2hhbik7XG4rXG4rXHRrZnJlZShjaGFuKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbit7XG4rXHRpbnQgaTtcbitcbitcdGlmIChlcC1cdTAwM2V0eF9jaGFucykge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cdTAwM2V0eF9jaGFuc1tpXSk7XG4rXHRcdGtmcmVlKGVwLVx1MDAzZXR4X2NoYW5zKTtcbitcdFx0ZXAtXHUwMDNldHhfY2hhbnMgPSBOVUxMO1xuK1x0fVxuK1x0aWYgKGVwLVx1MDAzZXJ4X2NoYW5zKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbitcdFx0XHRlcF9mcmVlX2RtYV9jaGFuKGVwLVx1MDAzZXJ4X2NoYW5zW2ldKTtcbitcdFx0a2ZyZWUoZXAtXHUwMDNlcnhfY2hhbnMpO1xuK1x0XHRlcC1cdTAwM2VyeF9jaGFucyA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbit7XG4rXHRpbnQgdHhfYWxsb2NhdGVkID0gMCwgcnhfYWxsb2NhdGVkID0gMDtcbitcdGNoYXIgbmFtZVsxNl07XG4rXHRpbnQgaSwgcmV0O1xuK1xuK1x0ZXAtXHUwMDNldHhfY2hhbnMgPSBrY2FsbG9jKGVwLVx1MDAzZW51bV90eF9xdWV1ZXMsIHNpemVvZigqZXAtXHUwMDNldHhfY2hhbnMpLFxuK1x0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghZXAtXHUwMDNldHhfY2hhbnMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0ZXAtXHUwMDNlcnhfY2hhbnMgPSBrY2FsbG9jKGVwLVx1MDAzZW51bV9yeF9xdWV1ZXMsIHNpemVvZigqZXAtXHUwMDNlcnhfY2hhbnMpLFxuK1x0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghZXAtXHUwMDNlcnhfY2hhbnMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfZnJlZV90eDtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwidHhfY2hhbiV1XCIsIGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSk7XG4rXHRcdGVwLVx1MDAzZXR4X2NoYW5zW2ldID0gZXBfYWxsb2NfZG1hX2NoYW4oZXAsIG5hbWUsIHRydWUsXG4rXHRcdFx0XHRcdFx0ICAgIFRYX0JEX05VTV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihlcC1cdTAwM2V0eF9jaGFuc1tpXSkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKGVwLVx1MDAzZXR4X2NoYW5zW2ldKTtcbitcdFx0XHRlcC1cdTAwM2V0eF9jaGFuc1tpXSA9IE5VTEw7XG4rXHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbitcdFx0fVxuK1x0XHR0eF9hbGxvY2F0ZWQrKztcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwicnhfY2hhbiV1XCIsIGVwLVx1MDAzZXJ4X2NoYW5fbnVtW2ldKTtcbitcdFx0ZXAtXHUwMDNlcnhfY2hhbnNbaV0gPSBlcF9hbGxvY19kbWFfY2hhbihlcCwgbmFtZSwgZmFsc2UsXG4rXHRcdFx0XHRcdFx0ICAgIFJYX0JEX05VTV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihlcC1cdTAwM2VyeF9jaGFuc1tpXSkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKGVwLVx1MDAzZXJ4X2NoYW5zW2ldKTtcbitcdFx0XHRlcC1cdTAwM2VyeF9jaGFuc1tpXSA9IE5VTEw7XG4rXHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbitcdFx0fVxuK1x0XHRyeF9hbGxvY2F0ZWQrKztcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuK1x0XHRpZiAoIWVwX3J4X3JlZmlsbChlcC1cdTAwM2VyeF9jaGFuc1tpXSwgZmFsc2UpKSB7XG4rXHRcdFx0ZGV2X2VycihlcC1cdTAwM2VkZXYsIFwiUlggY2hhbm5lbCAlZDogbm8gZGVzY3JpcHRvcnMgYXJtZWRcXG5cIixcbitcdFx0XHRcdGkpO1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfY2hhbnM6XG4rXHRXUklURV9PTkNFKGVwLVx1MDAzZWNsb3NpbmcsIHRydWUpO1xuK1x0d2hpbGUgKC0tcnhfYWxsb2NhdGVkIFx1MDAzZT0gMClcbitcdFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cdTAwM2VyeF9jaGFuc1tyeF9hbGxvY2F0ZWRdKTtcbitcdHdoaWxlICgtLXR4X2FsbG9jYXRlZCBcdTAwM2U9IDApXG4rXHRcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXHUwMDNldHhfY2hhbnNbdHhfYWxsb2NhdGVkXSk7XG4rXHRrZnJlZShlcC1cdTAwM2VyeF9jaGFucyk7XG4rXHRlcC1cdTAwM2VyeF9jaGFucyA9IE5VTEw7XG4rZXJyX2ZyZWVfdHg6XG4rXHRrZnJlZShlcC1cdTAwM2V0eF9jaGFucyk7XG4rXHRlcC1cdTAwM2V0eF9jaGFucyA9IE5VTEw7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXG4re1xuK1x0c3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmcgPSB7IC5yZXNldCA9IDEgfTtcbitcdHN0cnVjdCBkbWFfY2hhbiAqcmVzZXRfY2hhbjtcbitcdGNoYXIgbmFtZVsxNl07XG4rXHRpbnQgcmV0O1xuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcInR4X2NoYW4ldVwiLCBlcC1cdTAwM2V0eF9kbWFfY2hhbl9tYXBbMF0pO1xuK1x0cmVzZXRfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW4oZXAtXHUwMDNlZGV2LCBuYW1lKTtcbitcdGlmIChJU19FUlIocmVzZXRfY2hhbikpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgUFRSX0VSUihyZXNldF9jaGFuKSxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVxdWVzdCAlcyBmb3IgcmVzZXRcXG5cIiwgbmFtZSk7XG4rXG4rXHRyZXQgPSB4aWxpbnhfdmRtYV9jaGFubmVsX3NldF9jb25maWcocmVzZXRfY2hhbiwgXHUwMDI2Y2ZnKTtcbitcdGRtYV9yZWxlYXNlX2NoYW5uZWwocmVzZXRfY2hhbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVzZXQgRE1BIGNvbnRyb2xsZXJcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQYXJzZSB0aGUgXCJ0eC1xdWV1ZXMtY29uZmlnXCIgY2hpbGQgb2YgdGhlIEVQIG5vZGUuIFRoZSBsb2dpY2FsIHF1ZXVlXG4rICogaW5kZXggaXMgdGFrZW4gZnJvbSB0aGUgXCJxdWV1ZVx1MDAzY05cdTAwM2VcIiBub2RlIG5hbWUsIHNvIHRoZSBtYXBwaW5nIGRvZXMgbm90XG4rICogZGVwZW5kIG9uIHRoZSBvcmRlciB0aGUgY2hpbGQgbm9kZXMgYXBwZWFyIGluIHRoZSBkZXZpY2UgdHJlZS5cbisgKi9cbitzdGF0aWMgaW50IGVwX3BhcnNlX3R4X3F1ZXVlX2NvbmZpZyhzdHJ1Y3QgeGxueF90c25fZXAgKmVwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdHhjZmdfbnAsIHUxNiB0eF9wcmVzZW50KVxuK3tcbitcdERFQ0xBUkVfQklUTUFQKHF1ZXVlX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307XG4rXHRERUNMQVJFX0JJVE1BUChjaGFuX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307XG4rXHR1bnNpZ25lZCBpbnQgY291bnQgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHR4Y2ZnX25wLCBxbm9kZSkge1xuK1x0XHR1MzIgY2hhbiwgcXVldWU7XG4rXG4rXHRcdGlmICghc3RyX2hhc19wcmVmaXgocW5vZGUtXHUwMDNlbmFtZSwgXCJxdWV1ZVwiKSB8fFxuK1x0XHQgICAga3N0cnRvdTMyKHFub2RlLVx1MDAzZW5hbWUgKyBzdHJsZW4oXCJxdWV1ZVwiKSwgMTAsIFx1MDAyNnF1ZXVlKSB8fFxuK1x0XHQgICAgcXVldWUgXHUwMDNlPSBlcC1cdTAwM2VudW1fdHhfcXVldWVzKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcInR4LWNvbmZpZzogaW52YWxpZCBxdWV1ZSBub2RlICVwT0ZuIChoYXZlICV1IHF1ZXVlcylcXG5cIixcbitcdFx0XHRcdFx0ICAgICBxbm9kZSwgZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4rXG4rXHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KHF1ZXVlLCBxdWV1ZV9zZWVuKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJ0eC1jb25maWc6IHF1ZXVlICV1IGRlc2NyaWJlZCB0d2ljZVxcblwiLFxuK1x0XHRcdFx0XHQgICAgIHF1ZXVlKTtcbitcbitcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocW5vZGUsIFwieGxueCxkbWEtY2hhbm5lbC1udW1cIiwgXHUwMDI2Y2hhbik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJ0eC1jb25maWc6IHF1ZXVlICV1IG1pc3NpbmcgeGxueCxkbWEtY2hhbm5lbC1udW1cXG5cIixcbitcdFx0XHRcdFx0ICAgICBxdWV1ZSk7XG4rXG4rXHRcdGlmIChjaGFuIFx1MDAzZT0gVFNOX01BWF9UWF9RVUVVRSB8fCAhKHR4X3ByZXNlbnQgXHUwMDI2IEJJVChjaGFuKSkpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidHgtY29uZmlnOiBxdWV1ZSAldSBtYXBzIHRvIGNoYW5uZWwgJXUgbm90IHByZXNlbnQgaW4gZG1hLW5hbWVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgcXVldWUsIGNoYW4pO1xuK1xuK1x0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFuLCBjaGFuX3NlZW4pKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcInR4LWNvbmZpZzogY2hhbm5lbCAldSBhbHJlYWR5IGFzc2lnbmVkIHRvIGFub3RoZXIgcXVldWVcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjaGFuKTtcbitcbitcdFx0ZXAtXHUwMDNldHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9IGNoYW47XG4rXHRcdGNvdW50Kys7XG4rXHR9XG4rXG4rXHRpZiAoY291bnQgIT0gZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgICBcInR4LWNvbmZpZzogZGVzY3JpYmVkICV1IHF1ZXVlcyBidXQgZXhwZWN0ZWQgJXVcXG5cIixcbitcdFx0XHRcdCAgICAgY291bnQsIGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfY291bnRfZG1hX3F1ZXVlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqb3V0X3R4LCB1MzIgKm91dF9yeCxcbitcdFx0XHQgICAgICAgdTE2ICp0eF9wcmVzZW50LCB1MzIgKnJ4X2NoYW5fbnVtKVxuK3tcbitcdHUzMiB0eCA9IDAsIHJ4ID0gMDtcbitcdHUxNiByeF9wcmVzZW50ID0gMDtcbitcdGludCBuLCBpLCByZXQ7XG4rXG4rXHRuID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkZXYtXHUwMDNlb2Zfbm9kZSwgXCJkbWEtbmFtZXNcIik7XG4rXHRpZiAobiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBuLCBcImZhaWxlZCB0byByZWFkIGRtYS1uYW1lc1xcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkrKykge1xuK1x0XHRjb25zdCBjaGFyICpuYW1lO1xuK1x0XHRzaXplX3QgcGxlbjtcbitcdFx0dTMyIGlkeDtcbitcbitcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgoZGV2LVx1MDAzZW9mX25vZGUsIFwiZG1hLW5hbWVzXCIsXG4rXHRcdFx0XHRcdFx0ICAgIGksIFx1MDAyNm5hbWUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxcblwiLCBpKTtcbitcbitcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwidHhfY2hhblwiKTtcbitcdFx0aWYgKHBsZW4pIHtcbitcdFx0XHRpZiAoa3N0cnRvdTMyKG5hbWUgKyBwbGVuLCAxMCwgXHUwMDI2aWR4KSB8fFxuK1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1RYX1FVRVVFKVxuK1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHRcdCAgICAgXCJpbnZhbGlkIFRYIGNoYW5uZWwgbmFtZSAlc1xcblwiLFxuK1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4rXG4rXHRcdFx0aWYgKCp0eF9wcmVzZW50IFx1MDAyNiBCSVQoaWR4KSlcbitcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0XHQgICAgIFwiZHVwbGljYXRlIFRYIGNoYW5uZWwgJXNcXG5cIixcbitcdFx0XHRcdFx0XHQgICAgIG5hbWUpO1xuK1xuK1x0XHRcdCp0eF9wcmVzZW50IHw9IEJJVChpZHgpO1xuK1x0XHRcdHR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwicnhfY2hhblwiKTtcbitcdFx0aWYgKHBsZW4pIHtcbitcdFx0XHRpZiAoa3N0cnRvdTMyKG5hbWUgKyBwbGVuLCAxMCwgXHUwMDI2aWR4KSB8fFxuK1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1JYX1FVRVVFKVxuK1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHRcdCAgICAgXCJpbnZhbGlkIFJYIGNoYW5uZWwgbmFtZSAlc1xcblwiLFxuK1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4rXG4rXHRcdFx0aWYgKHJ4X3ByZXNlbnQgXHUwMDI2IEJJVChpZHgpKVxuK1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHRcdCAgICAgXCJkdXBsaWNhdGUgUlggY2hhbm5lbCAlc1xcblwiLFxuK1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4rXG4rXHRcdFx0cnhfcHJlc2VudCB8PSBCSVQoaWR4KTtcbitcdFx0XHRyeF9jaGFuX251bVtyeF0gPSBpZHg7XG4rXHRcdFx0cngrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwidW5yZWNvZ25pc2VkIGRtYS1uYW1lcyBlbnRyeSAlc1xcblwiLCBuYW1lKTtcbitcdH1cbitcbitcdGlmICghdHgpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJubyBUWCBjaGFubmVscyBpbiBkbWEtbmFtZXNcXG5cIik7XG4rXG4rXHRpZiAoIXJ4KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwibm8gUlggY2hhbm5lbHMgaW4gZG1hLW5hbWVzXFxuXCIpO1xuK1xuK1x0Km91dF90eCA9IHR4O1xuK1x0Km91dF9yeCA9IHJ4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVwX2ZyZWVfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UUzsgaSsrKSB7XG4rXHRcdGlmIChlcC1cdTAwM2Vwb3J0X21kW2ldKSB7XG4rXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2ZXAtXHUwMDNlcG9ydF9tZFtpXS1cdTAwM2Vkc3QpO1xuK1x0XHRcdGVwLVx1MDAzZXBvcnRfbWRbaV0gPSBOVUxMO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfYWxsb2NfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gVFNOX1RVU0VSX1BPUlRfTUFDMTsgaSBcdTAwM2M9IFRTTl9UVVNFUl9QT1JUX01BQzI7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZDtcbitcbitcdFx0bWQgPSBtZXRhZGF0YV9kc3RfYWxsb2MoMCwgTUVUQURBVEFfSFdfUE9SVF9NVVgsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIW1kKSB7XG4rXHRcdFx0ZXBfZnJlZV9wb3J0X21kKGVwKTtcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuK1x0XHRtZC1cdTAwM2V1LnBvcnRfaW5mby5wb3J0X2lkID0gaTtcbitcdFx0ZXAtXHUwMDNlcG9ydF9tZFtpXSA9IG1kO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeGxueF90c25fZXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHR1MzIgcnhfY2hhbl9udW1bVFNOX01BWF9SWF9RVUVVRV07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqdHhjZmdfbnA7XG4rXHR1MzIgbnVtX3R4LCBudW1fcngsIG51bV9wcmlvO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICppcF9ucDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcDtcbitcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbitcdHUxNiB0eF9wcmVzZW50ID0gMDtcbitcdGludCByZXQ7XG4rXHRpbnQgaTtcbitcbitcdHJldCA9IGVwX2NvdW50X2RtYV9xdWV1ZXMoZGV2LCBcdTAwMjZudW1fdHgsIFx1MDAyNm51bV9yeCwgXHUwMDI2dHhfcHJlc2VudCwgcnhfY2hhbl9udW0pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlwX25wID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIWlwX25wKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsIFwibWlzc2luZyBwYXJlbnQgSVAgbm9kZVxcblwiKTtcbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGlwX25wLCBcInhsbngsbnVtLXByaW9yaXRpZXNcIiwgXHUwMDI2bnVtX3ByaW8pO1xuK1x0b2Zfbm9kZV9wdXQoaXBfbnApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwibWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXFxuXCIpO1xuK1xuK1x0aWYgKG51bV90eCAhPSBudW1fcHJpbylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgICBcIlRYIGNoYW5uZWwgY291bnQgJXUgbXVzdCBlcXVhbCBudW0tcHJpb3JpdGllcyAldVxcblwiLFxuK1x0XHRcdFx0ICAgICBudW1fdHgsIG51bV9wcmlvKTtcbitcbitcdG5kZXYgPSBhbGxvY19uZXRkZXZfbXFzKHNpemVvZigqZXApLCBcImVwJWRcIiwgTkVUX05BTUVfRU5VTSxcbitcdFx0XHRcdGV0aGVyX3NldHVwLCBudW1fdHgsIG51bV9yeCk7XG4rXHRpZiAoIW5kZXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0U0VUX05FVERFVl9ERVYobmRldiwgZGV2KTtcbitcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmVwX25ldGRldl9vcHM7XG4rXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2ZXBfZXRodG9vbF9vcHM7XG4rXHRuZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRztcbitcbitcdGVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRlcC1cdTAwM2VuZGV2ID0gbmRldjtcbitcdGVwLVx1MDAzZWRldiA9IGRldjtcbitcdGVwLVx1MDAzZW51bV90eF9xdWV1ZXMgPSBudW1fdHg7XG4rXHRlcC1cdTAwM2VudW1fcnhfcXVldWVzID0gbnVtX3J4O1xuK1x0ZXAtXHUwMDNlbWF4X2ZybV9zaXplID0gVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkU7XG4rXHRtZW1jcHkoZXAtXHUwMDNlcnhfY2hhbl9udW0sIHJ4X2NoYW5fbnVtLCBudW1fcnggKiBzaXplb2YoKnJ4X2NoYW5fbnVtKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUU05fTUFYX1RYX1FVRVVFOyBpKyspXG4rXHRcdGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSA9IFRTTl9ETUFfQ0hfSU5WQUxJRDtcbitcbitcdHR4Y2ZnX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZW9mX25vZGUsIFwidHgtcXVldWVzLWNvbmZpZ1wiKTtcbitcdGlmICghdHhjZmdfbnApIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJtaXNzaW5nIHR4LXF1ZXVlcy1jb25maWcgbm9kZVxcblwiKTtcbitcdFx0Z290byBlcnJfZnJlZV9uZGV2O1xuK1x0fVxuK1x0cmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7XG4rXHRvZl9ub2RlX3B1dCh0eGNmZ19ucCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4rXG4rXHQvKlxuK1x0ICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG9cbitcdCAqIGdhdGUgb24gdGhlIE1DRE1BIHByb3ZpZGVyIGJlaW5nIGJvdW5kLiBUaGlzIGtlZXBzIC1FUFJPQkVfREVGRVIgaW5cbitcdCAqIHRoZSBwcm9iZSBwYXRoLCBzbyB0aGUgbmV0ZGV2IGlzIG9ubHkgcmVnaXN0ZXJlZCBvbmNlIHRoZSBwcm92aWRlciBpc1xuK1x0ICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuXG4rXHQgKi9cbitcdHJldCA9IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKGVwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmRldjtcbitcbitcdHJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtXHUwMDNlb2Zfbm9kZSwgbWFjX2FkZHIpO1xuK1x0aWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmRldjtcbitcdH0gZWxzZSBpZiAoIXJldCBcdTAwMjZcdTAwMjYgaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpIHtcbitcdFx0ZXRoX2h3X2FkZHJfc2V0KG5kZXYsIG1hY19hZGRyKTtcbitcdH0gZWxzZSB7XG4rXHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbitcdFx0ZGV2X2luZm8oZGV2LCBcIm5vIHZhbGlkIE1BQyBpbiBEVCwgdXNpbmcgcmFuZG9tIGFkZHJlc3MgJXBNXFxuXCIsXG4rXHRcdFx0IG5kZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0fVxuK1xuK1x0cmV0ID0gZXBfYWxsb2NfcG9ydF9tZChlcCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIHBlci1wb3J0IG1ldGFkYXRhXFxuXCIpO1xuK1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4rXHR9XG4rXG4rXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlcCk7XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldCBkZXZpY2VcXG5cIik7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfZnJlZV9tZDpcbitcdGVwX2ZyZWVfcG9ydF9tZChlcCk7XG4rZXJyX2ZyZWVfbmRldjpcbitcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgeGxueF90c25fZXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4re1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuK1xuK1x0aWYgKCFlcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXYoZXAtXHUwMDNlbmRldik7XG4rXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuK1x0ZnJlZV9uZXRkZXYoZXAtXHUwMDNlbmRldik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhsbnhfdHNuX2VwX29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJ4bG54LHRzbi1lcC1tYWNcIiB9LFxuK1x0eyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4bG54X3Rzbl9lcF9vZl9tYXRjaCk7XG4rXG4rc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXIgPSB7XG4rXHQucHJvYmVcdD0geGxueF90c25fZXBfcHJvYmUsXG4rXHQucmVtb3ZlXHQ9IHhsbnhfdHNuX2VwX3JlbW92ZSxcbitcdC5kcml2ZXJcdD0ge1xuK1x0XHQubmFtZVx0XHQ9IERSSVZFUl9OQU1FLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGVcdD0geGxueF90c25fZXBfb2ZfbWF0Y2gsXG4rXHR9LFxuK307XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kMzNhMDBkZDZkMTVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jXG5AQCAtMCwwICsxLDEwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rLypcbisgKiBUaW1lIFNlbnNpdGl2ZSBOZXR3b3JraW5nIChUU04pIEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlci5cbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInhpbGlueF90c24uaFwiXG4rXG4rI2RlZmluZSBUU05fTlVNX0NMT0NLU1x0XHQ2XG4rXG4rLyoqXG4rICogc3RydWN0IHhsbnhfdHNuX2lwIC0gd3JhcHBlci1wcml2YXRlIElQIHN0YXRlXG4rICogQGNsa3M6IGJ1bGstbWFuYWdlZCBJUCBjbG9ja3NcbisgKi9cbitzdHJ1Y3QgeGxueF90c25faXAge1xuK1x0c3RydWN0IGNsa19idWxrX2RhdGEgY2xrc1tUU05fTlVNX0NMT0NLU107XG4rfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRzbl9jbGtfbmFtZXNbVFNOX05VTV9DTE9DS1NdID0ge1xuK1x0XCJndHhcIixcbitcdFwiZ3R4OTBcIixcbitcdFwiaG9zdF9yeGZpZm9cIixcbitcdFwiaG9zdF90eGZpZm9cIixcbitcdFwicmVmXCIsXG4rXHRcInNfYXhpXCIsXG4rfTtcbitcbitzdGF0aWMgdm9pZCB0c25fY2xrX2J1bGtfZGlzYWJsZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9pcCAqdyA9IGRhdGE7XG4rXG4rXHRjbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShUU05fTlVNX0NMT0NLUywgdy1cdTAwM2VjbGtzKTtcbit9XG4rXG4rc3RhdGljIGludCB0c25faXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCB4bG54X3Rzbl9pcCAqdztcbitcdGludCByZXQ7XG4rXG4rXHR3ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp3KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXcpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFRTTl9OVU1fQ0xPQ0tTOyBpKyspXG4rXHRcdHctXHUwMDNlY2xrc1tpXS5pZCA9IHRzbl9jbGtfbmFtZXNbaV07XG4rXG4rXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldChkZXYsIFRTTl9OVU1fQ0xPQ0tTLCB3LVx1MDAzZWNsa3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGdldCBjbG9ja3NcXG5cIik7XG4rXG4rXHRyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShUU05fTlVNX0NMT0NLUywgdy1cdTAwM2VjbGtzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBlbmFibGUgY2xvY2tzXFxuXCIpO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgdHNuX2Nsa19idWxrX2Rpc2FibGUsIHcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRzbl9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwieGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLTMuMFwiIH0sXG4rXHR7IH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRzbl9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHNuX2RyaXZlciA9IHtcbitcdC5wcm9iZSA9IHRzbl9pcF9wcm9iZSxcbitcdC5kcml2ZXIgPSB7XG4rXHRcdC5uYW1lID0gXCJ4aWxpbngtdHNuXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IHRzbl9vZl9tYXRjaCxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IHRzbl9kcml2ZXJzW10gPSB7XG4rXHRcdTAwMjZ0c25fZHJpdmVyLFxuK1x0XHUwMDI2eGxueF90c25fZXBfZHJpdmVyLFxuK307XG4rXG4rc3RhdGljIGludCBfX2luaXQgeGxueF90c25faW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiBwbGF0Zm9ybV9yZWdpc3Rlcl9kcml2ZXJzKHRzbl9kcml2ZXJzLCBBUlJBWV9TSVpFKHRzbl9kcml2ZXJzKSk7XG4rfVxuK21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpO1xuK1xuK3N0YXRpYyB2b2lkIF9fZXhpdCB4bG54X3Rzbl9leGl0KHZvaWQpXG4re1xuK1x0cGxhdGZvcm1fdW5yZWdpc3Rlcl9kcml2ZXJzKHRzbl9kcml2ZXJzLCBBUlJBWV9TSVpFKHRzbl9kcml2ZXJzKSk7XG4rfVxuK21vZHVsZV9leGl0KHhsbnhfdHNuX2V4aXQpO1xuK1xuK01PRFVMRV9BVVRIT1IoXCJTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIkFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjM2LjA0MDk2ODU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4OTMzNDk5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBYaWxpbnggVFNOIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoLCBpbnRyb2R1Y2luZyB0aGUgWGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXIsIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJIHNlZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgKGAueWFtbGAgYW5kIGBNQUlOVEFJTkVSU2ApLCBLY29uZmlnIGFuZCBNYWtlZmlsZSBhZGRpdGlvbnMgaW5kaWNhdGluZyBhIG5ldyBgdHNuL2Agc3ViZGlyZWN0b3J5LCBhbmQgdGhlIGNvcmUgZHJpdmVyIGZpbGVzIChgLmNgIGFuZCBgLmhgKS4gVGhpcyBzdWdnZXN0cyBhIG5ldyBmdW5jdGlvbmFsIGJsb2NrLCB3aGljaCBpcyBwcm9taXNpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBPcGVuRmlybXdhcmUvRGV2aWNldHJlZSAoXCJ4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCIgYW5kIFwieGxueCx0c24tZXAtbWFjXCIpLiBJdCdzICpkZWZpbml0ZWx5KiBpbnRlcmVzdGluZywgYnV0IG15IGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGBPRl9BRERSRVNTYCBhbmQgYFhJTElOWF9ETUFgLiBUaGF0J3MgdGhlIGtleS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eSB3aXRoaW4gc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ2FuIEkgdHJpZ2dlciB0aGUgYHhsbnhfdHNuX2VwX2RyaXZlcmAgb3IgYHRzbl9kcml2ZXJgIGluIFFFTVUgKGFtZDY0KSBpbiBHQ0U/IERvZXMgUUVNVSBlbXVsYXRlIFhpbGlueCBUU04gTUFDIG9yIFhpbGlueCBETUE/IE9yIGlzIHRoaXMsIGFzIEkgc3VzcGVjdCwgaGFyZHdhcmUtZGVwZW5kZW50LCBwb3NzaWJseSBhbiBGUEdBL1p5bnFNUCBTb0Mtc3BlY2lmaWMgY29tcG9uZW50PyBJZiBpdCdzIHRoZSBsYXR0ZXIsIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBzaWduaWZpY2FudCBodXJkbGUuXG5cbkkgbmVlZCB0byBleHBsb3JlIGhvdyBwbGF0Zm9ybSBkZXZpY2VzLCBlc3BlY2lhbGx5IHRob3NlIERULWJhc2VkLCBiZWhhdmUgaW4geDg2XzY0IGVudmlyb25tZW50cy4gQ2FuIERldmljZSBUcmVlIG92ZXJsYXlzIGluc3RhbnRpYXRlIHRoaXM/IFdpbGwgSSBuZWVkIHRvIGVtdWxhdGUgdGhlIHBsYXRmb3JtIG9yIHVzZSBhIGRlZGljYXRlZCBoYXJkd2FyZSBzZXR1cD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBvdGhlciBYaWxpbnggRXRoZXJuZXQgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSBPRi0gb3IgRFQtYmFzZWQsIGFyZSBoYW5kbGVkLiBIYXMgYW55b25lIHN1Y2Nlc3NmdWxseSBmdXp6ZWQgc2ltaWxhciBkcml2ZXJzP1xuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJcyB0aGlzIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGhhcmR3YXJlIGlzbid0IGVtdWxhdGVkIG9yIGlmIHRoZSBoYXJkd2FyZSBpcyBuZWNlc3NhcnkuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIFwidmVuZG9yLXNwZWNpZmljLi4ucmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIG1ha2VzIG1lIHdvcnJpZWQuIEkgYW0gY29uY2VybmVkIHRoaXMgaXMgc2ltaWxhciB0byB0aGF0LiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUsIHRoaXMgaXNuJ3QgYW4gXCJ1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aFwiLCBpLmUuIHRoYXQgaXQgaXNuJ3Qgb25seSBjYWxsZWQgZHVyaW5nIHBoeXNpY2FsIGhvdC11bnBsdWcuXG5cbk15IG5leHQgc3RlcHMgaW52b2x2ZSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBmb3IgYFhJTElOWF9ETUFgLCBgT0ZfQUREUkVTU2AsIGFuZCBvdGhlciBYaWxpbnggRXRoZXJuZXQgZHJpdmVyIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZW4gY2hlY2tpbmcgd2hhdCdzIGZlYXNpYmxlIGdpdmVuIHRoZSB0eXBpY2FsIHN5emthbGxlciBsaW1pdGF0aW9ucy4gSXMgaXQgYSAqZ28qIG9yIGEgKm5vLWdvKj9cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo0MS45MzQzMjE1NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDI0NTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWElMSU5YX0RNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS9LY29uZmlnPTY3ND1jb25maWcgWEdFTkVfRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTY4Mi1cXG5kcml2ZXJzL2RtYS9LY29uZmlnOjY4Mzpjb25maWcgWElMSU5YX0RNQVxcbmRyaXZlcnMvZG1hL0tjb25maWctNjg0LVxcdHRyaXN0YXRlIFxcXCJYaWxpbnggQVhJIERNQVMgRW5naW5lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo0My41ODQ1NzI3MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzIwNDM4NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRE1BIENvbmZpZ3VyYXRpb24gQ29uY2VybioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIERNQSBjb25maWd1cmF0aW9uLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBkcml2ZXJzL2RtYS9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCdzIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDY4My4gVGhhdCBhcmVhIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgRE1BIGlzc3VlIEknbSBkZWFsaW5nIHdpdGguIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkIHRoZXJlLiBJIGJldCBpdCB3aWxsIHByb3ZpZGUgdGhlIGtleSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo0NS4zMDUwMTUwMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0aGVscFxcbiA2ODE6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFQTSBYLUdlbmUgU29DIERNQSBlbmdpbmUuXFxuIDY4MjpcXHRcXG4gNjgzOlxcdGNvbmZpZyBYSUxJTlhfRE1BXFxuIDY4NDpcXHRcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEFYSSBETUFTIEVuZ2luZVxcXCJcXG4gNjg1OlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuIDY4NjpcXHRcXHRzZWxlY3QgRE1BX0VOR0lORVxcbiA2ODc6XFx0XFx0aGVscFxcbiA2ODg6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgWGlsaW54IEFYSSBWRE1BIFNvZnQgSVAuXFxuIDY4OTpcXHRcXG4gNjkwOlxcdFxcdCAgQVhJIFZETUEgZW5naW5lIHByb3ZpZGVzIGhpZ2gtYmFuZHdpZHRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzXFxuIDY5MTpcXHRcXHQgIGJldHdlZW4gbWVtb3J5IGFuZCBBWEk0LVN0cmVhbSB2aWRlbyB0eXBlIHRhcmdldFxcbiA2OTI6XFx0XFx0ICBwZXJpcGhlcmFscyBpbmNsdWRpbmcgcGVyaXBoZXJhbHMgd2hpY2ggc3VwcG9ydCBBWEk0LVxcbiA2OTM6XFx0XFx0ICBTdHJlYW0gVmlkZW8gUHJvdG9jb2wuICBJdCBoYXMgdHdvIHN0cmVhbSBpbnRlcmZhY2VzL1xcbiA2OTQ6XFx0XFx0ICBjaGFubmVscywgTWVtb3J5IE1hcHBlZCB0byBTdHJlYW0gKE1NMlMpIGFuZCBTdHJlYW0gdG9cXG4gNjk1OlxcdFxcdCAgTWVtb3J5IE1hcHBlZCAoUzJNTSkgZm9yIHRoZSBkYXRhIHRyYW5zZmVycy5cXG4gNjk2OlxcdFxcdCAgQVhJIENETUEgZW5naW5lIHByb3ZpZGVzIGhpZ2gtYmFuZHdpZHRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzXFxuIDY5NzpcXHRcXHQgIGJldHdlZW4gYSBtZW1vcnktbWFwcGVkIHNvdXJjZSBhZGRyZXNzIGFuZCBhIG1lbW9yeS1tYXBwZWRcXG4gNjk4OlxcdFxcdCAgZGVzdGluYXRpb24gYWRkcmVzcy5cXG4gNjk5OlxcdFxcdCAgQVhJIERNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggb25lIGRpbWVuc2lvbmFsIGRpcmVjdFxcbiA3MDA6XFx0XFx0ICBtZW1vcnkgYWNjZXNzIGJldHdlZW4gbWVtb3J5IGFuZCBBWEk0LVN0cmVhbSB0YXJnZXQgcGVyaXBoZXJhbHMuXFxuIDcwMTpcXHRcXHQgIEFYSSBNQ0RNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggZGlyZWN0IG1lbW9yeSBhY2Nlc3NcXG4gNzAyOlxcdFxcdCAgYmV0d2VlbiBtZW1vcnkgYW5kIEFYSTQtU3RyZWFtIHRhcmdldCBwZXJpcGhlcmFscy4gSXQgcHJvdmlkZXNcXG4gNzAzOlxcdFxcdCAgdGhlIHNjYXR0ZXIgZ2F0aGVyIGludGVyZmFjZSB3aXRoIG11bHRpcGxlIGNoYW5uZWxzIGluZGVwZW5kZW50XFxuIDcwNDpcXHRcXHQgIGNvbmZpZ3VyYXRpb24gc3VwcG9ydC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6MTc6NDUuMzA1MTQwNTM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NjY2MjgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQ09ORklHX09GX0FERFJFU1NgLiBDYW4gd2UgcmVhbGlzdGljYWxseSBlbmFibGUgYENPTkZJR19PRl9BRERSRVNTYCBvbiBhbiB4ODZfNjQgYXJjaGl0ZWN0dXJlPyBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24uIFRvIGFuc3dlciB0aGF0IGRlZmluaXRpdmVseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgYE9GX0FERFJFU1NgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbnMgYW5kIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBhcHBsaWNhYmlsaXR5IGluIHRoaXMgY29udGV4dC4gTGV0J3MgZ2V0IHRvIHRoZSByb290IG9mIGl0cyBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAyMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6MTc6NDcuMDYxODA2NDE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTExMjg1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9GX0FERFJFU1NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTgzPWNvbmZpZyBPRl9EWU5BTUlDXFxuLS1cXG5kcml2ZXJzL29mL0tjb25maWctOTAtXFxuZHJpdmVycy9vZi9LY29uZmlnOjkxOmNvbmZpZyBPRl9BRERSRVNTXFxuZHJpdmVycy9vZi9LY29uZmlnLTkyLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6MTc6NDguNzcyOTM5NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUwMzI4NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL29mL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgYXJvdW5kIGxpbmUgOTEsIG9yIGF0IGxlYXN0IGluIHRoYXQgdmljaW5pdHkuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHNvbWV0aGluZyByZWxhdGVkIHRvIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24gb3IgcG90ZW50aWFsbHkgYSBzcGVjaWZpYyBkcml2ZXIncyBidWlsZCBvcHRpb25zIG1pZ2h0IGJlIGRlZmluZWQgdGhlcmUuIEl0J3MgYSBodW5jaCBiYXNlZCBvbiBjb21tb24gcGF0dGVybnMgaW4gZW1iZWRkZWQgc3lzdGVtcyBkZXZlbG9wbWVudCwgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0LiBMZXQncyBzZWUgd2hhdCBsaWVzIHdpdGhpbiB0aG9zZSBsaW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo1MC41MjMyNzEwNzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9vZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0IyBIYXJkbHkgYW55IHBsYXRmb3JtcyBuZWVkIHRoaXMuICBJdCBpcyBzYWZlIHRvIHNlbGVjdCwgYnV0IG9ubHkgZG8gc28gaWYgeW91XFxuICA4MjpcXHQjIG5lZWQgaXQuXFxuICA4MzpcXHRjb25maWcgT0ZfRFlOQU1JQ1xcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZHluYW1pYyBkZXZpY2UgdHJlZXNcXFwiIGlmIE9GX1VOSVRURVNUXFxuICA4NTpcXHRcXHRzZWxlY3QgT0ZfS09CSlxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBPbiBzb21lIHBsYXRmb3JtcywgdGhlIGRldmljZSB0cmVlIGNhbiBiZSBtYW5pcHVsYXRlZCBhdCBydW50aW1lLlxcbiAgODg6XFx0XFx0ICBXaGlsZSB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IG9uIHN1Y2ggcGxhdGZvcm1zLCB5b3VcXG4gIDg5OlxcdFxcdCAgY2FuIGVuYWJsZSBpdCBtYW51YWxseSB0byBpbXByb3ZlIGRldmljZSB0cmVlIHVuaXQgdGVzdCBjb3ZlcmFnZS5cXG4gIDkwOlxcdFxcbiAgOTE6XFx0Y29uZmlnIE9GX0FERFJFU1NcXG4gIDkyOlxcdFxcdGRlZl9ib29sIHlcXG4gIDkzOlxcdFxcdGRlcGVuZHMgb24gIVNQQVJDIFxcdTAwMjZcXHUwMDI2IChIQVNfSU9NRU0gfHwgVU1MKVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRjb25maWcgT0ZfSVJRXFxuICA5NjpcXHRcXHRkZWZfYm9vbCB5XFxuICA5NzpcXHRcXHRkZXBlbmRzIG9uICFTUEFSQyBcXHUwMDI2XFx1MDAyNiBJUlFfRE9NQUlOXFxuICA5ODpcXHRcXG4gIDk5OlxcdGNvbmZpZyBPRl9SRVNFUlZFRF9NRU1cXG4gMTAwOlxcdFxcdGRlZl9ib29sIE9GX0VBUkxZX0ZMQVRUUkVFXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGNvbmZpZyBPRl9SRVNPTFZFXFxuIDEwMzpcXHRcXHRib29sXFxuIDEwNDpcXHRcXG4gMTA1OlxcdGNvbmZpZyBPRl9PVkVSTEFZXFxuIDEwNjpcXHRcXHRib29sIFxcXCJEZXZpY2UgVHJlZSBvdmVybGF5c1xcXCJcXG4gMTA3OlxcdFxcdHNlbGVjdCBPRl9EWU5BTUlDXFxuIDEwODpcXHRcXHRzZWxlY3QgT0ZfRkxBVFRSRUVcXG4gMTA5OlxcdFxcdHNlbGVjdCBPRl9SRVNPTFZFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjUwLjUyMzM0MDczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjI5NzU2MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGB4bG54X3RzbmAgY29tcG9uZW50IGlzIHNvbWV0aGluZyB3ZSBjYW4gZWZmZWN0aXZlbHkgZnV6ei4gRmlyc3QsIGlzIGl0IGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIGhhcmR3YXJlPyAgWWVzLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYW4gQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgb24gYW4gRlBHQSBvciBTb0MuIFNvLCBpdCBkZWZpbml0ZWx5IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlOiBhbiBGUEdBIGFuZCByZWxhdGVkIElQIGJsb2NrcywgaW5jbHVkaW5nIFhpbGlueCdzIE1DRE1BLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlIGRyaXZlciBkb2VzLiBGcm9tIHRoZSBjb2RlLCBpdCBwcm9iZXMgZm9yIGNsb2NrcyBhbmQgcG9wdWxhdGVzIHN1YmRldmljZXMgYW5kIGFsc28gcmVxdWVzdHMgYW5kIGNvbmZpZ3VyZXMgRE1BIGNoYW5uZWxzLCBpbnRlcmFjdGluZyB3aXRoIHRoZSBYaWxpbnggVkRNQS9NQ0RNQS5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB0aGlzIGhhcmR3YXJlIGJlIGVtdWxhdGVkIGluIG91ciBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgUUVNVSBvciBHQ0UgVk1zIG9uIGFtZDY0PyBOby4gVGhlcmUncyBubyBlbXVsYXRpb24gb2YgdGhpcyBYaWxpbngtc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgdGhlIFRTTiBGUEdBIE1BQyBvciBNQ0RNQSwgaW4gdGhvc2UgZW52aXJvbm1lbnRzLlxuXG5MZXQncyBjb25zdWx0IHRoZSBzeXprYWxsZXIgY3JpdGVyaWEgcmVnYXJkaW5nIHdoZW4gKm5vdCogdG8gZnV6ei4gIEl0J3MgY2xlYXIgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiB0aGF0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBmYWxsIHVuZGVyIHRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5IGFuZCB0aGF0IHN1Y2ggZHJpdmVycyBzaG91bGRuJ3QgYmUgZnV6emVkLiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQhXG5cblNvLCBkb2VzIHRoaXMgZHJpdmVyIGludGVyYWN0IHdpdGggYW55IHZpcnR1YWwgYnVzZXM/IE5vLiBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBwcm92aWRlZCBieSBYaWxpbnguIEl0J3Mgbm90IHJlYWNoYWJsZSB2aWEgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBvciBzb2NrZXRzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIHNvbGUgZXh0ZW50IG9mIHRoZSBjaGFuZ2UuIFRoZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgbG9vayBsaWtlIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGFuZCBNYWtlZmlsZSB1cGRhdGVzIGFsb25nc2lkZSB0aGUgbmV3IGRyaXZlciBmaWxlczogYHhsbnhfdHNuLmhgLCBgeGxueF90c25fZXAuY2AsIGB4bG54X3Rzbl9tYWluLmNgLiBFdmVyeXRoaW5nIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL2AgZGlyZWN0b3J5LCBpbmNsdWRpbmcgRGV2aWNlIFRyZWUgYmluZGluZ3MuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBkcml2ZXIgaXMgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGhhcmR3YXJlIHVuYXZhaWxhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBpdCdzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgdmVuZG9yLXNwZWNpZmljIGFuZCByZXF1aXJlcyBhbiBGUEdBL1NvQy4gIFRodXMsIHRoaXMgY29kZSBpcyBub3Qgd29ydGggZnV6emluZy4gSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcuIEkgd2lsbCBzZXQgdGhlIGZpZWxkcyByZXF1aXJlZCBieSBgc2V0LXJlc3VsdHNgIGFzOlxuLSBgV29ydGhGdXp6aW5nYDogZmFsc2Vcbi0gYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gKFRpbWUtU2Vuc2l0aXZlIE5ldHdvcmtpbmcpIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChgZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9gKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXG4tIGBGb2N1c1N5bWJvbHNgOiBbXSAoZW1wdHkgbGlzdClcbi0gYEVuYWJsZUNvbmZpZ3NgOiBbXSAoZW1wdHkgbGlzdClcblxuTm93LCBsZXQncyBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MjksIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjU3Ljc1MzEwMDQ3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuLykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo1Ny43NTMxMzQ4NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowsq8lj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 22:16:18 +0000 UTC FinishedAt: 2026-09-08 22:17:58 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjdkYWRlZTBiNjNlZGNkYzkzNTNlNGI2MWY4NGZlYTRkNDNjYjMyNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMjI6MTc6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi40ZTY1ZDE3MTBkYTc4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXG5AQCAtMCwwICYjNDM7MSwzNjQgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWwjXG4mIzQzOyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuJiM0MztcbiYjNDM7dGl0bGU6IFhpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDXG4mIzQzO1xuJiM0MztkZXNjcmlwdGlvbjpcbiYjNDM7ICBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGltcGxlbWVudHMgSUVFRSA4MDIuMSBUaW1lLVNlbnNpdGl2ZVxuJiM0MzsgIE5ldHdvcmtpbmcgKFRTTikgc3RhbmRhcmRzIGFuZCBwcm92aWRlcyBsb3ctbGF0ZW5jeSBuZXR3b3JrIGNvbm5lY3Rpdml0eVxuJiM0MzsgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydFxuJiM0MzsgIHN3aXRjaCwgd2l0aCB0d28gcG9ydHMgY29ubmVjdGVkIHRvIHRoZSBleHRlcm5hbCBuZXR3b3JrIGFuZCBvbmUgcG9ydFxuJiM0MzsgIGNvbm5lY3RlZCB0byBhbiBpbnRlcm5hbCBlbmRwb2ludC4gSXQgYWxzbyBzdXBwb3J0cyBHTUlJL1JHTUlJIGludGVyZmFjZXNcbiYjNDM7ICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdFxuJiM0MzsgIDEwMCBNYi9zIGFuZCAxIEdiL3Mgc3BlZWRzLlxuJiM0MztcbiYjNDM7bWFpbnRhaW5lcnM6XG4mIzQzOyAgLSBTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXG4mIzQzOyAgLSBOYWdhZGhlZXJhaiBSb3R0ZWxhIFx1MDAzY25hZ2FkaGVlcmFqLnJvdHRlbGFAYW1kLmNvbVx1MDAzZVxuJiM0MztcbiYjNDM7cHJvcGVydGllczpcbiYjNDM7ICBjb21wYXRpYmxlOlxuJiM0MzsgICAgY29uc3Q6IHhsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjBcbiYjNDM7XG4mIzQzOyAgY2xvY2tzOlxuJiM0MzsgICAgaXRlbXM6XG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUWCBjbG9jayBmb3IgdHJhbnNtaXR0ZXIgbG9naWMgYW5kIFJUQ1xuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBHVFggOTAtZGVncmVlIHBoYXNlIHNoaWZ0ZWQgY2xvY2sgZm9yIFJHTUlJXG4mIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEhvc3QgUlggRklGTyBjbG9ja1xuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFRYIEZJRk8gY2xvY2tcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogUmVmZXJlbmNlIGNsb2NrIGZvciBJREVMQVkgY29udHJvbFxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBBWEktTGl0ZSByZWdpc3RlciBpbnRlcmZhY2UgY2xvY2tcbiYjNDM7XG4mIzQzOyAgY2xvY2stbmFtZXM6XG4mIzQzOyAgICBpdGVtczpcbiYjNDM7ICAgICAgLSBjb25zdDogZ3R4XG4mIzQzOyAgICAgIC0gY29uc3Q6IGd0eDkwXG4mIzQzOyAgICAgIC0gY29uc3Q6IGhvc3RfcnhmaWZvXG4mIzQzOyAgICAgIC0gY29uc3Q6IGhvc3RfdHhmaWZvXG4mIzQzOyAgICAgIC0gY29uc3Q6IHJlZlxuJiM0MzsgICAgICAtIGNvbnN0OiBzX2F4aVxuJiM0MztcbiYjNDM7ICByYW5nZXM6IHRydWVcbiYjNDM7XG4mIzQzOyAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OlxuJiM0MzsgICAgY29uc3Q6IDFcbiYjNDM7XG4mIzQzOyAgJiMzOTsjc2l6ZS1jZWxscyYjMzk7OlxuJiM0MzsgICAgY29uc3Q6IDFcbiYjNDM7XG4mIzQzOyAgeGxueCxudW0tcHJpb3JpdGllczpcbiYjNDM7ICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuJiM0MzsgICAgbWluaW11bTogMlxuJiM0MzsgICAgbWF4aW11bTogOFxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIE51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgKHByaW9yaXRpZXMpIGNvbmZpZ3VyZWQgaW4gdGhlIElQLlxuJiM0MzsgICAgICBUaGlzIGlzIGFuIElQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mXG4mIzQzOyAgICAgIHByaW9yaXR5IHF1ZXVlcyBhdmFpbGFibGUgZm9yIFFvUyBzY2hlZHVsaW5nLiBUcmFmZmljIGNsYXNzZXMgbWFwIHRvXG4mIzQzOyAgICAgIElFRUUgODAyLjFRIHByaW9yaXR5IGxldmVscyAoMC03KS5cbiYjNDM7XG4mIzQzO3BhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgIFwmIzM0O15ldGhlcm5ldEBbMC05YS1mXSYjNDM7JFwmIzM0OzpcbiYjNDM7ICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbiYjNDM7ICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBFbmRwb2ludCBNQUMgc3ViLW5vZGUuIFByb3ZpZGVzIHRoZSBob3N0LXNpZGUgZGF0YSBwYXRoIHRocm91Z2ggdGhlXG4mIzQzOyAgICAgIERNQSBjaGFubmVscyBkZXNjcmliZWQgYnkgaXRzIGRtYXMgLyBkbWEtbmFtZXMuXG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiB4bG54LHRzbi1lcC1tYWNcbiYjNDM7XG4mIzQzOyAgICAgIHJlZzpcbiYjNDM7ICAgICAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICAgICAgZG1hczpcbiYjNDM7ICAgICAgICBtaW5JdGVtczogMlxuJiM0MzsgICAgICAgIG1heEl0ZW1zOiAxNlxuJiM0MztcbiYjNDM7ICAgICAgZG1hLW5hbWVzOlxuJiM0MzsgICAgICAgIG1pbkl0ZW1zOiAyXG4mIzQzOyAgICAgICAgbWF4SXRlbXM6IDE2XG4mIzQzOyAgICAgICAgaXRlbXM6XG4mIzQzOyAgICAgICAgICBwYXR0ZXJuOiBcJiMzNDteKHR4fHJ4KV9jaGFuWzAtN10kXCYjMzQ7XG4mIzQzOyAgICAgICAgZGVzY3JpcHRpb246IHxcbiYjNDM7ICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICYjMzk7ZG1hcyYjMzk7LCBvbmUgcGVyIERNQSBjaGFubmVsIGFuZCBpblxuJiM0MzsgICAgICAgICAgdGhlIHNhbWUgb3JkZXIuIFRYIGNoYW5uZWwgbmFtZXMgdXNlIFwmIzM0O3R4X2NoYW5cdTAwM2NOXHUwMDNlXCYjMzQ7IGFuZCBSWCBjaGFubmVsXG4mIzQzOyAgICAgICAgICBuYW1lcyB1c2UgXCYjMzQ7cnhfY2hhblx1MDAzY05cdTAwM2VcJiMzNDssIHdoZXJlIE4gaXMgMC4uNy4gRXhhbXBsZTogXCYjMzQ7dHhfY2hhbjBcJiMzNDssXG4mIzQzOyAgICAgICAgICBcJiMzNDt0eF9jaGFuMVwmIzM0OywgLi4uLCBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDssIC4uLi5cbiYjNDM7XG4mIzQzOyAgICAgIHR4LXF1ZXVlcy1jb25maWc6XG4mIzQzOyAgICAgICAgdHlwZTogb2JqZWN0XG4mIzQzOyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzOyAgICAgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICBUWCBxdWV1ZSBjb25maWd1cmF0aW9uIG5vZGUgdGhhdCBtYXBzIElQIHByaW9yaXR5IHF1ZXVlcyB0b1xuJiM0MzsgICAgICAgICAgRE1BIFRYIGNoYW5uZWxzLiBUaGUgVFNOIElQIHN1cHBvcnRzIG11bHRpcGxlIHByaW9yaXR5IHF1ZXVlcyBmb3JcbiYjNDM7ICAgICAgICAgIFFvUyBzY2hlZHVsaW5nLCBhbmQgZWFjaCBxdWV1ZSBjYW4gYmUgY29ubmVjdGVkIHRvIGEgc3BlY2lmaWMgRE1BXG4mIzQzOyAgICAgICAgICBjaGFubmVsLiBUaGlzIG1hcHBpbmcgZGVmaW5lcyB3aGljaCBETUEgVFggY2hhbm5lbCBpcyB1c2VkIHRvXG4mIzQzOyAgICAgICAgICB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIHByaW9yaXR5IHF1ZXVlLiBGb3IgZXhhbXBsZSwgcXVldWUwXG4mIzQzOyAgICAgICAgICB3aXRoIHhsbngsZG1hLWNoYW5uZWwtbnVtIHNldCB0byA1IG1lYW5zIHByaW9yaXR5IHF1ZXVlIDAgdXNlc1xuJiM0MzsgICAgICAgICAgdHhfY2hhbjUgZm9yIGRhdGEgdHJhbnNmZXIuXG4mIzQzO1xuJiM0MzsgICAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgXCYjMzQ7XnF1ZXVlWzAtN10kXCYjMzQ7OlxuJiM0MzsgICAgICAgICAgICB0eXBlOiBvYmplY3RcbiYjNDM7ICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgICAgICBFYWNoIHN1Ym5vZGUgcmVwcmVzZW50cyBhIHByaW9yaXR5IHF1ZXVlLiBUaGVcbiYjNDM7ICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bSBwcm9wZXJ0eSBzcGVjaWZpZXMgd2hpY2ggRE1BIFRYIGNoYW5uZWxcbiYjNDM7ICAgICAgICAgICAgICAodHhfY2hhbjAgdG8gdHhfY2hhbjcpIGlzIGNvbm5lY3RlZCB0byB0aGlzIHF1ZXVlIGZvclxuJiM0MzsgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBwYWNrZXRzLlxuJiM0MzsgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICAgIHhsbngsZG1hLWNoYW5uZWwtbnVtOlxuJiM0MzsgICAgICAgICAgICAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4mIzQzOyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgICAgICAgICAgRE1BIGNoYW5uZWwgdGhhdCB0cmFuc21pdHMgdGhpcyBwcmlvcml0eSBxdWV1ZSwgZ2l2ZW4gYXNcbiYjNDM7ICAgICAgICAgICAgICAgICAgdGhlIE4gb2YgdGhlIHR4X2NoYW5OIGVudHJ5IGluIGRtYS1uYW1lcy5cbiYjNDM7ICAgICAgICAgICAgICAgIG1pbmltdW06IDBcbiYjNDM7ICAgICAgICAgICAgICAgIG1heGltdW06IDdcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgICAgICAgIC0geGxueCxkbWEtY2hhbm5lbC1udW1cbiYjNDM7XG4mIzQzOyAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgLSBjb21wYXRpYmxlXG4mIzQzOyAgICAgIC0gcmVnXG4mIzQzOyAgICAgIC0gZG1hc1xuJiM0MzsgICAgICAtIGRtYS1uYW1lc1xuJiM0MzsgICAgICAtIHR4LXF1ZXVlcy1jb25maWdcbiYjNDM7XG4mIzQzOyAgXCYjMzQ7XnN3aXRjaEBbMC05YS1mXSYjNDM7JFwmIzM0OzpcbiYjNDM7ICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2RzYS9kc2EueWFtbCMvJGRlZnMvZXRoZXJuZXQtcG9ydHNcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBUaHJlZS1wb3J0IEV0aGVybmV0IHN3aXRjaCBzdWItbm9kZS4gQ29udGFpbnMgdGhlIHN3aXRjaCBmYWJyaWNcbiYjNDM7ICAgICAgcmVnaXN0ZXIgd2luZG93IGFuZCB0aGUgdHdvIHBlci1NQUMgcmVnaXN0ZXIgd2luZG93cy4gRWFjaCBwZXItTUFDXG4mIzQzOyAgICAgIHdpbmRvdyBob3VzZXMgYW4gTURJTyBjb250cm9sbGVyIGFuZCBhIFBUUCByZWdpc3RlciBibG9jayBhdCBmaXhlZFxuJiM0MzsgICAgICBvZmZzZXRzLiBUaGUgSVAmIzM5O3MgcGVyLU1BQyBhbmQgUFRQLXRpbWVyIGludGVycnVwdHMgYXJlIGV4cG9zZWQgaGVyZS5cbiYjNDM7XG4mIzQzOyAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBjb21wYXRpYmxlOlxuJiM0MzsgICAgICAgIGNvbnN0OiB4bG54LHRzbi1zd2l0Y2hcbiYjNDM7XG4mIzQzOyAgICAgIHJlZzpcbiYjNDM7ICAgICAgICBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gZGVzY3JpcHRpb246IFN3aXRjaCBmYWJyaWMgcmVnaXN0ZXIgd2luZG93XG4mIzQzOyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBNQUMxIHJlZ2lzdGVyIHdpbmRvdyAoaW5jbHVkZXMgTURJTyBhbmQgUFRQKVxuJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMiByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUClcbiYjNDM7XG4mIzQzOyAgICAgIHJlZy1uYW1lczpcbiYjNDM7ICAgICAgICBpdGVtczpcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHN3aXRjaFxuJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjMVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjMlxuJiM0MztcbiYjNDM7ICAgICAgaW50ZXJydXB0czpcbiYjNDM7ICAgICAgICBtaW5JdGVtczogN1xuJiM0MzsgICAgICAgIG1heEl0ZW1zOiA3XG4mIzQzO1xuJiM0MzsgICAgICBpbnRlcnJ1cHQtbmFtZXM6XG4mIzQzOyAgICAgICAgaXRlbXM6XG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfcnhfbWFjMVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzFcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IG1hY19pcnFfbWFjMVxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3RpbWVyXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfcnhfbWFjMlxuJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzJcbiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IG1hY19pcnFfbWFjMlxuJiM0MztcbiYjNDM7ICAgICAgbWRpby0xOlxuJiM0MzsgICAgICAgICRyZWY6IC9zY2hlbWFzL25ldC9tZGlvLnlhbWwjXG4mIzQzOyAgICAgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMxLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMVxuJiM0MzsgICAgICAgICAgcmVnLW5hbWVzIHdpbmRvdy5cbiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzsgICAgICBtZGlvLTI6XG4mIzQzOyAgICAgICAgJHJlZjogL3NjaGVtYXMvbmV0L21kaW8ueWFtbCNcbiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgIE1ESU8gYnVzIGNvbnRyb2xsZXIgZm9yIE1BQzIuIFJlZ2lzdGVycyByZXNpZGUgaW5zaWRlIHRoZSBtYWMyXG4mIzQzOyAgICAgICAgICByZWctbmFtZXMgd2luZG93LlxuJiM0MzsgICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczpcbiYjNDM7ICAgICAgXCYjMzQ7XihldGhlcm5ldC0pP3BvcnRzJFwmIzM0OzpcbiYjNDM7ICAgICAgICB0eXBlOiBvYmplY3RcbiYjNDM7ICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzOyAgICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICAgICYjMzk7I2FkZHJlc3MtY2VsbHMmIzM5OzpcbiYjNDM7ICAgICAgICAgICAgY29uc3Q6IDFcbiYjNDM7XG4mIzQzOyAgICAgICAgICAmIzM5OyNzaXplLWNlbGxzJiMzOTs6XG4mIzQzOyAgICAgICAgICAgIGNvbnN0OiAwXG4mIzQzO1xuJiM0MzsgICAgICAgICAgcG9ydEAwOlxuJiM0MzsgICAgICAgICAgICB0eXBlOiBvYmplY3RcbiYjNDM7ICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlXG4mIzQzOyAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgICAgIENQVSBwb3J0LiBXaXJlZCBpbnRlcm5hbGx5IHRvIHRoZSBlbmRwb2ludCBNQUMgc2libGluZy5cbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgICAgICAgY29uc3Q6IDBcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgcGh5LW1vZGU6XG4mIzQzOyAgICAgICAgICAgICAgICBjb25zdDogaW50ZXJuYWxcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgICAgICAgIC0gZXRoZXJuZXRcbiYjNDM7XG4mIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgICBcJiMzNDtecG9ydEBbMS0yXSRcJiMzNDs6XG4mIzQzOyAgICAgICAgICAgIHR5cGU6IG9iamVjdFxuJiM0MzsgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWVcbiYjNDM7ICAgICAgICAgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgICAgICAgICAgRXh0ZXJuYWwgRXRoZXJuZXQgcG9ydC4gcG9ydEAxIGlzIHdpcmVkIHRvIE1BQzEgYW5kIHJlYWNoZWRcbiYjNDM7ICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBtZGlvLTEgYnVzLCBwb3J0QDIgaXMgd2lyZWQgdG8gTUFDMiBhbmQgcmVhY2hlZFxuJiM0MzsgICAgICAgICAgICAgIHRocm91Z2ggdGhlIG1kaW8tMiBidXMuXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICAgIHJlZzpcbiYjNDM7ICAgICAgICAgICAgICAgIGVudW06IFsxLCAyXVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICBwaHktbW9kZTpcbiYjNDM7ICAgICAgICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgICAgICAgIC0gZ21paVxuJiM0MzsgICAgICAgICAgICAgICAgICAtIHJnbWlpXG4mIzQzOyAgICAgICAgICAgICAgICAgIC0gcmdtaWktaWRcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOlxuJiM0MzsgICAgICAgICAgICAgIC0gcmVnXG4mIzQzOyAgICAgICAgICAgICAgLSBwaHktbW9kZVxuJiM0MzsgICAgICAgICAgICAgIC0gcGh5LWhhbmRsZVxuJiM0MztcbiYjNDM7ICAgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAgIC0gcG9ydEAwXG4mIzQzOyAgICAgICAgICAtIHBvcnRAMVxuJiM0MzsgICAgICAgICAgLSBwb3J0QDJcbiYjNDM7XG4mIzQzOyAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgLSBjb21wYXRpYmxlXG4mIzQzOyAgICAgIC0gcmVnXG4mIzQzOyAgICAgIC0gcmVnLW5hbWVzXG4mIzQzOyAgICAgIC0gaW50ZXJydXB0c1xuJiM0MzsgICAgICAtIGludGVycnVwdC1uYW1lc1xuJiM0MztcbiYjNDM7ICAgIG9uZU9mOlxuJiM0MzsgICAgICAtIHJlcXVpcmVkOiBbcG9ydHNdXG4mIzQzOyAgICAgIC0gcmVxdWlyZWQ6IFtldGhlcm5ldC1wb3J0c11cbiYjNDM7XG4mIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4mIzQzO1xuJiM0MzthZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gY2xvY2tzXG4mIzQzOyAgLSBjbG9jay1uYW1lc1xuJiM0MzsgIC0geGxueCxudW0tcHJpb3JpdGllc1xuJiM0MzsgIC0gcmFuZ2VzXG4mIzQzOyAgLSAmIzM5OyNhZGRyZXNzLWNlbGxzJiMzOTtcbiYjNDM7ICAtICYjMzk7I3NpemUtY2VsbHMmIzM5O1xuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICB0c25AODAwNDAwMDAge1xuJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCYjMzQ7O1xuJiM0MzsgICAgICAgIGNsb2NrcyA9IFx1MDAzY1x1MDAyNm1pc2NfY2xrXzJcdTAwM2UsIFx1MDAzY1x1MDAyNm1pc2NfY2xrXzJcdTAwM2UsIFx1MDAzY1x1MDAyNm1pc2NfY2xrXzFcdTAwM2UsIFx1MDAzY1x1MDAyNm1pc2NfY2xrXzFcdTAwM2UsXG4mIzQzOyAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2bWlzY19jbGtfM1x1MDAzZSwgXHUwMDNjXHUwMDI2bWlzY19jbGtfMFx1MDAzZTtcbiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9IFwmIzM0O2d0eFwmIzM0OywgXCYjMzQ7Z3R4OTBcJiMzNDssIFwmIzM0O2hvc3RfcnhmaWZvXCYjMzQ7LCBcJiMzNDtob3N0X3R4Zmlmb1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3JlZlwmIzM0OywgXCYjMzQ7c19heGlcJiMzNDs7XG4mIzQzOyAgICAgICAgeGxueCxudW0tcHJpb3JpdGllcyA9IFx1MDAzYzhcdTAwM2U7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICByYW5nZXMgPSBcdTAwM2MweDAgMHg4MDA0MDAwMCAweDQwMDAwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBlcF9tYWM6IGV0aGVybmV0QDE2MDAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3hsbngsdHNuLWVwLW1hY1wmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxNjAwMCAweGEwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGRtYXMgPSBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAxXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyXHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgM1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgNFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgNVx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDZcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDdcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE2XHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMTdcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE4XHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAxOVx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDIwXHUwMDNlLCBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyMVx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMjJcdTAwM2UsXG4mIzQzOyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyM1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgZG1hLW5hbWVzID0gXCYjMzQ7dHhfY2hhbjBcJiMzNDssIFwmIzM0O3R4X2NoYW4xXCYjMzQ7LCBcJiMzNDt0eF9jaGFuMlwmIzM0OywgXCYjMzQ7dHhfY2hhbjNcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3R4X2NoYW40XCYjMzQ7LCBcJiMzNDt0eF9jaGFuNVwmIzM0OywgXCYjMzQ7dHhfY2hhbjZcJiMzNDssIFwmIzM0O3R4X2NoYW43XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtyeF9jaGFuMFwmIzM0OywgXCYjMzQ7cnhfY2hhbjFcJiMzNDssIFwmIzM0O3J4X2NoYW4yXCYjMzQ7LCBcJiMzNDtyeF9jaGFuM1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7cnhfY2hhbjRcJiMzNDssIFwmIzM0O3J4X2NoYW41XCYjMzQ7LCBcJiMzNDtyeF9jaGFuNlwmIzM0OywgXCYjMzQ7cnhfY2hhbjdcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHR4LXF1ZXVlcy1jb25maWcge1xuJiM0MzsgICAgICAgICAgICAgICAgcXVldWUwIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDdcdTAwM2U7IH07XG4mIzQzOyAgICAgICAgICAgICAgICBxdWV1ZTEgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4Nlx1MDAzZTsgfTtcbiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHg1XHUwMDNlOyB9O1xuJiM0MzsgICAgICAgICAgICAgICAgcXVldWUzIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDRcdTAwM2U7IH07XG4mIzQzOyAgICAgICAgICAgICAgICBxdWV1ZTQgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4M1x1MDAzZTsgfTtcbiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNSB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHgyXHUwMDNlOyB9O1xuJiM0MzsgICAgICAgICAgICAgICAgcXVldWU2IHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDFcdTAwM2U7IH07XG4mIzQzOyAgICAgICAgICAgICAgICBxdWV1ZTcgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4MFx1MDAzZTsgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICBzd2l0Y2hAMzgwMDAge1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7eGxueCx0c24tc3dpdGNoXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2MweDM4MDAwIDB4ODAwMFx1MDAzZSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgXHUwMDNjMHgwMDAwMCAweDE0MDAwXHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICBcdTAwM2MweDIwMDAwIDB4MTQwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHJlZy1uYW1lcyA9IFwmIzM0O3N3aXRjaFwmIzM0OywgXCYjMzQ7bWFjMVwmIzM0OywgXCYjMzQ7bWFjMlwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSBcdTAwM2NcdTAwMjZpbnRjXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHRzID0gXHUwMDNjMCAyXHUwMDNlLCBcdTAwM2MyIDJcdTAwM2UsIFx1MDAzYzQgMlx1MDAzZSwgXHUwMDNjNiAyXHUwMDNlLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjMSAyXHUwMDNlLCBcdTAwM2MzIDJcdTAwM2UsIFx1MDAzYzUgMlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gXCYjMzQ7cHRwX3J4X21hYzFcJiMzNDssIFwmIzM0O3B0cF90eF9tYWMxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDttYWNfaXJxX21hYzFcJiMzNDssIFwmIzM0O3B0cF90aW1lclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7cHRwX3J4X21hYzJcJiMzNDssIFwmIzM0O3B0cF90eF9tYWMyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDttYWNfaXJxX21hYzJcJiMzNDs7XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtZGlvLTEge1xuJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgcGh5MDogZXRoZXJuZXQtcGh5QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgbWRpby0yIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgIHBoeTE6IGV0aGVybmV0LXBoeUAxIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBvcnRzIHtcbiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBwb3J0QDAge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSBcdTAwM2NcdTAwMjZlcF9tYWNcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDtpbnRlcm5hbFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gXHUwMDNjMTAwMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICAgICAgcG9ydEAxIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHBoeS1oYW5kbGUgPSBcdTAwM2NcdTAwMjZwaHkwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCYjMzQ7cmdtaWktaWRcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgICAgIHBvcnRAMiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2cGh5MVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwmIzM0O3JnbWlpLWlkXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICB9O1xuJiM0MzsgICAgfTtcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBiMjNmYjZmMmY0ZWY0Li5mZjk0ZTMxNGVlYjFmIDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjk5MTEsNiAmIzQzOzI5OTExLDE0IEBAIE06XHRIYXJzaCBKYWluIFx1MDAzY2guamFpbkBhbWQuY29tXHUwMDNlXG4gUzpcdE1haW50YWluZWRcbiBGOlx0ZHJpdmVycy9jaGFyL2h3X3JhbmRvbS94aWxpbngtdHJuZy5jXG4gXG4mIzQzO1hJTElOWCBUU04gRU5EUE9JTlQgRVRIRVJORVQgTUFDIERSSVZFUlxuJiM0MztNOlx0TmFnYWRoZWVyYWogUm90dGVsYSBcdTAwM2NuYWdhZGhlZXJhai5yb3R0ZWxhQGFtZC5jb21cdTAwM2VcbiYjNDM7TTpcdFNyaW5pdmFzIE5lZWxpIFx1MDAzY3NyaW5pdmFzLm5lZWxpQGFtZC5jb21cdTAwM2VcbiYjNDM7TDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiYjNDM7UzpcdE1haW50YWluZWRcbiYjNDM7RjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWxcbiYjNDM7RjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vXG4mIzQzO1xuIFhJTElOWCBVQVJUTElURSBTRVJJQUwgRFJJVkVSXG4gTTpcdFBldGVyIEtvcnNnYWFyZCBcdTAwM2NqYWNtZXRAc3Vuc2l0ZS5ka1x1MDAzZVxuIEw6XHRsaW51eC1zZXJpYWxAdmdlci5rZXJuZWwub3JnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1xuaW5kZXggNzUwMjIxNGNjN2Q1MC4uYzZkNzA0YzhkM2Q0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1xuQEAgLTQxLDQgJiM0Mzs0MSw1IEBAIGNvbmZpZyBYSUxJTlhfTExfVEVNQUNcbiBcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFhpbGlueCAxMC8xMDAvMTAwMCBMb2NhbExpbmsgVEVNQUNcbiBcdCAgY29yZSB1c2VkIGluIFhpbGlueCBTcGFydGFuIGFuZCBWaXJ0ZXggRlBHQXNcbiBcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1wmIzM0O1xuIGVuZGlmICMgTkVUX1ZFTkRPUl9YSUxJTlhcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbmluZGV4IDdkN2RjMTc3MTQyM2UuLjY2ZGFiMDEyNjUwYjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZVxuQEAgLTgsMyAmIzQzOzgsNCBAQCBvYmotJChDT05GSUdfWElMSU5YX0xMX1RFTUFDKSAmIzQzOz0gbGxfdGVtYWMub1xuIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUub1xuIHhpbGlueF9lbWFjLW9ianMgOj0geGlsaW54X2F4aWVuZXRfbWFpbi5vIHhpbGlueF9heGllbmV0X21kaW8ub1xuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICYjNDM7PSB4aWxpbnhfZW1hYy5vXG4mIzQzO29iai0kKENPTkZJR19YSUxJTlhfVFNOKSAmIzQzOz0gdHNuL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5MmYxNzY5NDQwNDJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMTYgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBYSUxJTlhfVFNOXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7WGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIE9GX0FERFJFU1NcbiYjNDM7XHRkZXBlbmRzIG9uIFhJTElOWF9ETUFcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQU1EL1hpbGlueCBUaW1lLVNlbnNpdGl2ZSBOZXR3b3JraW5nXG4mIzQzO1x0ICAoVFNOKSBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAuIEl0IHByb3ZpZGVzIHRoZSB3cmFwcGVyIGRldmljZVxuJiM0MztcdCAgYW5kIHRoZSBlbmRwb2ludCBNQUMgdGhhdCBjb25uZWN0cyB0aGUgSVAgdG8gdGhlIGhvc3QgQ1BVLiBUaGVcbiYjNDM7XHQgIHRocmVlLXBvcnQgc3dpdGNoIGlzIHN1cHBvcnRlZCBieSB0aGUgY29tcGFuaW9uIERTQSBkcml2ZXIuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjU4ODY4MjhiMzg2ZjRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDIgQEBcbiYjNDM7b2JqLSQoQ09ORklHX1hJTElOWF9UU04pICYjNDM7PSB4aWxpbnhfdHNuLm9cbiYjNDM7eGlsaW54X3Rzbi15IDo9IHhpbGlueF90c25fbWFpbi5vIHhpbGlueF90c25fZXAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMDc1N2UyMmQxZmQxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c24uaFxuQEAgLTAsMCAmIzQzOzEsMTUgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIGRyaXZlciwgc2hhcmVkIGRlZmluaXRpb25zLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1hJTElOWF9UU05fSFxuJiM0MzsjZGVmaW5lIF9YSUxJTlhfVFNOX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzO1xuJiM0MztleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXI7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX1hJTElOWF9UU05fSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9lcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYjdkYTI2NTIxZDAxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuY1xuQEAgLTAsMCAmIzQzOzEsMTAzNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY2lyY19idWYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEveGlsaW54X2RtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hZW5naW5lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX25ldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjYXR0ZXJsaXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdGltZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF90c24uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBEUklWRVJfTkFNRVx0XHRcdFwmIzM0O3hpbGlueF90c25fZXBcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVFNOX0RNQV9DSF9JTlZBTElEXHRcdDB4RkZVXG4mIzQzOyNkZWZpbmUgVFNOX01BWF9UWF9RVUVVRVx0XHQ4XG4mIzQzOyNkZWZpbmUgVFNOX01BWF9SWF9RVUVVRVx0XHQ4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRTTl9NQVhfVkxBTl9GUkFNRV9TSVpFXHRcdChFVEhfREFUQV9MRU4gJiM0MzsgVkxBTl9FVEhfSExFTiAmIzQzOyBcXFxuJiM0MztcdFx0XHRcdFx0IEVUSF9GQ1NfTEVOKVxuJiM0MztcbiYjNDM7I2RlZmluZSBUWF9CRF9OVU1fREVGQVVMVFx0XHQ2NFxuJiM0MzsjZGVmaW5lIFJYX0JEX05VTV9ERUZBVUxUXHRcdDEyOFxuJiM0MztcbiYjNDM7I2RlZmluZSBFUF9SWF9SRUZJTExfUkVUUllcdFx0bXNlY3NfdG9famlmZmllcygxMClcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBETUEgZGVzY3JpcHRvciBzaWRlYmFuZCBzdGF0dXMgd29yZCBwYWNrcyBUSUQvVERFU1QvVFVTRVIgdG9nZXRoZXI7XG4mIzQzOyAqIFRVU0VSIG9jY3VwaWVzIHRoZSBsb3cgYnl0ZSwgVElEL1RERVNUIHNpdCBpbiB0aGUgdXBwZXIgYml0cy5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVFNOX1RVU0VSX01BU0tcdFx0XHRHRU5NQVNLKDcsIDApXG4mIzQzOy8qIFRVU0VSIElucHV0IFBvcnQgSUQgZmllbGQgKGJpdHMgWzU6NF0gb2YgdGhlIFRVU0VSIGZpZWxkKSAqL1xuJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0lEX01BU0tcdFx0R0VOTUFTSyg1LCA0KVxuJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0VQXHRcdDB4MFxuJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX01BQzFcdFx0MHgxXG4mIzQzOyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfTUFDMlx0XHQweDJcbiYjNDM7XG4mIzQzOy8qIFNpemVkIHRvIGluZGV4IHBvcnRfbWRbXSBieSBUVVNFUiBwb3J0X2lkICgxIG9yIDIsIHNsb3QgMCB1bnVzZWQpICovXG4mIzQzOyNkZWZpbmUgWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UU1x0KFRTTl9UVVNFUl9QT1JUX01BQzIgJiM0MzsgMSlcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgLSBza2IgY29udGFpbmVyIGZvciBlYWNoIGluLWZsaWdodCBETUEgZGVzY3JpcHRvclxuJiM0MzsgKiBAc2dsOiBzY2F0dGVyLWdhdGhlciBsaXN0IGJhY2tpbmcgdGhlIERNQSBtYXBwaW5nXG4mIzQzOyAqIEBkZXNjOiBkbWFlbmdpbmUgZGVzY3JpcHRvciBoYW5kbGVcbiYjNDM7ICogQGRtYV9hZGRyZXNzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzZ2wgZW50cnkgKFJYIHBhdGgpXG4mIzQzOyAqIEBza2I6IFNLQiBvd25pbmcgdGhlIGJ1ZmZlclxuJiM0MzsgKiBAc2dfbGVuOiBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiBAc2dsIChUWCBwYXRoKVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIHtcbiYjNDM7XHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dsW01BWF9TS0JfRlJBR1MgJiM0MzsgMV07XG4mIzQzO1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjO1xuJiM0MztcdGRtYV9hZGRyX3QgZG1hX2FkZHJlc3M7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRpbnQgc2dfbGVuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAtIG9uZSBETUEgY2hhbm5lbCBhbmQgaXRzIFNLQiByaW5nXG4mIzQzOyAqIEBza2JfcmluZzogcGVyLXNsb3QgU0tCIGRlc2NyaXB0b3JzXG4mIzQzOyAqIEBlcDogcG9pbnRlciBiYWNrIHRvIHRoZSBvd25pbmcgRVAgaW5zdGFuY2VcbiYjNDM7ICogQGNoYW46IGRtYWVuZ2luZSBjaGFubmVsIGhhbmRsZVxuJiM0MzsgKiBAZG1hX2RldjogZGV2aWNlIHVzZWQgZm9yIERNQSBtYXBwaW5nICh0aGUgRE1BIGVuZ2luZSwgbm90IHRoZSBFUClcbiYjNDM7ICogQHJpbmdfaGVhZDogcHJvZHVjZXIgaW5kZXhcbiYjNDM7ICogQHJpbmdfdGFpbDogY29uc3VtZXIgaW5kZXhcbiYjNDM7ICogQHJpbmdfc2l6ZTogbnVtYmVyIG9mIHNsb3RzIGluIEBza2JfcmluZ1xuJiM0MzsgKiBAcnhfbG9jazogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGJldHdlZW4gdGhlIFJYIGNhbGxiYWNrIGFuZCB0aGUgcmVmaWxsIHRpbWVyXG4mIzQzOyAqIEB0eF9sb2NrOiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgYmV0d2VlbiB4bWl0IGFuZCBUWCBjb21wbGV0aW9uXG4mIzQzOyAqIEByeF9yZWZpbGxfdGltZXI6IHJldHJpZXMgUlggcmVmaWxsIGFmdGVyIGFuIGFsbG9jYXRpb24gZmFpbHVyZVxuJiM0MzsgKiBAaXNfdHg6IHRydWUgZm9yIFRYIGNoYW5uZWxzLCBmYWxzZSBmb3IgUlhcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiB7XG4mIzQzO1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICoqc2tiX3Jpbmc7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcDtcbiYjNDM7XHRzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZG1hX2RldjtcbiYjNDM7XHR1MzIgcmluZ19oZWFkO1xuJiM0MztcdHUzMiByaW5nX3RhaWw7XG4mIzQzO1x0dTMyIHJpbmdfc2l6ZTtcbiYjNDM7XHRzcGlubG9ja190IHJ4X2xvY2s7XHQvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgKi9cbiYjNDM7XHRzcGlubG9ja190IHR4X2xvY2s7XHQvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgKi9cbiYjNDM7XHRzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWZpbGxfdGltZXI7XG4mIzQzO1x0Ym9vbCBpc190eDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgeGxueF90c25fZXAgLSBFUCBNQUMgcHJpdmF0ZSBkYXRhLCBlbWJlZGRlZCBpbiBuZXRfZGV2aWNlIHByaXYgYXJlYVxuJiM0MzsgKiBAbmRldjogdGhlIGNvbmR1aXQgbmV0ZGV2IChcJiMzNDtlcDBcJiMzNDsgZm9yIHRoZSBmaXJzdCBJUCBpbnN0YW5jZSlcbiYjNDM7ICogQGRldjogYmFja2luZyBkZXZpY2VcbiYjNDM7ICogQG51bV90eF9xdWV1ZXM6IG51bWJlciBvZiBUWCBETUEgY2hhbm5lbHMgKG9uZSBwZXIgcHJpb3JpdHkpXG4mIzQzOyAqIEBudW1fcnhfcXVldWVzOiBudW1iZXIgb2YgUlggRE1BIGNoYW5uZWxzXG4mIzQzOyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLVx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcbiYjNDM7ICogQHJ4X2NoYW5fbnVtOiBSWCByaW5nIGluZGV4IC1cdTAwM2UgcGh5c2ljYWwgRE1BIGNoYW5uZWwgbnVtYmVyXG4mIzQzOyAqIEBtYXhfZnJtX3NpemU6IG1heGltdW0gZnJhbWUgc2l6ZSBhY2NlcHRlZCBvbiBSWFxuJiM0MzsgKiBAdHhfY2hhbnM6IGFycmF5IG9mIFRYIGNoYW5uZWxzIChzaXplIEBudW1fdHhfcXVldWVzKVxuJiM0MzsgKiBAcnhfY2hhbnM6IGFycmF5IG9mIFJYIGNoYW5uZWxzIChzaXplIEBudW1fcnhfcXVldWVzKVxuJiM0MzsgKiBAY2xvc2luZzogc2V0IGluIG5kb19zdG9wIHNvIHRoZSBSWCBjb21wbGV0aW9uIGNhbGxiYWNrIHN0b3BzIHJlLWFybWluZ1xuJiM0MzsgKiBAcG9ydF9tZDogcGVyLVRVU0VSLXBvcnQgTUVUQURBVEFfSFdfUE9SVF9NVVggZW50cmllcyBhdHRhY2hlZCBvbiBSWCxcbiYjNDM7ICpcdGluZGV4ZWQgYnkgcG9ydF9pZCAoMSBmb3IgTUFDMSwgMiBmb3IgTUFDMilcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB4bG54X3Rzbl9lcCB7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0MztcdHUzMiBudW1fdHhfcXVldWVzO1xuJiM0MztcdHUzMiBudW1fcnhfcXVldWVzO1xuJiM0MztcdHUzMiB0eF9kbWFfY2hhbl9tYXBbVFNOX01BWF9UWF9RVUVVRV07XG4mIzQzO1x0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xuJiM0MztcdHUzMiBtYXhfZnJtX3NpemU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnR4X2NoYW5zO1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnJ4X2NoYW5zO1xuJiM0MztcbiYjNDM7XHRib29sIGNsb3Npbmc7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBtZXRhZGF0YV9kc3QgKnBvcnRfbWRbWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UU107XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqXG4mIzQzO2VwX2dldF9kZXNjKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4sIGludCBpZHgpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geGNoYW4tXHUwMDNlc2tiX3JpbmdbaWR4XTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcF9yeF9zdWJtaXRfZGVzYyhzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkbWFfcnhfZGVzYztcbiYjNDM7XHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0geGNoYW4tXHUwMDNlZXA7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRkbWFfYWRkcl90IGFkZHI7XG4mIzQzO1xuJiM0MztcdHNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi1cdTAwM2VyaW5nX2hlYWQgXHUwMDI2ICh4Y2hhbi1cdTAwM2VyaW5nX3NpemUgLSAxKSk7XG4mIzQzO1x0aWYgKCFza2J1Zl9kbWEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT1NQQztcbiYjNDM7XG4mIzQzO1x0c2tiID0gZGV2X2FsbG9jX3NrYihlcC1cdTAwM2VtYXhfZnJtX3NpemUpO1xuJiM0MztcdGlmICghc2tiKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNnX2luaXRfdGFibGUoc2tidWZfZG1hLVx1MDAzZXNnbCwgMSk7XG4mIzQzO1x0YWRkciA9IGRtYV9tYXBfc2luZ2xlKHhjaGFuLVx1MDAzZWRtYV9kZXYsIHNrYi1cdTAwM2VkYXRhLCBlcC1cdTAwM2VtYXhfZnJtX3NpemUsXG4mIzQzO1x0XHRcdCAgICAgIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0aWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHhjaGFuLVx1MDAzZWRtYV9kZXYsIGFkZHIpKSkge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZXAtXHUwMDNlZGV2LCBcJiMzNDtETUEgbWFwcGluZyBlcnJvciBvbiBSWCBzdWJtaXRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xuJiM0MztcdH1cbiYjNDM7XHRzZ19kbWFfYWRkcmVzcyhza2J1Zl9kbWEtXHUwMDNlc2dsKSA9IGFkZHI7XG4mIzQzO1x0c2dfZG1hX2xlbihza2J1Zl9kbWEtXHUwMDNlc2dsKSA9IGVwLVx1MDAzZW1heF9mcm1fc2l6ZTtcbiYjNDM7XHRkbWFfcnhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLVx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAxLCBETUFfREVWX1RPX01FTSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7XG4mIzQzO1x0aWYgKCFkbWFfcnhfZGVzYylcbiYjNDM7XHRcdGdvdG8gZXJyX3VubWFwX3NrYjtcbiYjNDM7XG4mIzQzO1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IHNrYjtcbiYjNDM7XHRza2J1Zl9kbWEtXHUwMDNlZG1hX2FkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcyhza2J1Zl9kbWEtXHUwMDNlc2dsKTtcbiYjNDM7XHRza2J1Zl9kbWEtXHUwMDNlZGVzYyA9IGRtYV9yeF9kZXNjO1xuJiM0MztcdGRtYV9yeF9kZXNjLVx1MDAzZWNhbGxiYWNrX3BhcmFtID0geGNoYW47XG4mIzQzO1x0ZG1hX3J4X2Rlc2MtXHUwMDNlY2FsbGJhY2tfcmVzdWx0ID0gZXBfZG1hX3J4X2NiO1xuJiM0MztcdHhjaGFuLVx1MDAzZXJpbmdfaGVhZCYjNDM7JiM0Mzs7XG4mIzQzO1x0ZG1hZW5naW5lX3N1Ym1pdChkbWFfcnhfZGVzYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwX3NrYjpcbiYjNDM7XHRkbWFfdW5tYXBfc2luZ2xlKHhjaGFuLVx1MDAzZWRtYV9kZXYsIGFkZHIsIGVwLVx1MDAzZW1heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7ZXJyX2ZyZWVfc2tiOlxuJiM0MztcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgZXBfcnhfcmVmaWxsKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4sIGJvb2wgYXJtX3RpbWVyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGF2YWlsLCBpO1xuJiM0MztcbiYjNDM7XHRndWFyZChzcGlubG9ja19iaCkoXHUwMDI2eGNoYW4tXHUwMDNlcnhfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChSRUFEX09OQ0UoeGNoYW4tXHUwMDNlZXAtXHUwMDNlY2xvc2luZykpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGF2YWlsID0gQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsIFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuJiM0MztcdFx0XHQgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGF2YWlsOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGVwX3J4X3N1Ym1pdF9kZXNjKHhjaGFuKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcbiYjNDM7XHRpZiAoeGNoYW4tXHUwMDNlcmluZ19oZWFkICE9IFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChhcm1fdGltZXIpXG4mIzQzO1x0XHRtb2RfdGltZXIoXHUwMDI2eGNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBqaWZmaWVzICYjNDM7IEVQX1JYX1JFRklMTF9SRVRSWSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfcnhfcmVmaWxsX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiA9IHRpbWVyX2NvbnRhaW5lcl9vZih4Y2hhbiwgdCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICAgcnhfcmVmaWxsX3RpbWVyKTtcbiYjNDM7XG4mIzQzO1x0ZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcbiYjNDM7XHRzaXplX3QgbWV0YV9sZW4sIG1ldGFfbWF4X2xlbiwgcnhfbGVuO1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSB4Y2hhbi1cdTAwM2VlcDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGVwLVx1MDAzZW5kZXY7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHR1MzIgcG9ydF9pZCwgdHVzZXI7XG4mIzQzO1x0dTMyICptZXRhZGF0YTtcbiYjNDM7XG4mIzQzO1x0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVx1MDAzZXJpbmdfdGFpbCBcdTAwMjYgKHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcbiYjNDM7XHRXUklURV9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXHUwMDNlcmluZ190YWlsICYjNDM7IDEpO1xuJiM0MztcdHNrYiA9IHNrYnVmX2RtYS1cdTAwM2Vza2I7XG4mIzQzO1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUoeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVx1MDAzZWRtYV9hZGRyZXNzLFxuJiM0MztcdFx0XHQgZXAtXHUwMDNlbWF4X2ZybV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzdWx0LVx1MDAzZXJlc3VsdCAhPSBETUFfVFJBTlNfTk9FUlJPUikge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZXAtXHUwMDNlZGV2LCBcJiMzNDtSWCBETUEgdHJhbnNmZXIgZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHJlc3VsdC1cdTAwM2VyZXN1bHQpO1xuJiM0MztcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpO1xuJiM0MztcdFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpO1xuJiM0MztcdFx0Z290byBzdWJtaXRfbmV3O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWV0YWRhdGEgPSBkbWFlbmdpbmVfZGVzY19nZXRfbWV0YWRhdGFfcHRyKHNrYnVmX2RtYS1cdTAwM2VkZXNjLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcdTAwMjZtZXRhX2xlbixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXHUwMDI2bWV0YV9tYXhfbGVuKTtcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwobWV0YWRhdGEpKSB7XG4mIzQzO1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0XHRkZXZfd2FybihlcC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgUlggbWV0YWRhdGEgcG9pbnRlclxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4mIzQzO1x0XHRnb3RvIHN1Ym1pdF9uZXc7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBNQ0RNQSBtZXRhZGF0YTogWzBdID0gc3RhdHVzLCBbMV0gPSBzaWRlYmFuZCAoVElEL1RERVNUL1RVU0VSKSwgWzIuLl0gPSBhcHAgKi9cbiYjNDM7XHR0dXNlciA9IG1ldGFkYXRhWzFdIFx1MDAyNiBUU05fVFVTRVJfTUFTSztcbiYjNDM7XHRyeF9sZW4gPSBlcC1cdTAwM2VtYXhfZnJtX3NpemUgLSByZXN1bHQtXHUwMDNlcmVzaWR1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ4X2xlbiBcdTAwM2UgZXAtXHUwMDNlbWF4X2ZybV9zaXplIHx8IHJ4X2xlbiBcdTAwM2MgRVRIX0hMRU4pIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdGRldl93YXJuKGVwLVx1MDAzZWRldiwgXCYjMzQ7SW52YWxpZCBSWCBsZW5ndGggJXp1IChtYXg9JXUsIG1pbj0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IHJ4X2xlbiwgZXAtXHUwMDNlbWF4X2ZybV9zaXplLCBFVEhfSExFTik7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4mIzQzO1x0XHRnb3RvIHN1Ym1pdF9uZXc7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwb3J0X2lkID0gRklFTERfR0VUKFRTTl9UVVNFUl9QT1JUX0lEX01BU0ssIHR1c2VyKTtcbiYjNDM7XHRpZiAocG9ydF9pZCAhPSBUU05fVFVTRVJfUE9SVF9NQUMxIFx1MDAyNlx1MDAyNiBwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzIpIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdGRldl9kYmcoZXAtXHUwMDNlZGV2LCBcJiMzNDtSWCBkcm9wcGluZyB1bmV4cGVjdGVkIFRVU0VSIHBvcnRfaWQ9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cG9ydF9pZCk7XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4mIzQzO1x0XHRnb3RvIHN1Ym1pdF9uZXc7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2JfcHV0KHNrYiwgcnhfbGVuKTtcbiYjNDM7XHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5kZXYpKSB7XG4mIzQzO1x0XHRkc3RfaG9sZChcdTAwMjZlcC1cdTAwM2Vwb3J0X21kW3BvcnRfaWRdLVx1MDAzZWRzdCk7XG4mIzQzO1x0XHRza2JfZHN0X3NldChza2IsIFx1MDAyNmVwLVx1MDAzZXBvcnRfbWRbcG9ydF9pZF0tXHUwMDNlZHN0KTtcbiYjNDM7XHR9XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IG5kZXY7XG4mIzQzO1x0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTtcbiYjNDM7XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbiYjNDM7XHRfX25ldGlmX3J4KHNrYik7XG4mIzQzO1xuJiM0MztcdERFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7XG4mIzQzO1x0REVWX1NUQVRTX0FERChuZGV2LCByeF9ieXRlcywgcnhfbGVuKTtcbiYjNDM7XG4mIzQzO3N1Ym1pdF9uZXc6XG4mIzQzO1x0ZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3R4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4mIzQzO1x0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiYjNDM7XHRpbnQgc2dfbGVuO1xuJiM0MztcdGludCBsZW47XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jaykge1xuJiM0MztcdFx0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sXG4mIzQzO1x0XHRcdFx0XHR4Y2hhbi1cdTAwM2VyaW5nX3RhaWwgXHUwMDI2ICh4Y2hhbi1cdTAwM2VyaW5nX3NpemUgLSAxKSk7XG4mIzQzO1x0XHRpZiAoIXNrYnVmX2RtYSB8fCAhc2tidWZfZG1hLVx1MDAzZXNrYilcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHNrYiA9IHNrYnVmX2RtYS1cdTAwM2Vza2I7XG4mIzQzO1x0XHRzZ2wgPSBza2J1Zl9kbWEtXHUwMDNlc2dsO1xuJiM0MztcdFx0c2dfbGVuID0gc2tidWZfZG1hLVx1MDAzZXNnX2xlbjtcbiYjNDM7XG4mIzQzO1x0XHRkbWFfdW5tYXBfc2coeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuJiM0MztcbiYjNDM7XHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwsIHhjaGFuLVx1MDAzZXJpbmdfdGFpbCAmIzQzOyAxKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5kZXYgPSBza2ItXHUwMDNlZGV2O1xuJiM0MztcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuJiM0MztcdGxlbiA9IHNrYi1cdTAwM2VsZW47XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXN1bHQtXHUwMDNlcmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSkge1xuJiM0MztcdFx0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9lcnJvcnMpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X3BhY2tldHMpO1xuJiM0MztcdFx0REVWX1NUQVRTX0FERChuZGV2LCB0eF9ieXRlcywgbGVuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRuZXRpZl90eHFfY29tcGxldGVkX3dha2UodHhxLCAxLCBsZW4sXG4mIzQzO1x0XHRcdFx0IENJUkNfU1BBQ0UoUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCksXG4mIzQzO1x0XHRcdFx0XHQgICAgeGNoYW4tXHUwMDNlcmluZ19zaXplKSwgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBlcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkbWFfdHhfZGVzYztcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4mIzQzO1x0aW50IHF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbjtcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4mIzQzO1x0aW50IHNnX2xlbiwgbmVudHMsIHJldDtcbiYjNDM7XHRkbWFfY29va2llX3QgY29va2llO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkocXVldWUgXHUwMDNlPSBlcC1cdTAwM2VudW1fdHhfcXVldWVzKSkge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4obmRldiwgXCYjMzQ7SW52YWxpZCBUWCBxdWV1ZSAlZCAobWF4ICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgcXVldWUsIGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuJiM0MztcdFx0Z290byBlcnJfZHJvcF9za2I7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZXAtXHUwMDNldHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9PSBUU05fRE1BX0NIX0lOVkFMSUQpIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdG5ldGRldl93YXJuKG5kZXYsIFwmIzM0O0xvZ2ljYWwgVFggcXVldWUgJWQgaGFzIGludmFsaWQgRE1BIG1hcHBpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHF1ZXVlKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2Ryb3Bfc2tiO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGNoYW4gPSBlcC1cdTAwM2V0eF9jaGFuc1txdWV1ZV07XG4mIzQzO1xuJiM0MztcdHNnX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyAmIzQzOyAxO1xuJiM0MztcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgcXVldWUpO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1x0aWYgKENJUkNfU1BBQ0UoeGNoYW4tXHUwMDNlcmluZ19oZWFkLCBSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSxcbiYjNDM7XHRcdCAgICAgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpIFx1MDAzYz0gMSkge1xuJiM0MztcdFx0bmV0aWZfdHhxX3RyeV9zdG9wKHR4cSxcbiYjNDM7XHRcdFx0XHQgICBDSVJDX1NQQUNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgeGNoYW4tXHUwMDNlcmluZ19zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAyKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4obmRldiwgXCYjMzQ7VFNOIFRYIHJpbmcgZnVsbFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVx1MDAzZXJpbmdfaGVhZCBcdTAwMjYgKHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcbiYjNDM7XHRpZiAoIXNrYnVmX2RtYSkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1xuJiM0MztcdHNnX2luaXRfdGFibGUoc2tidWZfZG1hLVx1MDAzZXNnbCwgc2dfbGVuKTtcbiYjNDM7XHRyZXQgPSBza2JfdG9fc2d2ZWMoc2tiLCBza2J1Zl9kbWEtXHUwMDNlc2dsLCAwLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfZHJvcF9za2I7XG4mIzQzO1x0c2dfbGVuID0gcmV0O1xuJiM0MztcbiYjNDM7XHRuZW50cyA9IGRtYV9tYXBfc2coeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVx1MDAzZXNnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRpZiAoIW5lbnRzKVxuJiM0MztcdFx0Z290byBlcnJfZHJvcF9za2I7XG4mIzQzO1xuJiM0MztcdGRtYV90eF9kZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2coeGNoYW4tXHUwMDNlY2hhbiwgc2tidWZfZG1hLVx1MDAzZXNnbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIG5lbnRzLCBETUFfTUVNX1RPX0RFVixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7XG4mIzQzO1x0aWYgKCFkbWFfdHhfZGVzYylcbiYjNDM7XHRcdGdvdG8gZXJyX3VubWFwX3NnO1xuJiM0MztcbiYjNDM7XHRza2J1Zl9kbWEtXHUwMDNlc2tiID0gc2tiO1xuJiM0MztcdHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4gPSBzZ19sZW47XG4mIzQzO1x0ZG1hX3R4X2Rlc2MtXHUwMDNlY2FsbGJhY2tfcGFyYW0gPSB4Y2hhbjtcbiYjNDM7XHRkbWFfdHhfZGVzYy1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBlcF9kbWFfdHhfY2I7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHRjb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRtYV90eF9kZXNjKTtcbiYjNDM7XHRpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0Z290byBlcnJfdW5tYXBfc2c7XG4mIzQzO1x0fVxuJiM0MztcdFdSSVRFX09OQ0UoeGNoYW4tXHUwMDNlcmluZ19oZWFkLCB4Y2hhbi1cdTAwM2VyaW5nX2hlYWQgJiM0MzsgMSk7XG4mIzQzO1x0bmV0ZGV2X3R4X3NlbnRfcXVldWUodHhxLCBza2ItXHUwMDNlbGVuKTtcbiYjNDM7XHRuZXRpZl90eHFfbWF5YmVfc3RvcCh0eHEsXG4mIzQzO1x0XHRcdCAgICAgQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsXG4mIzQzO1x0XHRcdFx0XHRSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSxcbiYjNDM7XHRcdFx0XHRcdHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSksXG4mIzQzO1x0XHRcdCAgICAgMiwgMik7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jayk7XG4mIzQzO1xuJiM0MztcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuJiM0MztcbiYjNDM7ZXJyX3VubWFwX3NnOlxuJiM0MztcdGRtYV91bm1hcF9zZyh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuJiM0MztlcnJfZHJvcF9za2I6XG4mIzQzO1x0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X2Ryb3BwZWQpO1xuJiM0MztcdHJldHVybiBORVRERVZfVFhfT0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XG4mIzQzO3N0YXRpYyB2b2lkIGVwX2V4aXRfZG1hZW5naW5lKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZXAtXHUwMDNlY2xvc2luZywgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBlcF9pbml0X2RtYWVuZ2luZShlcCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUEgZW5naW5lXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKG5kZXYpO1xuJiM0MztcdFdSSVRFX09OQ0UoZXAtXHUwMDNlY2xvc2luZywgdHJ1ZSk7XG4mIzQzO1x0ZXBfZXhpdF9kbWFlbmdpbmUoZXApO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5kZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfdHhfcmVzZXRfc3VicXVldWUobmRldiwgaSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlcF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJzY3B5KGVkLVx1MDAzZWRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihlZC1cdTAwM2Vkcml2ZXIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlcF9uZXRkZXZfb3BzID0ge1xuJiM0MztcdC5uZG9fb3Blblx0XHQ9IGVwX29wZW4sXG4mIzQzO1x0Lm5kb19zdG9wXHRcdD0gZXBfc3RvcCxcbiYjNDM7XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBlcF9zdGFydF94bWl0LFxuJiM0MztcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbiYjNDM7XHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBldGhfbWFjX2FkZHIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVwX2V0aHRvb2xfb3BzID0ge1xuJiM0MztcdC5nZXRfZHJ2aW5mb1x0PSBlcF9nZXRfZHJ2aW5mbyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKlxuJiM0MztlcF9hbGxvY19kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXAgKmVwLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX3R4LFxuJiM0MztcdFx0ICBpbnQgcmluZ19zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuO1xuJiM0MztcdHN0cnVjdCBkbWFfY2hhbiAqZXJyX2NoYW47XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGNoYW4gPSBremFsbG9jX29iaigqY2hhbik7XG4mIzQzO1x0aWYgKCFjaGFuKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1xuJiM0MztcdGNoYW4tXHUwMDNlY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW4oZXAtXHUwMDNlZGV2LCBuYW1lKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNoYW4tXHUwMDNlY2hhbikpIHtcbiYjNDM7XHRcdGVycl9jaGFuID0gY2hhbi1cdTAwM2VjaGFuO1xuJiM0MztcdFx0a2ZyZWUoY2hhbik7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX0NBU1QoZXJyX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2hhbi1cdTAwM2Vza2JfcmluZyA9IGtjYWxsb2MocmluZ19zaXplLCBzaXplb2YoKmNoYW4tXHUwMDNlc2tiX3JpbmcpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWNoYW4tXHUwMDNlc2tiX3JpbmcpIHtcbiYjNDM7XHRcdGRtYV9yZWxlYXNlX2NoYW5uZWwoY2hhbi1cdTAwM2VjaGFuKTtcbiYjNDM7XHRcdGtmcmVlKGNoYW4pO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByaW5nX3NpemU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjaGFuLVx1MDAzZXNrYl9yaW5nW2ldID0ga3phbGxvY19vYmooKmNoYW4tXHUwMDNlc2tiX3JpbmdbaV0pO1xuJiM0MztcdFx0aWYgKCFjaGFuLVx1MDAzZXNrYl9yaW5nW2ldKSB7XG4mIzQzO1x0XHRcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRcdGtmcmVlKGNoYW4tXHUwMDNlc2tiX3JpbmdbaV0pO1xuJiM0MztcdFx0XHRrZnJlZShjaGFuLVx1MDAzZXNrYl9yaW5nKTtcbiYjNDM7XHRcdFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcdFx0XHRrZnJlZShjaGFuKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRjaGFuLVx1MDAzZWlzX3R4ID0gaXNfdHg7XG4mIzQzO1x0Y2hhbi1cdTAwM2VlcCA9IGVwO1xuJiM0MztcdGNoYW4tXHUwMDNlcmluZ19zaXplID0gcmluZ19zaXplO1xuJiM0MztcdGNoYW4tXHUwMDNlZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcdGlmIChpc190eCkge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Y2hhbi1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdHRpbWVyX3NldHVwKFx1MDAyNmNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBlcF9yeF9yZWZpbGxfdGltZXIsIDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNoYW47XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVwX2ZyZWVfZG1hX2NoYW4oc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNoYW4tXHUwMDNlY2hhbikge1xuJiM0MztcdFx0aWYgKCFjaGFuLVx1MDAzZWlzX3R4KSB7XG4mIzQzO1x0XHRcdC8qIGVwX3N0b3AoKSBzZXRzIGNsb3NpbmcgYmVmb3JlIHRlYXJkb3duLiBUYWtlIHJ4X2xvY2tcbiYjNDM7XHRcdFx0ICogc28gYW55IHJlZmlsbCB0aGF0IGFscmVhZHkgcGFzc2VkIHRoZSBjbG9zaW5nIGNoZWNrXG4mIzQzO1x0XHRcdCAqIGZpbmlzaGVzIGFuZCBubyBsYXRlciBvbmUgc3VibWl0cyBvciBhcm1zIHRoZSB0aW1lcixcbiYjNDM7XHRcdFx0ICogdGhlbiBzaHV0IGRvd24gdGhlIHRpbWVyIHNvIGl0IGNhbm5vdCBiZSByZWFybWVkXG4mIzQzO1x0XHRcdCAqIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBmcmVlZC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcdFx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoY2hhbi1cdTAwM2VjaGFuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuLVx1MDAzZWlzX3R4KSB7XG4mIzQzO1x0XHR3aGlsZSAoY2hhbi1cdTAwM2VyaW5nX3RhaWwgIT0gY2hhbi1cdTAwM2VyaW5nX2hlYWQpIHtcbiYjNDM7XHRcdFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4mIzQzO1xuJiM0MztcdFx0XHRza2J1Zl9kbWEgPSBjaGFuLVx1MDAzZXNrYl9yaW5nW2NoYW4tXHUwMDNlcmluZ190YWlsIFx1MDAyNlxuJiM0MztcdFx0XHRcdFx0XHQgIChjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpXTtcbiYjNDM7XHRcdFx0aWYgKHNrYnVmX2RtYSBcdTAwMjZcdTAwMjYgc2tidWZfZG1hLVx1MDAzZXNrYikge1xuJiM0MztcdFx0XHRcdGRtYV91bm1hcF9zZyhjaGFuLVx1MDAzZWRtYV9kZXYsIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuJiM0MztcdFx0XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYnVmX2RtYS1cdTAwM2Vza2IpO1xuJiM0MztcdFx0XHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGNoYW4tXHUwMDNlcmluZ190YWlsJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaGFuLVx1MDAzZXNrYl9yaW5nKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjaGFuLVx1MDAzZXJpbmdfc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWEgPSBjaGFuLVx1MDAzZXNrYl9yaW5nW2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHNrYnVmX2RtYSBcdTAwMjZcdTAwMjYgIWNoYW4tXHUwMDNlaXNfdHggXHUwMDI2XHUwMDI2IHNrYnVmX2RtYS1cdTAwM2Vza2IpIHtcbiYjNDM7XHRcdFx0XHRkbWFfdW5tYXBfc2luZ2xlKGNoYW4tXHUwMDNlZG1hX2RldixcbiYjNDM7XHRcdFx0XHRcdFx0IHNrYnVmX2RtYS1cdTAwM2VkbWFfYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdFx0IGNoYW4tXHUwMDNlZXAtXHUwMDNlbWF4X2ZybV9zaXplLFxuJiM0MztcdFx0XHRcdFx0XHQgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7XHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2J1Zl9kbWEtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRrZnJlZShjaGFuLVx1MDAzZXNrYl9yaW5nW2ldKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGtmcmVlKGNoYW4tXHUwMDNlc2tiX3JpbmcpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY2hhbi1cdTAwM2VjaGFuKVxuJiM0MztcdFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVx1MDAzZWNoYW4pO1xuJiM0MztcbiYjNDM7XHRrZnJlZShjaGFuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXAtXHUwMDNldHhfY2hhbnMpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRlcF9mcmVlX2RtYV9jaGFuKGVwLVx1MDAzZXR4X2NoYW5zW2ldKTtcbiYjNDM7XHRcdGtmcmVlKGVwLVx1MDAzZXR4X2NoYW5zKTtcbiYjNDM7XHRcdGVwLVx1MDAzZXR4X2NoYW5zID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGVwLVx1MDAzZXJ4X2NoYW5zKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cdTAwM2VyeF9jaGFuc1tpXSk7XG4mIzQzO1x0XHRrZnJlZShlcC1cdTAwM2VyeF9jaGFucyk7XG4mIzQzO1x0XHRlcC1cdTAwM2VyeF9jaGFucyA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVwX2luaXRfZG1hZW5naW5lKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXG4mIzQzO3tcbiYjNDM7XHRpbnQgdHhfYWxsb2NhdGVkID0gMCwgcnhfYWxsb2NhdGVkID0gMDtcbiYjNDM7XHRjaGFyIG5hbWVbMTZdO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdGVwLVx1MDAzZXR4X2NoYW5zID0ga2NhbGxvYyhlcC1cdTAwM2VudW1fdHhfcXVldWVzLCBzaXplb2YoKmVwLVx1MDAzZXR4X2NoYW5zKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZXAtXHUwMDNldHhfY2hhbnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZXAtXHUwMDNlcnhfY2hhbnMgPSBrY2FsbG9jKGVwLVx1MDAzZW51bV9yeF9xdWV1ZXMsIHNpemVvZigqZXAtXHUwMDNlcnhfY2hhbnMpLFxuJiM0MztcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFlcC1cdTAwM2VyeF9jaGFucykge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdHg7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDt0eF9jaGFuJXVcJiMzNDssIGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSk7XG4mIzQzO1x0XHRlcC1cdTAwM2V0eF9jaGFuc1tpXSA9IGVwX2FsbG9jX2RtYV9jaGFuKGVwLCBuYW1lLCB0cnVlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgVFhfQkRfTlVNX0RFRkFVTFQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihlcC1cdTAwM2V0eF9jaGFuc1tpXSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihlcC1cdTAwM2V0eF9jaGFuc1tpXSk7XG4mIzQzO1x0XHRcdGVwLVx1MDAzZXR4X2NoYW5zW2ldID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHR4X2FsbG9jYXRlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcJiMzNDtyeF9jaGFuJXVcJiMzNDssIGVwLVx1MDAzZXJ4X2NoYW5fbnVtW2ldKTtcbiYjNDM7XHRcdGVwLVx1MDAzZXJ4X2NoYW5zW2ldID0gZXBfYWxsb2NfZG1hX2NoYW4oZXAsIG5hbWUsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgUlhfQkRfTlVNX0RFRkFVTFQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihlcC1cdTAwM2VyeF9jaGFuc1tpXSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gUFRSX0VSUihlcC1cdTAwM2VyeF9jaGFuc1tpXSk7XG4mIzQzO1x0XHRcdGVwLVx1MDAzZXJ4X2NoYW5zW2ldID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJ4X2FsbG9jYXRlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFlcF9yeF9yZWZpbGwoZXAtXHUwMDNlcnhfY2hhbnNbaV0sIGZhbHNlKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGVwLVx1MDAzZWRldiwgXCYjMzQ7UlggY2hhbm5lbCAlZDogbm8gZGVzY3JpcHRvcnMgYXJtZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0aSk7XG4mIzQzO1x0XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX2ZyZWVfY2hhbnM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlX2NoYW5zOlxuJiM0MztcdFdSSVRFX09OQ0UoZXAtXHUwMDNlY2xvc2luZywgdHJ1ZSk7XG4mIzQzO1x0d2hpbGUgKC0tcnhfYWxsb2NhdGVkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXHUwMDNlcnhfY2hhbnNbcnhfYWxsb2NhdGVkXSk7XG4mIzQzO1x0d2hpbGUgKC0tdHhfYWxsb2NhdGVkIFx1MDAzZT0gMClcbiYjNDM7XHRcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXHUwMDNldHhfY2hhbnNbdHhfYWxsb2NhdGVkXSk7XG4mIzQzO1x0a2ZyZWUoZXAtXHUwMDNlcnhfY2hhbnMpO1xuJiM0MztcdGVwLVx1MDAzZXJ4X2NoYW5zID0gTlVMTDtcbiYjNDM7ZXJyX2ZyZWVfdHg6XG4mIzQzO1x0a2ZyZWUoZXAtXHUwMDNldHhfY2hhbnMpO1xuJiM0MztcdGVwLVx1MDAzZXR4X2NoYW5zID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZyA9IHsgLnJlc2V0ID0gMSB9O1xuJiM0MztcdHN0cnVjdCBkbWFfY2hhbiAqcmVzZXRfY2hhbjtcbiYjNDM7XHRjaGFyIG5hbWVbMTZdO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgXCYjMzQ7dHhfY2hhbiV1XCYjMzQ7LCBlcC1cdTAwM2V0eF9kbWFfY2hhbl9tYXBbMF0pO1xuJiM0MztcdHJlc2V0X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVx1MDAzZWRldiwgbmFtZSk7XG4mIzQzO1x0aWYgKElTX0VSUihyZXNldF9jaGFuKSlcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgUFRSX0VSUihyZXNldF9jaGFuKSxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byByZXF1ZXN0ICVzIGZvciByZXNldFxcblwmIzM0OywgbmFtZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhpbGlueF92ZG1hX2NoYW5uZWxfc2V0X2NvbmZpZyhyZXNldF9jaGFuLCBcdTAwMjZjZmcpO1xuJiM0MztcdGRtYV9yZWxlYXNlX2NoYW5uZWwocmVzZXRfY2hhbik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgcmV0LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlc2V0IERNQSBjb250cm9sbGVyXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFBhcnNlIHRoZSBcJiMzNDt0eC1xdWV1ZXMtY29uZmlnXCYjMzQ7IGNoaWxkIG9mIHRoZSBFUCBub2RlLiBUaGUgbG9naWNhbCBxdWV1ZVxuJiM0MzsgKiBpbmRleCBpcyB0YWtlbiBmcm9tIHRoZSBcJiMzNDtxdWV1ZVx1MDAzY05cdTAwM2VcJiMzNDsgbm9kZSBuYW1lLCBzbyB0aGUgbWFwcGluZyBkb2VzIG5vdFxuJiM0MzsgKiBkZXBlbmQgb24gdGhlIG9yZGVyIHRoZSBjaGlsZCBub2RlcyBhcHBlYXIgaW4gdGhlIGRldmljZSB0cmVlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBlcF9wYXJzZV90eF9xdWV1ZV9jb25maWcoc3RydWN0IHhsbnhfdHNuX2VwICplcCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmljZV9ub2RlICp0eGNmZ19ucCwgdTE2IHR4X3ByZXNlbnQpXG4mIzQzO3tcbiYjNDM7XHRERUNMQVJFX0JJVE1BUChxdWV1ZV9zZWVuLCBUU05fTUFYX1RYX1FVRVVFKSA9IHt9O1xuJiM0MztcdERFQ0xBUkVfQklUTUFQKGNoYW5fc2VlbiwgVFNOX01BWF9UWF9RVUVVRSkgPSB7fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY291bnQgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHR4Y2ZnX25wLCBxbm9kZSkge1xuJiM0MztcdFx0dTMyIGNoYW4sIHF1ZXVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICghc3RyX2hhc19wcmVmaXgocW5vZGUtXHUwMDNlbmFtZSwgXCYjMzQ7cXVldWVcJiMzNDspIHx8XG4mIzQzO1x0XHQgICAga3N0cnRvdTMyKHFub2RlLVx1MDAzZW5hbWUgJiM0Mzsgc3RybGVuKFwmIzM0O3F1ZXVlXCYjMzQ7KSwgMTAsIFx1MDAyNnF1ZXVlKSB8fFxuJiM0MztcdFx0ICAgIHF1ZXVlIFx1MDAzZT0gZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcylcbiYjNDM7XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt0eC1jb25maWc6IGludmFsaWQgcXVldWUgbm9kZSAlcE9GbiAoaGF2ZSAldSBxdWV1ZXMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBxbm9kZSwgZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXQocXVldWUsIHF1ZXVlX3NlZW4pKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3R4LWNvbmZpZzogcXVldWUgJXUgZGVzY3JpYmVkIHR3aWNlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICBxdWV1ZSk7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocW5vZGUsIFwmIzM0O3hsbngsZG1hLWNoYW5uZWwtbnVtXCYjMzQ7LCBcdTAwMjZjaGFuKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgcmV0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBcJiMzNDt0eC1jb25maWc6IHF1ZXVlICV1IG1pc3NpbmcgeGxueCxkbWEtY2hhbm5lbC1udW1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIHF1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY2hhbiBcdTAwM2U9IFRTTl9NQVhfVFhfUVVFVUUgfHwgISh0eF9wcmVzZW50IFx1MDAyNiBCSVQoY2hhbikpKVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O3R4LWNvbmZpZzogcXVldWUgJXUgbWFwcyB0byBjaGFubmVsICV1IG5vdCBwcmVzZW50IGluIGRtYS1uYW1lc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcXVldWUsIGNoYW4pO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW4sIGNoYW5fc2VlbikpXG4mIzQzO1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7dHgtY29uZmlnOiBjaGFubmVsICV1IGFscmVhZHkgYXNzaWduZWQgdG8gYW5vdGhlciBxdWV1ZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgY2hhbik7XG4mIzQzO1xuJiM0MztcdFx0ZXAtXHUwMDNldHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9IGNoYW47XG4mIzQzO1x0XHRjb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoY291bnQgIT0gZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O3R4LWNvbmZpZzogZGVzY3JpYmVkICV1IHF1ZXVlcyBidXQgZXhwZWN0ZWQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBjb3VudCwgZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVwX2NvdW50X2RtYV9xdWV1ZXMoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKm91dF90eCwgdTMyICpvdXRfcngsXG4mIzQzO1x0XHRcdCAgICAgICB1MTYgKnR4X3ByZXNlbnQsIHUzMiAqcnhfY2hhbl9udW0pXG4mIzQzO3tcbiYjNDM7XHR1MzIgdHggPSAwLCByeCA9IDA7XG4mIzQzO1x0dTE2IHJ4X3ByZXNlbnQgPSAwO1xuJiM0MztcdGludCBuLCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdG4gPSBvZl9wcm9wZXJ0eV9jb3VudF9zdHJpbmdzKGRldi1cdTAwM2VvZl9ub2RlLCBcJiMzNDtkbWEtbmFtZXNcJiMzNDspO1xuJiM0MztcdGlmIChuIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBuLCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBkbWEtbmFtZXNcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRcdHNpemVfdCBwbGVuO1xuJiM0MztcdFx0dTMyIGlkeDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZG1hLW5hbWVzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgaSwgXHUwMDI2bmFtZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxcblwmIzM0OywgaSk7XG4mIzQzO1xuJiM0MztcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwmIzM0O3R4X2NoYW5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKGtzdHJ0b3UzMihuYW1lICYjNDM7IHBsZW4sIDEwLCBcdTAwMjZpZHgpIHx8XG4mIzQzO1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1RYX1FVRVVFKVxuJiM0MztcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcJiMzNDtpbnZhbGlkIFRYIGNoYW5uZWwgbmFtZSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBuYW1lKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICgqdHhfcHJlc2VudCBcdTAwMjYgQklUKGlkeCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIFwmIzM0O2R1cGxpY2F0ZSBUWCBjaGFubmVsICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIG5hbWUpO1xuJiM0MztcbiYjNDM7XHRcdFx0KnR4X3ByZXNlbnQgfD0gQklUKGlkeCk7XG4mIzQzO1x0XHRcdHR4JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwmIzM0O3J4X2NoYW5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHBsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKGtzdHJ0b3UzMihuYW1lICYjNDM7IHBsZW4sIDEwLCBcdTAwMjZpZHgpIHx8XG4mIzQzO1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1JYX1FVRVVFKVxuJiM0MztcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBcJiMzNDtpbnZhbGlkIFJYIGNoYW5uZWwgbmFtZSAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBuYW1lKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChyeF9wcmVzZW50IFx1MDAyNiBCSVQoaWR4KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgXCYjMzQ7ZHVwbGljYXRlIFJYIGNoYW5uZWwgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRyeF9wcmVzZW50IHw9IEJJVChpZHgpO1xuJiM0MztcdFx0XHRyeF9jaGFuX251bVtyeF0gPSBpZHg7XG4mIzQzO1x0XHRcdHJ4JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7dW5yZWNvZ25pc2VkIGRtYS1uYW1lcyBlbnRyeSAlc1xcblwmIzM0OywgbmFtZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXR4KVxuJiM0MztcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7bm8gVFggY2hhbm5lbHMgaW4gZG1hLW5hbWVzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyeClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O25vIFJYIGNoYW5uZWxzIGluIGRtYS1uYW1lc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdCpvdXRfdHggPSB0eDtcbiYjNDM7XHQqb3V0X3J4ID0gcng7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlcF9mcmVlX3BvcnRfbWQoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKGVwLVx1MDAzZXBvcnRfbWRbaV0pIHtcbiYjNDM7XHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2ZXAtXHUwMDNlcG9ydF9tZFtpXS1cdTAwM2Vkc3QpO1xuJiM0MztcdFx0XHRlcC1cdTAwM2Vwb3J0X21kW2ldID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZXBfYWxsb2NfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IFRTTl9UVVNFUl9QT1JUX01BQzE7IGkgXHUwMDNjPSBUU05fVFVTRVJfUE9SVF9NQUMyOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IG1ldGFkYXRhX2RzdCAqbWQ7XG4mIzQzO1xuJiM0MztcdFx0bWQgPSBtZXRhZGF0YV9kc3RfYWxsb2MoMCwgTUVUQURBVEFfSFdfUE9SVF9NVVgsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFtZCkge1xuJiM0MztcdFx0XHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG1kLVx1MDAzZXUucG9ydF9pbmZvLnBvcnRfaWQgPSBpO1xuJiM0MztcdFx0ZXAtXHUwMDNlcG9ydF9tZFtpXSA9IG1kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeGxueF90c25fZXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiYjNDM7e1xuJiM0MztcdHUzMiByeF9jaGFuX251bVtUU05fTUFYX1JYX1FVRVVFXTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wO1xuJiM0MztcdHUzMiBudW1fdHgsIG51bV9yeCwgbnVtX3ByaW87XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICppcF9ucDtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwO1xuJiM0MztcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1MTYgdHhfcHJlc2VudCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXBfY291bnRfZG1hX3F1ZXVlcyhkZXYsIFx1MDAyNm51bV90eCwgXHUwMDI2bnVtX3J4LCBcdTAwMjZ0eF9wcmVzZW50LCByeF9jaGFuX251bSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlwX25wID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4mIzQzO1x0aWYgKCFpcF9ucClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgXCYjMzQ7bWlzc2luZyBwYXJlbnQgSVAgbm9kZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGlwX25wLCBcJiMzNDt4bG54LG51bS1wcmlvcml0aWVzXCYjMzQ7LCBcdTAwMjZudW1fcHJpbyk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQoaXBfbnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7bWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eCAhPSBudW1fcHJpbylcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbiYjNDM7XHRcdFx0XHQgICAgIFwmIzM0O1RYIGNoYW5uZWwgY291bnQgJXUgbXVzdCBlcXVhbCBudW0tcHJpb3JpdGllcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG51bV90eCwgbnVtX3ByaW8pO1xuJiM0MztcbiYjNDM7XHRuZGV2ID0gYWxsb2NfbmV0ZGV2X21xcyhzaXplb2YoKmVwKSwgXCYjMzQ7ZXAlZFwmIzM0OywgTkVUX05BTUVfRU5VTSxcbiYjNDM7XHRcdFx0XHRldGhlcl9zZXR1cCwgbnVtX3R4LCBudW1fcngpO1xuJiM0MztcdGlmICghbmRldilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpO1xuJiM0MztcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmVwX25ldGRldl9vcHM7XG4mIzQzO1x0bmRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmVwX2V0aHRvb2xfb3BzO1xuJiM0MztcdG5kZXYtXHUwMDNlZmVhdHVyZXMgPSBORVRJRl9GX1NHO1xuJiM0MztcbiYjNDM7XHRlcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGVwLVx1MDAzZW5kZXYgPSBuZGV2O1xuJiM0MztcdGVwLVx1MDAzZWRldiA9IGRldjtcbiYjNDM7XHRlcC1cdTAwM2VudW1fdHhfcXVldWVzID0gbnVtX3R4O1xuJiM0MztcdGVwLVx1MDAzZW51bV9yeF9xdWV1ZXMgPSBudW1fcng7XG4mIzQzO1x0ZXAtXHUwMDNlbWF4X2ZybV9zaXplID0gVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkU7XG4mIzQzO1x0bWVtY3B5KGVwLVx1MDAzZXJ4X2NoYW5fbnVtLCByeF9jaGFuX251bSwgbnVtX3J4ICogc2l6ZW9mKCpyeF9jaGFuX251bSkpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUU05fTUFYX1RYX1FVRVVFOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSA9IFRTTl9ETUFfQ0hfSU5WQUxJRDtcbiYjNDM7XG4mIzQzO1x0dHhjZmdfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7dHgtcXVldWVzLWNvbmZpZ1wmIzM0Oyk7XG4mIzQzO1x0aWYgKCF0eGNmZ19ucCkge1xuJiM0MztcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O21pc3NpbmcgdHgtcXVldWVzLWNvbmZpZyBub2RlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfbmRldjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7XG4mIzQzO1x0b2Zfbm9kZV9wdXQodHhjZmdfbnApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG9cbiYjNDM7XHQgKiBnYXRlIG9uIHRoZSBNQ0RNQSBwcm92aWRlciBiZWluZyBib3VuZC4gVGhpcyBrZWVwcyAtRVBST0JFX0RFRkVSIGluXG4mIzQzO1x0ICogdGhlIHByb2JlIHBhdGgsIHNvIHRoZSBuZXRkZXYgaXMgb25seSByZWdpc3RlcmVkIG9uY2UgdGhlIHByb3ZpZGVyIGlzXG4mIzQzO1x0ICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gZXBfcmVzZXRfZG1hX2NvbnRyb2xsZXIoZXApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtXHUwMDNlb2Zfbm9kZSwgbWFjX2FkZHIpO1xuJiM0MztcdGlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikge1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uZGV2O1xuJiM0MztcdH0gZWxzZSBpZiAoIXJldCBcdTAwMjZcdTAwMjYgaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpIHtcbiYjNDM7XHRcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbiYjNDM7XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7bm8gdmFsaWQgTUFDIGluIERULCB1c2luZyByYW5kb20gYWRkcmVzcyAlcE1cXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBuZGV2LVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGVwX2FsbG9jX3BvcnRfbWQoZXApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBwZXItcG9ydCBtZXRhZGF0YVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlcCk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgbmV0IGRldmljZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX21kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfZnJlZV9tZDpcbiYjNDM7XHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuJiM0MztlcnJfZnJlZV9uZGV2OlxuJiM0MztcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHhsbnhfdHNuX2VwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldihlcC1cdTAwM2VuZGV2KTtcbiYjNDM7XHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuJiM0MztcdGZyZWVfbmV0ZGV2KGVwLVx1MDAzZW5kZXYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4bG54X3Rzbl9lcF9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHRzbi1lcC1tYWNcJiMzNDsgfSxcbiYjNDM7XHR7IH1cbiYjNDM7fTtcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGxueF90c25fZXBfb2ZfbWF0Y2gpO1xuJiM0MztcbiYjNDM7c3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXIgPSB7XG4mIzQzO1x0LnByb2JlXHQ9IHhsbnhfdHNuX2VwX3Byb2JlLFxuJiM0MztcdC5yZW1vdmVcdD0geGxueF90c25fZXBfcmVtb3ZlLFxuJiM0MztcdC5kcml2ZXJcdD0ge1xuJiM0MztcdFx0Lm5hbWVcdFx0PSBEUklWRVJfTkFNRSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZVx0PSB4bG54X3Rzbl9lcF9vZl9tYXRjaCxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZDMzYTAwZGQ2ZDE1ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX21haW4uY1xuQEAgLTAsMCAmIzQzOzEsMTA3IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBUaW1lIFNlbnNpdGl2ZSBOZXR3b3JraW5nIChUU04pIEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlci5cbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hpbGlueF90c24uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBUU05fTlVNX0NMT0NLU1x0XHQ2XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHhsbnhfdHNuX2lwIC0gd3JhcHBlci1wcml2YXRlIElQIHN0YXRlXG4mIzQzOyAqIEBjbGtzOiBidWxrLW1hbmFnZWQgSVAgY2xvY2tzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgeGxueF90c25faXAge1xuJiM0MztcdHN0cnVjdCBjbGtfYnVsa19kYXRhIGNsa3NbVFNOX05VTV9DTE9DS1NdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0c25fY2xrX25hbWVzW1RTTl9OVU1fQ0xPQ0tTXSA9IHtcbiYjNDM7XHRcJiMzNDtndHhcJiMzNDssXG4mIzQzO1x0XCYjMzQ7Z3R4OTBcJiMzNDssXG4mIzQzO1x0XCYjMzQ7aG9zdF9yeGZpZm9cJiMzNDssXG4mIzQzO1x0XCYjMzQ7aG9zdF90eGZpZm9cJiMzNDssXG4mIzQzO1x0XCYjMzQ7cmVmXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3NfYXhpXCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdHNuX2Nsa19idWxrX2Rpc2FibGUodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4bG54X3Rzbl9pcCAqdyA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdGNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKFRTTl9OVU1fQ0xPQ0tTLCB3LVx1MDAzZWNsa3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRzbl9pcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IHhsbnhfdHNuX2lwICp3O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHcgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKncpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXcpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFRTTl9OVU1fQ0xPQ0tTOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdHctXHUwMDNlY2xrc1tpXS5pZCA9IHRzbl9jbGtfbmFtZXNbaV07XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fY2xrX2J1bGtfZ2V0KGRldiwgVFNOX05VTV9DTE9DS1MsIHctXHUwMDNlY2xrcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGNsb2Nrc1xcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKFRTTl9OVU1fQ0xPQ0tTLCB3LVx1MDAzZWNsa3MpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBjbG9ja3NcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCB0c25fY2xrX2J1bGtfZGlzYWJsZSwgdyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRzbl9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRzbl9vZl9tYXRjaCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0c25fZHJpdmVyID0ge1xuJiM0MztcdC5wcm9iZSA9IHRzbl9pcF9wcm9iZSxcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDt4aWxpbngtdHNuXCYjMzQ7LFxuJiM0MztcdFx0Lm9mX21hdGNoX3RhYmxlID0gdHNuX29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IHRzbl9kcml2ZXJzW10gPSB7XG4mIzQzO1x0XHUwMDI2dHNuX2RyaXZlcixcbiYjNDM7XHRcdTAwMjZ4bG54X3Rzbl9lcF9kcml2ZXIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCB4bG54X3Rzbl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGxhdGZvcm1fcmVnaXN0ZXJfZHJpdmVycyh0c25fZHJpdmVycywgQVJSQVlfU0laRSh0c25fZHJpdmVycykpO1xuJiM0Mzt9XG4mIzQzO21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19leGl0IHhsbnhfdHNuX2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHBsYXRmb3JtX3VucmVnaXN0ZXJfZHJpdmVycyh0c25fZHJpdmVycywgQVJSQVlfU0laRSh0c25fZHJpdmVycykpO1xuJiM0Mzt9XG4mIzQzO21vZHVsZV9leGl0KHhsbnhfdHNuX2V4aXQpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlclwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjdkYWRlZTBiNjNlZGNkYzkzNTNlNGI2MWY4NGZlYTRkNDNjYjMyNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjI6MTc6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi40ZTY1ZDE3MTBkYTc4Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbApAQCAtMCwwICYjNDM7MSwzNjQgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAgaW1wbGVtZW50cyBJRUVFIDgwMi4xIFRpbWUtU2Vuc2l0aXZlCiYjNDM7ICBOZXR3b3JraW5nIChUU04pIHN0YW5kYXJkcyBhbmQgcHJvdmlkZXMgbG93LWxhdGVuY3kgbmV0d29yayBjb25uZWN0aXZpdHkKJiM0MzsgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydAomIzQzOyAgc3dpdGNoLCB3aXRoIHR3byBwb3J0cyBjb25uZWN0ZWQgdG8gdGhlIGV4dGVybmFsIG5ldHdvcmsgYW5kIG9uZSBwb3J0CiYjNDM7ICBjb25uZWN0ZWQgdG8gYW4gaW50ZXJuYWwgZW5kcG9pbnQuIEl0IGFsc28gc3VwcG9ydHMgR01JSS9SR01JSSBpbnRlcmZhY2VzCiYjNDM7ICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdAomIzQzOyAgMTAwIE1iL3MgYW5kIDEgR2IvcyBzcGVlZHMuCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIFNyaW5pdmFzIE5lZWxpICZsdDtzcmluaXZhcy5uZWVsaUBhbWQuY29tJmd0OwomIzQzOyAgLSBOYWdhZGhlZXJhaiBSb3R0ZWxhICZsdDtuYWdhZGhlZXJhai5yb3R0ZWxhQGFtZC5jb20mZ3Q7CiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGNvbnN0OiB4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wCiYjNDM7CiYjNDM7ICBjbG9ja3M6CiYjNDM7ICAgIGl0ZW1zOgomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUWCBjbG9jayBmb3IgdHJhbnNtaXR0ZXIgbG9naWMgYW5kIFJUQwomIzQzOyAgICAgIC0gZGVzY3JpcHRpb246IEdUWCA5MC1kZWdyZWUgcGhhc2Ugc2hpZnRlZCBjbG9jayBmb3IgUkdNSUkKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFJYIEZJRk8gY2xvY2sKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFRYIEZJRk8gY2xvY2sKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOiBSZWZlcmVuY2UgY2xvY2sgZm9yIElERUxBWSBjb250cm9sCiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjogQVhJLUxpdGUgcmVnaXN0ZXIgaW50ZXJmYWNlIGNsb2NrCiYjNDM7CiYjNDM7ICBjbG9jay1uYW1lczoKJiM0MzsgICAgaXRlbXM6CiYjNDM7ICAgICAgLSBjb25zdDogZ3R4CiYjNDM7ICAgICAgLSBjb25zdDogZ3R4OTAKJiM0MzsgICAgICAtIGNvbnN0OiBob3N0X3J4ZmlmbwomIzQzOyAgICAgIC0gY29uc3Q6IGhvc3RfdHhmaWZvCiYjNDM7ICAgICAgLSBjb25zdDogcmVmCiYjNDM7ICAgICAgLSBjb25zdDogc19heGkKJiM0MzsKJiM0MzsgIHJhbmdlczogdHJ1ZQomIzQzOwomIzQzOyAgJiMzOTsjYWRkcmVzcy1jZWxscyYjMzk7OgomIzQzOyAgICBjb25zdDogMQomIzQzOwomIzQzOyAgJiMzOTsjc2l6ZS1jZWxscyYjMzk7OgomIzQzOyAgICBjb25zdDogMQomIzQzOwomIzQzOyAgeGxueCxudW0tcHJpb3JpdGllczoKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyCiYjNDM7ICAgIG1pbmltdW06IDIKJiM0MzsgICAgbWF4aW11bTogOAomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBOdW1iZXIgb2YgdHJhZmZpYyBjbGFzc2VzIChwcmlvcml0aWVzKSBjb25maWd1cmVkIGluIHRoZSBJUC4KJiM0MzsgICAgICBUaGlzIGlzIGFuIElQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mCiYjNDM7ICAgICAgcHJpb3JpdHkgcXVldWVzIGF2YWlsYWJsZSBmb3IgUW9TIHNjaGVkdWxpbmcuIFRyYWZmaWMgY2xhc3NlcyBtYXAgdG8KJiM0MzsgICAgICBJRUVFIDgwMi4xUSBwcmlvcml0eSBsZXZlbHMgKDAtNykuCiYjNDM7CiYjNDM7cGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAmIzM0O15ldGhlcm5ldEBbMC05YS1mXSYjNDM7JCYjMzQ7OgomIzQzOyAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCMKJiM0MzsgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOyAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICBFbmRwb2ludCBNQUMgc3ViLW5vZGUuIFByb3ZpZGVzIHRoZSBob3N0LXNpZGUgZGF0YSBwYXRoIHRocm91Z2ggdGhlCiYjNDM7ICAgICAgRE1BIGNoYW5uZWxzIGRlc2NyaWJlZCBieSBpdHMgZG1hcyAvIGRtYS1uYW1lcy4KJiM0MzsgICAgcHJvcGVydGllczoKJiM0MzsgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgY29uc3Q6IHhsbngsdHNuLWVwLW1hYwomIzQzOwomIzQzOyAgICAgIHJlZzoKJiM0MzsgICAgICAgIG1heEl0ZW1zOiAxCiYjNDM7CiYjNDM7ICAgICAgZG1hczoKJiM0MzsgICAgICAgIG1pbkl0ZW1zOiAyCiYjNDM7ICAgICAgICBtYXhJdGVtczogMTYKJiM0MzsKJiM0MzsgICAgICBkbWEtbmFtZXM6CiYjNDM7ICAgICAgICBtaW5JdGVtczogMgomIzQzOyAgICAgICAgbWF4SXRlbXM6IDE2CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgcGF0dGVybjogJiMzNDteKHR4fHJ4KV9jaGFuWzAtN10kJiMzNDsKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOiB8CiYjNDM7ICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICYjMzk7ZG1hcyYjMzk7LCBvbmUgcGVyIERNQSBjaGFubmVsIGFuZCBpbgomIzQzOyAgICAgICAgICB0aGUgc2FtZSBvcmRlci4gVFggY2hhbm5lbCBuYW1lcyB1c2UgJiMzNDt0eF9jaGFuJmx0O04mZ3Q7JiMzNDsgYW5kIFJYIGNoYW5uZWwKJiM0MzsgICAgICAgICAgbmFtZXMgdXNlICYjMzQ7cnhfY2hhbiZsdDtOJmd0OyYjMzQ7LCB3aGVyZSBOIGlzIDAuLjcuIEV4YW1wbGU6ICYjMzQ7dHhfY2hhbjAmIzM0OywKJiM0MzsgICAgICAgICAgJiMzNDt0eF9jaGFuMSYjMzQ7LCAuLi4sICYjMzQ7cnhfY2hhbjAmIzM0OywgJiMzNDtyeF9jaGFuMSYjMzQ7LCAuLi4uCiYjNDM7CiYjNDM7ICAgICAgdHgtcXVldWVzLWNvbmZpZzoKJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdAomIzQzOyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7ICAgICAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgVFggcXVldWUgY29uZmlndXJhdGlvbiBub2RlIHRoYXQgbWFwcyBJUCBwcmlvcml0eSBxdWV1ZXMgdG8KJiM0MzsgICAgICAgICAgRE1BIFRYIGNoYW5uZWxzLiBUaGUgVFNOIElQIHN1cHBvcnRzIG11bHRpcGxlIHByaW9yaXR5IHF1ZXVlcyBmb3IKJiM0MzsgICAgICAgICAgUW9TIHNjaGVkdWxpbmcsIGFuZCBlYWNoIHF1ZXVlIGNhbiBiZSBjb25uZWN0ZWQgdG8gYSBzcGVjaWZpYyBETUEKJiM0MzsgICAgICAgICAgY2hhbm5lbC4gVGhpcyBtYXBwaW5nIGRlZmluZXMgd2hpY2ggRE1BIFRYIGNoYW5uZWwgaXMgdXNlZCB0bwomIzQzOyAgICAgICAgICB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIHByaW9yaXR5IHF1ZXVlLiBGb3IgZXhhbXBsZSwgcXVldWUwCiYjNDM7ICAgICAgICAgIHdpdGggeGxueCxkbWEtY2hhbm5lbC1udW0gc2V0IHRvIDUgbWVhbnMgcHJpb3JpdHkgcXVldWUgMCB1c2VzCiYjNDM7ICAgICAgICAgIHR4X2NoYW41IGZvciBkYXRhIHRyYW5zZmVyLgomIzQzOwomIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICYjMzQ7XnF1ZXVlWzAtN10kJiMzNDs6CiYjNDM7ICAgICAgICAgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICAgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgICAgICBFYWNoIHN1Ym5vZGUgcmVwcmVzZW50cyBhIHByaW9yaXR5IHF1ZXVlLiBUaGUKJiM0MzsgICAgICAgICAgICAgIHhsbngsZG1hLWNoYW5uZWwtbnVtIHByb3BlcnR5IHNwZWNpZmllcyB3aGljaCBETUEgVFggY2hhbm5lbAomIzQzOyAgICAgICAgICAgICAgKHR4X2NoYW4wIHRvIHR4X2NoYW43KSBpcyBjb25uZWN0ZWQgdG8gdGhpcyBxdWV1ZSBmb3IKJiM0MzsgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBwYWNrZXRzLgomIzQzOyAgICAgICAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bToKJiM0MzsgICAgICAgICAgICAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyCiYjNDM7ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICAgICAgICAgIERNQSBjaGFubmVsIHRoYXQgdHJhbnNtaXRzIHRoaXMgcHJpb3JpdHkgcXVldWUsIGdpdmVuIGFzCiYjNDM7ICAgICAgICAgICAgICAgICAgdGhlIE4gb2YgdGhlIHR4X2NoYW5OIGVudHJ5IGluIGRtYS1uYW1lcy4KJiM0MzsgICAgICAgICAgICAgICAgbWluaW11bTogMAomIzQzOyAgICAgICAgICAgICAgICBtYXhpbXVtOiA3CiYjNDM7CiYjNDM7ICAgICAgICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAgICAgICAtIHhsbngsZG1hLWNoYW5uZWwtbnVtCiYjNDM7CiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICAgIC0gcmVnCiYjNDM7ICAgICAgLSBkbWFzCiYjNDM7ICAgICAgLSBkbWEtbmFtZXMKJiM0MzsgICAgICAtIHR4LXF1ZXVlcy1jb25maWcKJiM0MzsKJiM0MzsgICYjMzQ7XnN3aXRjaEBbMC05YS1mXSYjNDM7JCYjMzQ7OgomIzQzOyAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgJHJlZjogL3NjaGVtYXMvbmV0L2RzYS9kc2EueWFtbCMvJGRlZnMvZXRoZXJuZXQtcG9ydHMKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgVGhyZWUtcG9ydCBFdGhlcm5ldCBzd2l0Y2ggc3ViLW5vZGUuIENvbnRhaW5zIHRoZSBzd2l0Y2ggZmFicmljCiYjNDM7ICAgICAgcmVnaXN0ZXIgd2luZG93IGFuZCB0aGUgdHdvIHBlci1NQUMgcmVnaXN0ZXIgd2luZG93cy4gRWFjaCBwZXItTUFDCiYjNDM7ICAgICAgd2luZG93IGhvdXNlcyBhbiBNRElPIGNvbnRyb2xsZXIgYW5kIGEgUFRQIHJlZ2lzdGVyIGJsb2NrIGF0IGZpeGVkCiYjNDM7ICAgICAgb2Zmc2V0cy4gVGhlIElQJiMzOTtzIHBlci1NQUMgYW5kIFBUUC10aW1lciBpbnRlcnJ1cHRzIGFyZSBleHBvc2VkIGhlcmUuCiYjNDM7CiYjNDM7ICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgY29tcGF0aWJsZToKJiM0MzsgICAgICAgIGNvbnN0OiB4bG54LHRzbi1zd2l0Y2gKJiM0MzsKJiM0MzsgICAgICByZWc6CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogU3dpdGNoIGZhYnJpYyByZWdpc3RlciB3aW5kb3cKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMSByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUCkKJiM0MzsgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMiByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUCkKJiM0MzsKJiM0MzsgICAgICByZWctbmFtZXM6CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgLSBjb25zdDogc3dpdGNoCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IG1hYzEKJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjMgomIzQzOwomIzQzOyAgICAgIGludGVycnVwdHM6CiYjNDM7ICAgICAgICBtaW5JdGVtczogNwomIzQzOyAgICAgICAgbWF4SXRlbXM6IDcKJiM0MzsKJiM0MzsgICAgICBpbnRlcnJ1cHQtbmFtZXM6CiYjNDM7ICAgICAgICBpdGVtczoKJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzEKJiM0MzsgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzEKJiM0MzsgICAgICAgICAgLSBjb25zdDogbWFjX2lycV9tYWMxCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHB0cF90aW1lcgomIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfcnhfbWFjMgomIzQzOyAgICAgICAgICAtIGNvbnN0OiBwdHBfdHhfbWFjMgomIzQzOyAgICAgICAgICAtIGNvbnN0OiBtYWNfaXJxX21hYzIKJiM0MzsKJiM0MzsgICAgICBtZGlvLTE6CiYjNDM7ICAgICAgICAkcmVmOiAvc2NoZW1hcy9uZXQvbWRpby55YW1sIwomIzQzOyAgICAgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgIE1ESU8gYnVzIGNvbnRyb2xsZXIgZm9yIE1BQzEuIFJlZ2lzdGVycyByZXNpZGUgaW5zaWRlIHRoZSBtYWMxCiYjNDM7ICAgICAgICAgIHJlZy1uYW1lcyB3aW5kb3cuCiYjNDM7ICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgbWRpby0yOgomIzQzOyAgICAgICAgJHJlZjogL3NjaGVtYXMvbmV0L21kaW8ueWFtbCMKJiM0MzsgICAgICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMyLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMgomIzQzOyAgICAgICAgICByZWctbmFtZXMgd2luZG93LgomIzQzOyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzOyAgICBwYXR0ZXJuUHJvcGVydGllczoKJiM0MzsgICAgICAmIzM0O14oZXRoZXJuZXQtKT9wb3J0cyQmIzM0OzoKJiM0MzsgICAgICAgIHR5cGU6IG9iamVjdAomIzQzOyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICAmIzM5OyNhZGRyZXNzLWNlbGxzJiMzOTs6CiYjNDM7ICAgICAgICAgICAgY29uc3Q6IDEKJiM0MzsKJiM0MzsgICAgICAgICAgJiMzOTsjc2l6ZS1jZWxscyYjMzk7OgomIzQzOyAgICAgICAgICAgIGNvbnN0OiAwCiYjNDM7CiYjNDM7ICAgICAgICAgIHBvcnRAMDoKJiM0MzsgICAgICAgICAgICB0eXBlOiBvYmplY3QKJiM0MzsgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWUKJiM0MzsgICAgICAgICAgICBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgICAgIENQVSBwb3J0LiBXaXJlZCBpbnRlcm5hbGx5IHRvIHRoZSBlbmRwb2ludCBNQUMgc2libGluZy4KJiM0MzsKJiM0MzsgICAgICAgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgICAgICAgcmVnOgomIzQzOyAgICAgICAgICAgICAgICBjb25zdDogMAomIzQzOwomIzQzOyAgICAgICAgICAgICAgcGh5LW1vZGU6CiYjNDM7ICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbAomIzQzOwomIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgICAgICAgLSBldGhlcm5ldAomIzQzOwomIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICYjMzQ7XnBvcnRAWzEtMl0kJiMzNDs6CiYjNDM7ICAgICAgICAgICAgdHlwZTogb2JqZWN0CiYjNDM7ICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlCiYjNDM7ICAgICAgICAgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgICAgICAgICBFeHRlcm5hbCBFdGhlcm5ldCBwb3J0LiBwb3J0QDEgaXMgd2lyZWQgdG8gTUFDMSBhbmQgcmVhY2hlZAomIzQzOyAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbWRpby0xIGJ1cywgcG9ydEAyIGlzIHdpcmVkIHRvIE1BQzIgYW5kIHJlYWNoZWQKJiM0MzsgICAgICAgICAgICAgIHRocm91Z2ggdGhlIG1kaW8tMiBidXMuCiYjNDM7CiYjNDM7ICAgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICAgIHJlZzoKJiM0MzsgICAgICAgICAgICAgICAgZW51bTogWzEsIDJdCiYjNDM7CiYjNDM7ICAgICAgICAgICAgICBwaHktbW9kZToKJiM0MzsgICAgICAgICAgICAgICAgZW51bToKJiM0MzsgICAgICAgICAgICAgICAgICAtIGdtaWkKJiM0MzsgICAgICAgICAgICAgICAgICAtIHJnbWlpCiYjNDM7ICAgICAgICAgICAgICAgICAgLSByZ21paS1pZAomIzQzOwomIzQzOyAgICAgICAgICAgIHJlcXVpcmVkOgomIzQzOyAgICAgICAgICAgICAgLSByZWcKJiM0MzsgICAgICAgICAgICAgIC0gcGh5LW1vZGUKJiM0MzsgICAgICAgICAgICAgIC0gcGh5LWhhbmRsZQomIzQzOwomIzQzOyAgICAgICAgcmVxdWlyZWQ6CiYjNDM7ICAgICAgICAgIC0gcG9ydEAwCiYjNDM7ICAgICAgICAgIC0gcG9ydEAxCiYjNDM7ICAgICAgICAgIC0gcG9ydEAyCiYjNDM7CiYjNDM7ICAgIHJlcXVpcmVkOgomIzQzOyAgICAgIC0gY29tcGF0aWJsZQomIzQzOyAgICAgIC0gcmVnCiYjNDM7ICAgICAgLSByZWctbmFtZXMKJiM0MzsgICAgICAtIGludGVycnVwdHMKJiM0MzsgICAgICAtIGludGVycnVwdC1uYW1lcwomIzQzOwomIzQzOyAgICBvbmVPZjoKJiM0MzsgICAgICAtIHJlcXVpcmVkOiBbcG9ydHNdCiYjNDM7ICAgICAgLSByZXF1aXJlZDogW2V0aGVybmV0LXBvcnRzXQomIzQzOwomIzQzOyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7YWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gY2xvY2tzCiYjNDM7ICAtIGNsb2NrLW5hbWVzCiYjNDM7ICAtIHhsbngsbnVtLXByaW9yaXRpZXMKJiM0MzsgIC0gcmFuZ2VzCiYjNDM7ICAtICYjMzk7I2FkZHJlc3MtY2VsbHMmIzM5OwomIzQzOyAgLSAmIzM5OyNzaXplLWNlbGxzJiMzOTsKJiM0MzsKJiM0MztleGFtcGxlczoKJiM0MzsgIC0gfAomIzQzOyAgICB0c25AODAwNDAwMDAgewomIzQzOyAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLTMuMCYjMzQ7OwomIzQzOyAgICAgICAgY2xvY2tzID0gJmx0OyZhbXA7bWlzY19jbGtfMiZndDssICZsdDsmYW1wO21pc2NfY2xrXzImZ3Q7LCAmbHQ7JmFtcDttaXNjX2Nsa18xJmd0OywgJmx0OyZhbXA7bWlzY19jbGtfMSZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAmbHQ7JmFtcDttaXNjX2Nsa18zJmd0OywgJmx0OyZhbXA7bWlzY19jbGtfMCZndDs7CiYjNDM7ICAgICAgICBjbG9jay1uYW1lcyA9ICYjMzQ7Z3R4JiMzNDssICYjMzQ7Z3R4OTAmIzM0OywgJiMzNDtob3N0X3J4ZmlmbyYjMzQ7LCAmIzM0O2hvc3RfdHhmaWZvJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICYjMzQ7cmVmJiMzNDssICYjMzQ7c19heGkmIzM0OzsKJiM0MzsgICAgICAgIHhsbngsbnVtLXByaW9yaXRpZXMgPSAmbHQ7OCZndDs7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgcmFuZ2VzID0gJmx0OzB4MCAweDgwMDQwMDAwIDB4NDAwMDAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXBfbWFjOiBldGhlcm5ldEAxNjAwMCB7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7eGxueCx0c24tZXAtbWFjJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzB4MTYwMDAgMHhhMDAwJmd0OzsKJiM0MzsgICAgICAgICAgICBkbWFzID0gJmx0OyZhbXA7YXhpX21jZG1hXzAgMCZndDssICZsdDsmYW1wO2F4aV9tY2RtYV8wIDEmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAyJmd0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgJmx0OyZhbXA7YXhpX21jZG1hXzAgMyZndDssICZsdDsmYW1wO2F4aV9tY2RtYV8wIDQmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCA1Jmd0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgJmx0OyZhbXA7YXhpX21jZG1hXzAgNiZndDssICZsdDsmYW1wO2F4aV9tY2RtYV8wIDcmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAxNiZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICZsdDsmYW1wO2F4aV9tY2RtYV8wIDE3Jmd0OywgJmx0OyZhbXA7YXhpX21jZG1hXzAgMTgmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAxOSZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICZsdDsmYW1wO2F4aV9tY2RtYV8wIDIwJmd0OywgJmx0OyZhbXA7YXhpX21jZG1hXzAgMjEmZ3Q7LCAmbHQ7JmFtcDtheGlfbWNkbWFfMCAyMiZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICZsdDsmYW1wO2F4aV9tY2RtYV8wIDIzJmd0OzsKJiM0MzsgICAgICAgICAgICBkbWEtbmFtZXMgPSAmIzM0O3R4X2NoYW4wJiMzNDssICYjMzQ7dHhfY2hhbjEmIzM0OywgJiMzNDt0eF9jaGFuMiYjMzQ7LCAmIzM0O3R4X2NoYW4zJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eF9jaGFuNCYjMzQ7LCAmIzM0O3R4X2NoYW41JiMzNDssICYjMzQ7dHhfY2hhbjYmIzM0OywgJiMzNDt0eF9jaGFuNyYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7cnhfY2hhbjAmIzM0OywgJiMzNDtyeF9jaGFuMSYjMzQ7LCAmIzM0O3J4X2NoYW4yJiMzNDssICYjMzQ7cnhfY2hhbjMmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3J4X2NoYW40JiMzNDssICYjMzQ7cnhfY2hhbjUmIzM0OywgJiMzNDtyeF9jaGFuNiYjMzQ7LCAmIzM0O3J4X2NoYW43JiMzNDs7CiYjNDM7ICAgICAgICAgICAgdHgtcXVldWVzLWNvbmZpZyB7CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NyZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMSB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NiZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NSZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlMyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4NCZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MyZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNSB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MiZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MSZndDs7IH07CiYjNDM7ICAgICAgICAgICAgICAgIHF1ZXVlNyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gJmx0OzB4MCZndDs7IH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICBzd2l0Y2hAMzgwMDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3hsbngsdHNuLXN3aXRjaCYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDsweDM4MDAwIDB4ODAwMCZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgJmx0OzB4MDAwMDAgMHgxNDAwMCZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgJmx0OzB4MjAwMDAgMHgxNDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgcmVnLW5hbWVzID0gJiMzNDtzd2l0Y2gmIzM0OywgJiMzNDttYWMxJiMzNDssICYjMzQ7bWFjMiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtpbnRjJmd0OzsKJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHRzID0gJmx0OzAgMiZndDssICZsdDsyIDImZ3Q7LCAmbHQ7NCAyJmd0OywgJmx0OzYgMiZndDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICZsdDsxIDImZ3Q7LCAmbHQ7MyAyJmd0OywgJmx0OzUgMiZndDs7CiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gJiMzNDtwdHBfcnhfbWFjMSYjMzQ7LCAmIzM0O3B0cF90eF9tYWMxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDttYWNfaXJxX21hYzEmIzM0OywgJiMzNDtwdHBfdGltZXImIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3B0cF9yeF9tYWMyJiMzNDssICYjMzQ7cHRwX3R4X21hYzImIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O21hY19pcnFfbWFjMiYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIG1kaW8tMSB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgcGh5MDogZXRoZXJuZXQtcGh5QDAgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgbWRpby0yIHsKJiM0MzsgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICBwaHkxOiBldGhlcm5ldC1waHlAMSB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1wb3J0cyB7CiYjNDM7ICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgICAgICAgICAgcG9ydEAwIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIGV0aGVybmV0ID0gJmx0OyZhbXA7ZXBfbWFjJmd0OzsKJiM0MzsgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gJiMzNDtpbnRlcm5hbCYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSAmbHQ7MTAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CiYjNDM7ICAgICAgICAgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBwb3J0QDEgewomIzQzOyAgICAgICAgICAgICAgICAgICAgcmVnID0gJmx0OzEmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9ICZsdDsmYW1wO3BoeTAmZ3Q7OwomIzQzOyAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAmIzM0O3JnbWlpLWlkJiMzNDs7CiYjNDM7ICAgICAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgICAgIHBvcnRAMiB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICByZWcgPSAmbHQ7MiZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gJmx0OyZhbXA7cGh5MSZndDs7CiYjNDM7ICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICYjMzQ7cmdtaWktaWQmIzM0OzsKJiM0MzsgICAgICAgICAgICAgICAgfTsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOyAgICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjIzZmI2ZjJmNGVmNC4uZmY5NGUzMTRlZWIxZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTI5OTExLDYgJiM0MzsyOTkxMSwxNCBAQCBNOglIYXJzaCBKYWluICZsdDtoLmphaW5AYW1kLmNvbSZndDsKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvY2hhci9od19yYW5kb20veGlsaW54LXRybmcuYwogCiYjNDM7WElMSU5YIFRTTiBFTkRQT0lOVCBFVEhFUk5FVCBNQUMgRFJJVkVSCiYjNDM7TToJTmFnYWRoZWVyYWogUm90dGVsYSAmbHQ7bmFnYWRoZWVyYWoucm90dGVsYUBhbWQuY29tJmd0OwomIzQzO006CVNyaW5pdmFzIE5lZWxpICZsdDtzcmluaXZhcy5uZWVsaUBhbWQuY29tJmd0OwomIzQzO0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKJiM0MztTOglNYWludGFpbmVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbAomIzQzO0Y6CWRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vCiYjNDM7CiBYSUxJTlggVUFSVExJVEUgU0VSSUFMIERSSVZFUgogTToJUGV0ZXIgS29yc2dhYXJkICZsdDtqYWNtZXRAc3Vuc2l0ZS5kayZndDsKIEw6CWxpbnV4LXNlcmlhbEB2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcKaW5kZXggNzUwMjIxNGNjN2Q1MC4uYzZkNzA0YzhkM2Q0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWcKQEAgLTQxLDQgJiM0Mzs0MSw1IEBAIGNvbmZpZyBYSUxJTlhfTExfVEVNQUMKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDCiAJICBjb3JlIHVzZWQgaW4gWGlsaW54IFNwYXJ0YW4gYW5kIFZpcnRleCBGUEdBcwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnJiMzNDsKIGVuZGlmICMgTkVUX1ZFTkRPUl9YSUxJTlgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZQppbmRleCA3ZDdkYzE3NzE0MjNlLi42NmRhYjAxMjY1MGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlCkBAIC04LDMgJiM0Mzs4LDQgQEAgb2JqLSQoQ09ORklHX1hJTElOWF9MTF9URU1BQykgJiM0Mzs9IGxsX3RlbWFjLm8KIG9iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICYjNDM7PSB4aWxpbnhfZW1hY2xpdGUubwogeGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vCiBvYmotJChDT05GSUdfWElMSU5YX0FYSV9FTUFDKSAmIzQzOz0geGlsaW54X2VtYWMubwomIzQzO29iai0kKENPTkZJR19YSUxJTlhfVFNOKSAmIzQzOz0gdHNuLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjI5MmYxNzY5NDQwNDIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTYgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uCiYjNDM7IwomIzQzOwomIzQzO2NvbmZpZyBYSUxJTlhfVFNOCiYjNDM7CXRyaXN0YXRlICYjMzQ7WGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXImIzM0OwomIzQzOwlkZXBlbmRzIG9uIE9GX0FERFJFU1MKJiM0MzsJZGVwZW5kcyBvbiBYSUxJTlhfRE1BCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgQU1EL1hpbGlueCBUaW1lLVNlbnNpdGl2ZSBOZXR3b3JraW5nCiYjNDM7CSAgKFRTTikgRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQLiBJdCBwcm92aWRlcyB0aGUgd3JhcHBlciBkZXZpY2UKJiM0MzsJICBhbmQgdGhlIGVuZHBvaW50IE1BQyB0aGF0IGNvbm5lY3RzIHRoZSBJUCB0byB0aGUgaG9zdCBDUFUuIFRoZQomIzQzOwkgIHRocmVlLXBvcnQgc3dpdGNoIGlzIHN1cHBvcnRlZCBieSB0aGUgY29tcGFuaW9uIERTQSBkcml2ZXIuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjU4ODY4MjhiMzg2ZjQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDIgQEAKJiM0MztvYmotJChDT05GSUdfWElMSU5YX1RTTikgJiM0Mzs9IHhpbGlueF90c24ubwomIzQzO3hpbGlueF90c24teSA6PSB4aWxpbnhfdHNuX21haW4ubyB4aWxpbnhfdHNuX2VwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYjA3NTdlMjJkMWZkMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oCkBAIC0wLDAgJiM0MzsxLDE1IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBkcml2ZXIsIHNoYXJlZCBkZWZpbml0aW9ucy4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWElMSU5YX1RTTl9ICiYjNDM7I2RlZmluZSBfWElMSU5YX1RTTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOwomIzQzO2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhsbnhfdHNuX2VwX2RyaXZlcjsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX1hJTElOWF9UU05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kYjdkYTI2NTIxZDAxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmMKQEAgLTAsMCAmIzQzOzEsMTAzNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0b3BzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NpcmNfYnVmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS94aWxpbnhfZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYWVuZ2luZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2F0dGVybGlzdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9kc3RfbWV0YWRhdGEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3hpbGlueF90c24uaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBEUklWRVJfTkFNRQkJCSYjMzQ7eGlsaW54X3Rzbl9lcCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBUU05fRE1BX0NIX0lOVkFMSUQJCTB4RkZVCiYjNDM7I2RlZmluZSBUU05fTUFYX1RYX1FVRVVFCQk4CiYjNDM7I2RlZmluZSBUU05fTUFYX1JYX1FVRVVFCQk4CiYjNDM7CiYjNDM7I2RlZmluZSBUU05fTUFYX1ZMQU5fRlJBTUVfU0laRQkJKEVUSF9EQVRBX0xFTiAmIzQzOyBWTEFOX0VUSF9ITEVOICYjNDM7IFwKJiM0MzsJCQkJCSBFVEhfRkNTX0xFTikKJiM0MzsKJiM0MzsjZGVmaW5lIFRYX0JEX05VTV9ERUZBVUxUCQk2NAomIzQzOyNkZWZpbmUgUlhfQkRfTlVNX0RFRkFVTFQJCTEyOAomIzQzOwomIzQzOyNkZWZpbmUgRVBfUlhfUkVGSUxMX1JFVFJZCQltc2Vjc190b19qaWZmaWVzKDEwKQomIzQzOwomIzQzOy8qCiYjNDM7ICogVGhlIERNQSBkZXNjcmlwdG9yIHNpZGViYW5kIHN0YXR1cyB3b3JkIHBhY2tzIFRJRC9UREVTVC9UVVNFUiB0b2dldGhlcjsKJiM0MzsgKiBUVVNFUiBvY2N1cGllcyB0aGUgbG93IGJ5dGUsIFRJRC9UREVTVCBzaXQgaW4gdGhlIHVwcGVyIGJpdHMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBUU05fVFVTRVJfTUFTSwkJCUdFTk1BU0soNywgMCkKJiM0MzsvKiBUVVNFUiBJbnB1dCBQb3J0IElEIGZpZWxkIChiaXRzIFs1OjRdIG9mIHRoZSBUVVNFUiBmaWVsZCkgKi8KJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0lEX01BU0sJCUdFTk1BU0soNSwgNCkKJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0VQCQkweDAKJiM0MzsjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX01BQzEJCTB4MQomIzQzOyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfTUFDMgkJMHgyCiYjNDM7CiYjNDM7LyogU2l6ZWQgdG8gaW5kZXggcG9ydF9tZFtdIGJ5IFRVU0VSIHBvcnRfaWQgKDEgb3IgMiwgc2xvdCAwIHVudXNlZCkgKi8KJiM0MzsjZGVmaW5lIFhMTlhfVFNOX0VQX1BPUlRfTURfU0xPVFMJKFRTTl9UVVNFUl9QT1JUX01BQzIgJiM0MzsgMSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgLSBza2IgY29udGFpbmVyIGZvciBlYWNoIGluLWZsaWdodCBETUEgZGVzY3JpcHRvcgomIzQzOyAqIEBzZ2w6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgYmFja2luZyB0aGUgRE1BIG1hcHBpbmcKJiM0MzsgKiBAZGVzYzogZG1hZW5naW5lIGRlc2NyaXB0b3IgaGFuZGxlCiYjNDM7ICogQGRtYV9hZGRyZXNzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBzZ2wgZW50cnkgKFJYIHBhdGgpCiYjNDM7ICogQHNrYjogU0tCIG93bmluZyB0aGUgYnVmZmVyCiYjNDM7ICogQHNnX2xlbjogbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gQHNnbCAoVFggcGF0aCkKJiM0MzsgKi8KJiM0MztzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgewomIzQzOwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dsW01BWF9TS0JfRlJBR1MgJiM0MzsgMV07CiYjNDM7CXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJaW50IHNnX2xlbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAtIG9uZSBETUEgY2hhbm5lbCBhbmQgaXRzIFNLQiByaW5nCiYjNDM7ICogQHNrYl9yaW5nOiBwZXItc2xvdCBTS0IgZGVzY3JpcHRvcnMKJiM0MzsgKiBAZXA6IHBvaW50ZXIgYmFjayB0byB0aGUgb3duaW5nIEVQIGluc3RhbmNlCiYjNDM7ICogQGNoYW46IGRtYWVuZ2luZSBjaGFubmVsIGhhbmRsZQomIzQzOyAqIEBkbWFfZGV2OiBkZXZpY2UgdXNlZCBmb3IgRE1BIG1hcHBpbmcgKHRoZSBETUEgZW5naW5lLCBub3QgdGhlIEVQKQomIzQzOyAqIEByaW5nX2hlYWQ6IHByb2R1Y2VyIGluZGV4CiYjNDM7ICogQHJpbmdfdGFpbDogY29uc3VtZXIgaW5kZXgKJiM0MzsgKiBAcmluZ19zaXplOiBudW1iZXIgb2Ygc2xvdHMgaW4gQHNrYl9yaW5nCiYjNDM7ICogQHJ4X2xvY2s6IHNlcmlhbGlzZXMgQHJpbmdfaGVhZCBiZXR3ZWVuIHRoZSBSWCBjYWxsYmFjayBhbmQgdGhlIHJlZmlsbCB0aW1lcgomIzQzOyAqIEB0eF9sb2NrOiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgYmV0d2VlbiB4bWl0IGFuZCBUWCBjb21wbGV0aW9uCiYjNDM7ICogQHJ4X3JlZmlsbF90aW1lcjogcmV0cmllcyBSWCByZWZpbGwgYWZ0ZXIgYW4gYWxsb2NhdGlvbiBmYWlsdXJlCiYjNDM7ICogQGlzX3R4OiB0cnVlIGZvciBUWCBjaGFubmVscywgZmFsc2UgZm9yIFJYCiYjNDM7ICovCiYjNDM7c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuIHsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICoqc2tiX3Jpbmc7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXA7CiYjNDM7CXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKJiM0MzsJc3RydWN0IGRldmljZSAqZG1hX2RldjsKJiM0MzsJdTMyIHJpbmdfaGVhZDsKJiM0MzsJdTMyIHJpbmdfdGFpbDsKJiM0MzsJdTMyIHJpbmdfc2l6ZTsKJiM0MzsJc3BpbmxvY2tfdCByeF9sb2NrOwkvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgKi8KJiM0MzsJc3BpbmxvY2tfdCB0eF9sb2NrOwkvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgKi8KJiM0MzsJc3RydWN0IHRpbWVyX2xpc3QgcnhfcmVmaWxsX3RpbWVyOwomIzQzOwlib29sIGlzX3R4OwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHhsbnhfdHNuX2VwIC0gRVAgTUFDIHByaXZhdGUgZGF0YSwgZW1iZWRkZWQgaW4gbmV0X2RldmljZSBwcml2IGFyZWEKJiM0MzsgKiBAbmRldjogdGhlIGNvbmR1aXQgbmV0ZGV2ICgmIzM0O2VwMCYjMzQ7IGZvciB0aGUgZmlyc3QgSVAgaW5zdGFuY2UpCiYjNDM7ICogQGRldjogYmFja2luZyBkZXZpY2UKJiM0MzsgKiBAbnVtX3R4X3F1ZXVlczogbnVtYmVyIG9mIFRYIERNQSBjaGFubmVscyAob25lIHBlciBwcmlvcml0eSkKJiM0MzsgKiBAbnVtX3J4X3F1ZXVlczogbnVtYmVyIG9mIFJYIERNQSBjaGFubmVscwomIzQzOyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLSZndDsgcGh5c2ljYWwgRE1BIGNoYW5uZWwgbnVtYmVyCiYjNDM7ICogQHJ4X2NoYW5fbnVtOiBSWCByaW5nIGluZGV4IC0mZ3Q7IHBoeXNpY2FsIERNQSBjaGFubmVsIG51bWJlcgomIzQzOyAqIEBtYXhfZnJtX3NpemU6IG1heGltdW0gZnJhbWUgc2l6ZSBhY2NlcHRlZCBvbiBSWAomIzQzOyAqIEB0eF9jaGFuczogYXJyYXkgb2YgVFggY2hhbm5lbHMgKHNpemUgQG51bV90eF9xdWV1ZXMpCiYjNDM7ICogQHJ4X2NoYW5zOiBhcnJheSBvZiBSWCBjaGFubmVscyAoc2l6ZSBAbnVtX3J4X3F1ZXVlcykKJiM0MzsgKiBAY2xvc2luZzogc2V0IGluIG5kb19zdG9wIHNvIHRoZSBSWCBjb21wbGV0aW9uIGNhbGxiYWNrIHN0b3BzIHJlLWFybWluZwomIzQzOyAqIEBwb3J0X21kOiBwZXItVFVTRVItcG9ydCBNRVRBREFUQV9IV19QT1JUX01VWCBlbnRyaWVzIGF0dGFjaGVkIG9uIFJYLAomIzQzOyAqCWluZGV4ZWQgYnkgcG9ydF9pZCAoMSBmb3IgTUFDMSwgMiBmb3IgTUFDMikKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgeGxueF90c25fZXAgewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2OwomIzQzOwl1MzIgbnVtX3R4X3F1ZXVlczsKJiM0MzsJdTMyIG51bV9yeF9xdWV1ZXM7CiYjNDM7CXUzMiB0eF9kbWFfY2hhbl9tYXBbVFNOX01BWF9UWF9RVUVVRV07CiYjNDM7CXUzMiByeF9jaGFuX251bVtUU05fTUFYX1JYX1FVRVVFXTsKJiM0MzsJdTMyIG1heF9mcm1fc2l6ZTsKJiM0MzsKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoqdHhfY2hhbnM7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnJ4X2NoYW5zOwomIzQzOwomIzQzOwlib29sIGNsb3Npbmc7CiYjNDM7CiYjNDM7CXN0cnVjdCBtZXRhZGF0YV9kc3QgKnBvcnRfbWRbWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UU107CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqCiYjNDM7ZXBfZ2V0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiwgaW50IGlkeCkKJiM0Mzt7CiYjNDM7CXJldHVybiB4Y2hhbi0mZ3Q7c2tiX3JpbmdbaWR4XTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfcnhfc3VibWl0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZG1hX3J4X2Rlc2M7CiYjNDM7CXN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hOwomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0geGNoYW4tJmd0O2VwOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlkbWFfYWRkcl90IGFkZHI7CiYjNDM7CiYjNDM7CXNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi0mZ3Q7cmluZ19oZWFkICZhbXA7ICh4Y2hhbi0mZ3Q7cmluZ19zaXplIC0gMSkpOwomIzQzOwlpZiAoIXNrYnVmX2RtYSkKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwomIzQzOwlza2IgPSBkZXZfYWxsb2Nfc2tiKGVwLSZndDttYXhfZnJtX3NpemUpOwomIzQzOwlpZiAoIXNrYikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlzZ19pbml0X3RhYmxlKHNrYnVmX2RtYS0mZ3Q7c2dsLCAxKTsKJiM0MzsJYWRkciA9IGRtYV9tYXBfc2luZ2xlKHhjaGFuLSZndDtkbWFfZGV2LCBza2ItJmd0O2RhdGEsIGVwLSZndDttYXhfZnJtX3NpemUsCiYjNDM7CQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHhjaGFuLSZndDtkbWFfZGV2LCBhZGRyKSkpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJZGV2X3dhcm4oZXAtJmd0O2RldiwgJiMzNDtETUEgbWFwcGluZyBlcnJvciBvbiBSWCBzdWJtaXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfc2tiOwomIzQzOwl9CiYjNDM7CXNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS0mZ3Q7c2dsKSA9IGFkZHI7CiYjNDM7CXNnX2RtYV9sZW4oc2tidWZfZG1hLSZndDtzZ2wpID0gZXAtJmd0O21heF9mcm1fc2l6ZTsKJiM0MzsJZG1hX3J4X2Rlc2MgPSBkbWFlbmdpbmVfcHJlcF9zbGF2ZV9zZyh4Y2hhbi0mZ3Q7Y2hhbiwgc2tidWZfZG1hLSZndDtzZ2wsCiYjNDM7CQkJCQkgICAgICAxLCBETUFfREVWX1RPX01FTSwKJiM0MzsJCQkJCSAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7CiYjNDM7CWlmICghZG1hX3J4X2Rlc2MpCiYjNDM7CQlnb3RvIGVycl91bm1hcF9za2I7CiYjNDM7CiYjNDM7CXNrYnVmX2RtYS0mZ3Q7c2tiID0gc2tiOwomIzQzOwlza2J1Zl9kbWEtJmd0O2RtYV9hZGRyZXNzID0gc2dfZG1hX2FkZHJlc3Moc2tidWZfZG1hLSZndDtzZ2wpOwomIzQzOwlza2J1Zl9kbWEtJmd0O2Rlc2MgPSBkbWFfcnhfZGVzYzsKJiM0MzsJZG1hX3J4X2Rlc2MtJmd0O2NhbGxiYWNrX3BhcmFtID0geGNoYW47CiYjNDM7CWRtYV9yeF9kZXNjLSZndDtjYWxsYmFja19yZXN1bHQgPSBlcF9kbWFfcnhfY2I7CiYjNDM7CXhjaGFuLSZndDtyaW5nX2hlYWQmIzQzOyYjNDM7OwomIzQzOwlkbWFlbmdpbmVfc3VibWl0KGRtYV9yeF9kZXNjKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3VubWFwX3NrYjoKJiM0MzsJZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi0mZ3Q7ZG1hX2RldiwgYWRkciwgZXAtJmd0O21heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKJiM0MztlcnJfZnJlZV9za2I6CiYjNDM7CWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIC1FTk9NRU07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGVwX3J4X3JlZmlsbChzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuLCBib29sIGFybV90aW1lcikKJiM0Mzt7CiYjNDM7CWludCBhdmFpbCwgaTsKJiM0MzsKJiM0MzsJZ3VhcmQoc3BpbmxvY2tfYmgpKCZhbXA7eGNoYW4tJmd0O3J4X2xvY2spOwomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKHhjaGFuLSZndDtlcC0mZ3Q7Y2xvc2luZykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWF2YWlsID0gQ0lSQ19TUEFDRSh4Y2hhbi0mZ3Q7cmluZ19oZWFkLCBSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCksCiYjNDM7CQkJICAgeGNoYW4tJmd0O3Jpbmdfc2l6ZSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBhdmFpbDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChlcF9yeF9zdWJtaXRfZGVzYyh4Y2hhbikpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoeGNoYW4tJmd0O2NoYW4pOwomIzQzOwomIzQzOwlpZiAoeGNoYW4tJmd0O3JpbmdfaGVhZCAhPSBSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKGFybV90aW1lcikKJiM0MzsJCW1vZF90aW1lcigmYW1wO3hjaGFuLSZndDtyeF9yZWZpbGxfdGltZXIsIGppZmZpZXMgJiM0MzsgRVBfUlhfUkVGSUxMX1JFVFJZKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlcF9yeF9yZWZpbGxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gdGltZXJfY29udGFpbmVyX29mKHhjaGFuLCB0LAomIzQzOwkJCQkJCQkgICAgICAgcnhfcmVmaWxsX3RpbWVyKTsKJiM0MzsKJiM0MzsJZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3J4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CXNpemVfdCBtZXRhX2xlbiwgbWV0YV9tYXhfbGVuLCByeF9sZW47CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSB4Y2hhbi0mZ3Q7ZXA7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZXAtJmd0O25kZXY7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiYjNDM7CXUzMiBwb3J0X2lkLCB0dXNlcjsKJiM0MzsJdTMyICptZXRhZGF0YTsKJiM0MzsKJiM0MzsJc2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLSZndDtyaW5nX3RhaWwgJmFtcDsgKHhjaGFuLSZndDtyaW5nX3NpemUgLSAxKSk7CiYjNDM7CVdSSVRFX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCwgeGNoYW4tJmd0O3JpbmdfdGFpbCAmIzQzOyAxKTsKJiM0MzsJc2tiID0gc2tidWZfZG1hLSZndDtza2I7CiYjNDM7CXNrYnVmX2RtYS0mZ3Q7c2tiID0gTlVMTDsKJiM0MzsKJiM0MzsJZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi0mZ3Q7ZG1hX2Rldiwgc2tidWZfZG1hLSZndDtkbWFfYWRkcmVzcywKJiM0MzsJCQkgZXAtJmd0O21heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsKJiM0MzsJaWYgKHJlc3VsdC0mZ3Q7cmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSB7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCWRldl93YXJuKGVwLSZndDtkZXYsICYjMzQ7UlggRE1BIHRyYW5zZmVyIGVycm9yICVkXG4mIzM0OywKJiM0MzsJCQkJIHJlc3VsdC0mZ3Q7cmVzdWx0KTsKJiM0MzsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQlERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpOwomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpOwomIzQzOwkJZ290byBzdWJtaXRfbmV3OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1ldGFkYXRhID0gZG1hZW5naW5lX2Rlc2NfZ2V0X21ldGFkYXRhX3B0cihza2J1Zl9kbWEtJmd0O2Rlc2MsCiYjNDM7CQkJCQkJICAgJmFtcDttZXRhX2xlbiwKJiM0MzsJCQkJCQkgICAmYW1wO21ldGFfbWF4X2xlbik7CiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChtZXRhZGF0YSkpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJZGV2X3dhcm4oZXAtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IFJYIG1ldGFkYXRhIHBvaW50ZXJcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CQlERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpOwomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpOwomIzQzOwkJZ290byBzdWJtaXRfbmV3OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIE1DRE1BIG1ldGFkYXRhOiBbMF0gPSBzdGF0dXMsIFsxXSA9IHNpZGViYW5kIChUSUQvVERFU1QvVFVTRVIpLCBbMi4uXSA9IGFwcCAqLwomIzQzOwl0dXNlciA9IG1ldGFkYXRhWzFdICZhbXA7IFRTTl9UVVNFUl9NQVNLOwomIzQzOwlyeF9sZW4gPSBlcC0mZ3Q7bWF4X2ZybV9zaXplIC0gcmVzdWx0LSZndDtyZXNpZHVlOwomIzQzOwomIzQzOwlpZiAocnhfbGVuICZndDsgZXAtJmd0O21heF9mcm1fc2l6ZSB8fCByeF9sZW4gJmx0OyBFVEhfSExFTikgewomIzQzOwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKJiM0MzsJCQlkZXZfd2FybihlcC0mZ3Q7ZGV2LCAmIzM0O0ludmFsaWQgUlggbGVuZ3RoICV6dSAobWF4PSV1LCBtaW49JXUpXG4mIzM0OywKJiM0MzsJCQkJIHJ4X2xlbiwgZXAtJmd0O21heF9mcm1fc2l6ZSwgRVRIX0hMRU4pOwomIzQzOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJCURFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7CiYjNDM7CQlERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7CiYjNDM7CQlnb3RvIHN1Ym1pdF9uZXc7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcG9ydF9pZCA9IEZJRUxEX0dFVChUU05fVFVTRVJfUE9SVF9JRF9NQVNLLCB0dXNlcik7CiYjNDM7CWlmIChwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzEgJmFtcDsmYW1wOyBwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzIpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJZGV2X2RiZyhlcC0mZ3Q7ZGV2LCAmIzM0O1JYIGRyb3BwaW5nIHVuZXhwZWN0ZWQgVFVTRVIgcG9ydF9pZD0ldVxuJiMzNDssCiYjNDM7CQkJCXBvcnRfaWQpOwomIzQzOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJCURFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7CiYjNDM7CQlnb3RvIHN1Ym1pdF9uZXc7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiX3B1dChza2IsIHJ4X2xlbik7CiYjNDM7CWlmIChuZXRkZXZfdXNlc19kc2EobmRldikpIHsKJiM0MzsJCWRzdF9ob2xkKCZhbXA7ZXAtJmd0O3BvcnRfbWRbcG9ydF9pZF0tJmd0O2RzdCk7CiYjNDM7CQlza2JfZHN0X3NldChza2IsICZhbXA7ZXAtJmd0O3BvcnRfbWRbcG9ydF9pZF0tJmd0O2RzdCk7CiYjNDM7CX0KJiM0MzsJc2tiLSZndDtkZXYgPSBuZGV2OwomIzQzOwlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKJiM0MzsJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwomIzQzOwlfX25ldGlmX3J4KHNrYik7CiYjNDM7CiYjNDM7CURFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7CiYjNDM7CURFVl9TVEFUU19BREQobmRldiwgcnhfYnl0ZXMsIHJ4X2xlbik7CiYjNDM7CiYjNDM7c3VibWl0X25ldzoKJiM0MzsJZXBfcnhfcmVmaWxsKHhjaGFuLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZG1hX3R4X2NiKHZvaWQgKmRhdGEsIGNvbnN0IHN0cnVjdCBkbWFlbmdpbmVfcmVzdWx0ICpyZXN1bHQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiYjNDM7CXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwomIzQzOwlpbnQgc2dfbGVuOwomIzQzOwlpbnQgbGVuOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7eGNoYW4tJmd0O3R4X2xvY2spIHsKJiM0MzsJCXNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLAomIzQzOwkJCQkJeGNoYW4tJmd0O3JpbmdfdGFpbCAmYW1wOyAoeGNoYW4tJmd0O3Jpbmdfc2l6ZSAtIDEpKTsKJiM0MzsJCWlmICghc2tidWZfZG1hIHx8ICFza2J1Zl9kbWEtJmd0O3NrYikKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQlza2IgPSBza2J1Zl9kbWEtJmd0O3NrYjsKJiM0MzsJCXNnbCA9IHNrYnVmX2RtYS0mZ3Q7c2dsOwomIzQzOwkJc2dfbGVuID0gc2tidWZfZG1hLSZndDtzZ19sZW47CiYjNDM7CiYjNDM7CQlkbWFfdW5tYXBfc2coeGNoYW4tJmd0O2RtYV9kZXYsIHNnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MzsKJiM0MzsJCXNrYnVmX2RtYS0mZ3Q7c2tiID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCwgeGNoYW4tJmd0O3JpbmdfdGFpbCAmIzQzOyAxKTsKJiM0MzsJfQomIzQzOwomIzQzOwluZGV2ID0gc2tiLSZndDtkZXY7CiYjNDM7CXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwomIzQzOwlsZW4gPSBza2ItJmd0O2xlbjsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KHJlc3VsdC0mZ3Q7cmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSkgewomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCB0eF9lcnJvcnMpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJREVWX1NUQVRTX0lOQyhuZGV2LCB0eF9wYWNrZXRzKTsKJiM0MzsJCURFVl9TVEFUU19BREQobmRldiwgdHhfYnl0ZXMsIGxlbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOwomIzQzOwluZXRpZl90eHFfY29tcGxldGVkX3dha2UodHhxLCAxLCBsZW4sCiYjNDM7CQkJCSBDSVJDX1NQQUNFKFJFQURfT05DRSh4Y2hhbi0mZ3Q7cmluZ19oZWFkKSwKJiM0MzsJCQkJCSAgICBSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCksCiYjNDM7CQkJCQkgICAgeGNoYW4tJmd0O3Jpbmdfc2l6ZSksIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgZXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZG1hX3R4X2Rlc2M7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CWludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwomIzQzOwlzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuOwomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiYjNDM7CWludCBzZ19sZW4sIG5lbnRzLCByZXQ7CiYjNDM7CWRtYV9jb29raWVfdCBjb29raWU7CiYjNDM7CiYjNDM7CWlmICh1bmxpa2VseShxdWV1ZSAmZ3Q7PSBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcykpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJbmV0ZGV2X3dhcm4obmRldiwgJiMzNDtJbnZhbGlkIFRYIHF1ZXVlICVkIChtYXggJXUpXG4mIzM0OywKJiM0MzsJCQkJICAgIHF1ZXVlLCBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcyk7CiYjNDM7CQlnb3RvIGVycl9kcm9wX3NrYjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZXAtJmd0O3R4X2RtYV9jaGFuX21hcFtxdWV1ZV0gPT0gVFNOX0RNQV9DSF9JTlZBTElEKSB7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCW5ldGRldl93YXJuKG5kZXYsICYjMzQ7TG9naWNhbCBUWCBxdWV1ZSAlZCBoYXMgaW52YWxpZCBETUEgbWFwcGluZ1xuJiMzNDssCiYjNDM7CQkJCSAgICBxdWV1ZSk7CiYjNDM7CQlnb3RvIGVycl9kcm9wX3NrYjsKJiM0MzsJfQomIzQzOwomIzQzOwl4Y2hhbiA9IGVwLSZndDt0eF9jaGFuc1txdWV1ZV07CiYjNDM7CiYjNDM7CXNnX2xlbiA9IHNrYl9zaGluZm8oc2tiKS0mZ3Q7bnJfZnJhZ3MgJiM0MzsgMTsKJiM0MzsJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShuZGV2LCBxdWV1ZSk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3hjaGFuLSZndDt0eF9sb2NrKTsKJiM0MzsJaWYgKENJUkNfU1BBQ0UoeGNoYW4tJmd0O3JpbmdfaGVhZCwgUkVBRF9PTkNFKHhjaGFuLSZndDtyaW5nX3RhaWwpLAomIzQzOwkJICAgICAgIHhjaGFuLSZndDtyaW5nX3NpemUpICZsdDs9IDEpIHsKJiM0MzsJCW5ldGlmX3R4cV90cnlfc3RvcCh0eHEsCiYjNDM7CQkJCSAgIENJUkNfU1BBQ0UoeGNoYW4tJmd0O3JpbmdfaGVhZCwKJiM0MzsJCQkJCSAgICAgIFJFQURfT05DRSh4Y2hhbi0mZ3Q7cmluZ190YWlsKSwKJiM0MzsJCQkJCSAgICAgIHhjaGFuLSZndDtyaW5nX3NpemUpLAomIzQzOwkJCQkgICAyKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGNoYW4tJmd0O3R4X2xvY2spOwomIzQzOwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKJiM0MzsJCQluZXRkZXZfd2FybihuZGV2LCAmIzM0O1RTTiBUWCByaW5nIGZ1bGxcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfQlVTWTsKJiM0MzsJfQomIzQzOwomIzQzOwlza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbiwgeGNoYW4tJmd0O3JpbmdfaGVhZCAmYW1wOyAoeGNoYW4tJmd0O3Jpbmdfc2l6ZSAtIDEpKTsKJiM0MzsJaWYgKCFza2J1Zl9kbWEpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGNoYW4tJmd0O3R4X2xvY2spOwomIzQzOwkJZ290byBlcnJfZHJvcF9za2I7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt4Y2hhbi0mZ3Q7dHhfbG9jayk7CiYjNDM7CiYjNDM7CXNnX2luaXRfdGFibGUoc2tidWZfZG1hLSZndDtzZ2wsIHNnX2xlbik7CiYjNDM7CXJldCA9IHNrYl90b19zZ3ZlYyhza2IsIHNrYnVmX2RtYS0mZ3Q7c2dsLCAwLCBza2ItJmd0O2xlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfZHJvcF9za2I7CiYjNDM7CXNnX2xlbiA9IHJldDsKJiM0MzsKJiM0MzsJbmVudHMgPSBkbWFfbWFwX3NnKHhjaGFuLSZndDtkbWFfZGV2LCBza2J1Zl9kbWEtJmd0O3NnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MzsJaWYgKCFuZW50cykKJiM0MzsJCWdvdG8gZXJyX2Ryb3Bfc2tiOwomIzQzOwomIzQzOwlkbWFfdHhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLSZndDtjaGFuLCBza2J1Zl9kbWEtJmd0O3NnbCwKJiM0MzsJCQkJCSAgICAgIG5lbnRzLCBETUFfTUVNX1RPX0RFViwKJiM0MzsJCQkJCSAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7CiYjNDM7CWlmICghZG1hX3R4X2Rlc2MpCiYjNDM7CQlnb3RvIGVycl91bm1hcF9zZzsKJiM0MzsKJiM0MzsJc2tidWZfZG1hLSZndDtza2IgPSBza2I7CiYjNDM7CXNrYnVmX2RtYS0mZ3Q7c2dfbGVuID0gc2dfbGVuOwomIzQzOwlkbWFfdHhfZGVzYy0mZ3Q7Y2FsbGJhY2tfcGFyYW0gPSB4Y2hhbjsKJiM0MzsJZG1hX3R4X2Rlc2MtJmd0O2NhbGxiYWNrX3Jlc3VsdCA9IGVwX2RtYV90eF9jYjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7eGNoYW4tJmd0O3R4X2xvY2spOwomIzQzOwljb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRtYV90eF9kZXNjKTsKJiM0MzsJaWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt4Y2hhbi0mZ3Q7dHhfbG9jayk7CiYjNDM7CQlza2J1Zl9kbWEtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQlnb3RvIGVycl91bm1hcF9zZzsKJiM0MzsJfQomIzQzOwlXUklURV9PTkNFKHhjaGFuLSZndDtyaW5nX2hlYWQsIHhjaGFuLSZndDtyaW5nX2hlYWQgJiM0MzsgMSk7CiYjNDM7CW5ldGRldl90eF9zZW50X3F1ZXVlKHR4cSwgc2tiLSZndDtsZW4pOwomIzQzOwluZXRpZl90eHFfbWF5YmVfc3RvcCh0eHEsCiYjNDM7CQkJICAgICBDSVJDX1NQQUNFKHhjaGFuLSZndDtyaW5nX2hlYWQsCiYjNDM7CQkJCQlSRUFEX09OQ0UoeGNoYW4tJmd0O3JpbmdfdGFpbCksCiYjNDM7CQkJCQl4Y2hhbi0mZ3Q7cmluZ19zaXplKSwKJiM0MzsJCQkgICAgIDIsIDIpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3hjaGFuLSZndDt0eF9sb2NrKTsKJiM0MzsKJiM0MzsJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoeGNoYW4tJmd0O2NoYW4pOwomIzQzOwomIzQzOwlyZXR1cm4gTkVUREVWX1RYX09LOwomIzQzOwomIzQzO2Vycl91bm1hcF9zZzoKJiM0MzsJZG1hX3VubWFwX3NnKHhjaGFuLSZndDtkbWFfZGV2LCBza2J1Zl9kbWEtJmd0O3NnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MztlcnJfZHJvcF9za2I6CiYjNDM7CWRldl9rZnJlZV9za2JfYW55KHNrYik7CiYjNDM7CURFVl9TVEFUU19JTkMobmRldiwgdHhfZHJvcHBlZCk7CiYjNDM7CXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7CiYjNDM7c3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlXUklURV9PTkNFKGVwLSZndDtjbG9zaW5nLCBmYWxzZSk7CiYjNDM7CiYjNDM7CXJldCA9IGVwX2luaXRfZG1hZW5naW5lKGVwKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJbmV0ZGV2X2VycihuZGV2LCAmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIERNQSBlbmdpbmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUobmRldik7CiYjNDM7CVdSSVRFX09OQ0UoZXAtJmd0O2Nsb3NpbmcsIHRydWUpOwomIzQzOwllcF9leGl0X2RtYWVuZ2luZShlcCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuZGV2LSZndDtudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl90eF9yZXNldF9zdWJxdWV1ZShuZGV2LCBpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICplZCkKJiM0Mzt7CiYjNDM7CXN0cnNjcHkoZWQtJmd0O2RyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihlZC0mZ3Q7ZHJpdmVyKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXBfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5kb19vcGVuCQk9IGVwX29wZW4sCiYjNDM7CS5uZG9fc3RvcAkJPSBlcF9zdG9wLAomIzQzOwkubmRvX3N0YXJ0X3htaXQJCT0gZXBfc3RhcnRfeG1pdCwKJiM0MzsJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiYjNDM7CS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlcF9ldGh0b29sX29wcyA9IHsKJiM0MzsJLmdldF9kcnZpbmZvCT0gZXBfZ2V0X2RydmluZm8sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoKJiM0MztlcF9hbGxvY19kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXAgKmVwLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX3R4LAomIzQzOwkJICBpbnQgcmluZ19zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuOwomIzQzOwlzdHJ1Y3QgZG1hX2NoYW4gKmVycl9jaGFuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJY2hhbiA9IGt6YWxsb2Nfb2JqKCpjaGFuKTsKJiM0MzsJaWYgKCFjaGFuKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWNoYW4tJmd0O2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLSZndDtkZXYsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKGNoYW4tJmd0O2NoYW4pKSB7CiYjNDM7CQllcnJfY2hhbiA9IGNoYW4tJmd0O2NoYW47CiYjNDM7CQlrZnJlZShjaGFuKTsKJiM0MzsJCXJldHVybiBFUlJfQ0FTVChlcnJfY2hhbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY2hhbi0mZ3Q7c2tiX3JpbmcgPSBrY2FsbG9jKHJpbmdfc2l6ZSwgc2l6ZW9mKCpjaGFuLSZndDtza2JfcmluZyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNoYW4tJmd0O3NrYl9yaW5nKSB7CiYjNDM7CQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tJmd0O2NoYW4pOwomIzQzOwkJa2ZyZWUoY2hhbik7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmluZ19zaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY2hhbi0mZ3Q7c2tiX3JpbmdbaV0gPSBremFsbG9jX29iaigqY2hhbi0mZ3Q7c2tiX3JpbmdbaV0pOwomIzQzOwkJaWYgKCFjaGFuLSZndDtza2JfcmluZ1tpXSkgewomIzQzOwkJCXdoaWxlICgtLWkgJmd0Oz0gMCkKJiM0MzsJCQkJa2ZyZWUoY2hhbi0mZ3Q7c2tiX3JpbmdbaV0pOwomIzQzOwkJCWtmcmVlKGNoYW4tJmd0O3NrYl9yaW5nKTsKJiM0MzsJCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tJmd0O2NoYW4pOwomIzQzOwkJCWtmcmVlKGNoYW4pOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWNoYW4tJmd0O2lzX3R4ID0gaXNfdHg7CiYjNDM7CWNoYW4tJmd0O2VwID0gZXA7CiYjNDM7CWNoYW4tJmd0O3Jpbmdfc2l6ZSA9IHJpbmdfc2l6ZTsKJiM0MzsJY2hhbi0mZ3Q7ZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLSZndDtjaGFuKTsKJiM0MzsJaWYgKGlzX3R4KSB7CiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO2NoYW4tJmd0O3R4X2xvY2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDtjaGFuLSZndDtyeF9sb2NrKTsKJiM0MzsJCXRpbWVyX3NldHVwKCZhbXA7Y2hhbi0mZ3Q7cnhfcmVmaWxsX3RpbWVyLCBlcF9yeF9yZWZpbGxfdGltZXIsIDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjaGFuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlcF9mcmVlX2RtYV9jaGFuKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqY2hhbikKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoIWNoYW4pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChjaGFuLSZndDtjaGFuKSB7CiYjNDM7CQlpZiAoIWNoYW4tJmd0O2lzX3R4KSB7CiYjNDM7CQkJLyogZXBfc3RvcCgpIHNldHMgY2xvc2luZyBiZWZvcmUgdGVhcmRvd24uIFRha2UgcnhfbG9jawomIzQzOwkJCSAqIHNvIGFueSByZWZpbGwgdGhhdCBhbHJlYWR5IHBhc3NlZCB0aGUgY2xvc2luZyBjaGVjawomIzQzOwkJCSAqIGZpbmlzaGVzIGFuZCBubyBsYXRlciBvbmUgc3VibWl0cyBvciBhcm1zIHRoZSB0aW1lciwKJiM0MzsJCQkgKiB0aGVuIHNodXQgZG93biB0aGUgdGltZXIgc28gaXQgY2Fubm90IGJlIHJlYXJtZWQKJiM0MzsJCQkgKiBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgZnJlZWQuCiYjNDM7CQkJICovCiYjNDM7CQkJc3Bpbl9sb2NrX2JoKCZhbXA7Y2hhbi0mZ3Q7cnhfbG9jayk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjaGFuLSZndDtyeF9sb2NrKTsKJiM0MzsJCQl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7Y2hhbi0mZ3Q7cnhfcmVmaWxsX3RpbWVyKTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRtYWVuZ2luZV90ZXJtaW5hdGVfc3luYyhjaGFuLSZndDtjaGFuKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoY2hhbi0mZ3Q7aXNfdHgpIHsKJiM0MzsJCXdoaWxlIChjaGFuLSZndDtyaW5nX3RhaWwgIT0gY2hhbi0mZ3Q7cmluZ19oZWFkKSB7CiYjNDM7CQkJc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7CiYjNDM7CiYjNDM7CQkJc2tidWZfZG1hID0gY2hhbi0mZ3Q7c2tiX3JpbmdbY2hhbi0mZ3Q7cmluZ190YWlsICZhbXA7CiYjNDM7CQkJCQkJICAoY2hhbi0mZ3Q7cmluZ19zaXplIC0gMSldOwomIzQzOwkJCWlmIChza2J1Zl9kbWEgJmFtcDsmYW1wOyBza2J1Zl9kbWEtJmd0O3NrYikgewomIzQzOwkJCQlkbWFfdW5tYXBfc2coY2hhbi0mZ3Q7ZG1hX2Rldiwgc2tidWZfZG1hLSZndDtzZ2wsCiYjNDM7CQkJCQkgICAgIHNrYnVmX2RtYS0mZ3Q7c2dfbGVuLCBETUFfVE9fREVWSUNFKTsKJiM0MzsJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tidWZfZG1hLSZndDtza2IpOwomIzQzOwkJCQlza2J1Zl9kbWEtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJCWNoYW4tJmd0O3JpbmdfdGFpbCYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNoYW4tJmd0O3NrYl9yaW5nKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgY2hhbi0mZ3Q7cmluZ19zaXplOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hID0gY2hhbi0mZ3Q7c2tiX3JpbmdbaV07CiYjNDM7CiYjNDM7CQkJaWYgKHNrYnVmX2RtYSAmYW1wOyZhbXA7ICFjaGFuLSZndDtpc190eCAmYW1wOyZhbXA7IHNrYnVmX2RtYS0mZ3Q7c2tiKSB7CiYjNDM7CQkJCWRtYV91bm1hcF9zaW5nbGUoY2hhbi0mZ3Q7ZG1hX2RldiwKJiM0MzsJCQkJCQkgc2tidWZfZG1hLSZndDtkbWFfYWRkcmVzcywKJiM0MzsJCQkJCQkgY2hhbi0mZ3Q7ZXAtJmd0O21heF9mcm1fc2l6ZSwKJiM0MzsJCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tidWZfZG1hLSZndDtza2IpOwomIzQzOwkJCX0KJiM0MzsJCQlrZnJlZShjaGFuLSZndDtza2JfcmluZ1tpXSk7CiYjNDM7CQl9CiYjNDM7CQlrZnJlZShjaGFuLSZndDtza2JfcmluZyk7CiYjNDM7CX0KJiM0MzsJaWYgKGNoYW4tJmd0O2NoYW4pCiYjNDM7CQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tJmd0O2NoYW4pOwomIzQzOwomIzQzOwlrZnJlZShjaGFuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAoZXAtJmd0O3R4X2NoYW5zKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgZXAtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWVwX2ZyZWVfZG1hX2NoYW4oZXAtJmd0O3R4X2NoYW5zW2ldKTsKJiM0MzsJCWtmcmVlKGVwLSZndDt0eF9jaGFucyk7CiYjNDM7CQllcC0mZ3Q7dHhfY2hhbnMgPSBOVUxMOwomIzQzOwl9CiYjNDM7CWlmIChlcC0mZ3Q7cnhfY2hhbnMpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBlcC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZXBfZnJlZV9kbWFfY2hhbihlcC0mZ3Q7cnhfY2hhbnNbaV0pOwomIzQzOwkJa2ZyZWUoZXAtJmd0O3J4X2NoYW5zKTsKJiM0MzsJCWVwLSZndDtyeF9jaGFucyA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlcF9pbml0X2RtYWVuZ2luZShzdHJ1Y3QgeGxueF90c25fZXAgKmVwKQomIzQzO3sKJiM0MzsJaW50IHR4X2FsbG9jYXRlZCA9IDAsIHJ4X2FsbG9jYXRlZCA9IDA7CiYjNDM7CWNoYXIgbmFtZVsxNl07CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CWVwLSZndDt0eF9jaGFucyA9IGtjYWxsb2MoZXAtJmd0O251bV90eF9xdWV1ZXMsIHNpemVvZigqZXAtJmd0O3R4X2NoYW5zKSwKJiM0MzsJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXAtJmd0O3R4X2NoYW5zKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWVwLSZndDtyeF9jaGFucyA9IGtjYWxsb2MoZXAtJmd0O251bV9yeF9xdWV1ZXMsIHNpemVvZigqZXAtJmd0O3J4X2NoYW5zKSwKJiM0MzsJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXAtJmd0O3J4X2NoYW5zKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfZnJlZV90eDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZXAtJmd0O251bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICYjMzQ7dHhfY2hhbiV1JiMzNDssIGVwLSZndDt0eF9kbWFfY2hhbl9tYXBbaV0pOwomIzQzOwkJZXAtJmd0O3R4X2NoYW5zW2ldID0gZXBfYWxsb2NfZG1hX2NoYW4oZXAsIG5hbWUsIHRydWUsCiYjNDM7CQkJCQkJICAgIFRYX0JEX05VTV9ERUZBVUxUKTsKJiM0MzsJCWlmIChJU19FUlIoZXAtJmd0O3R4X2NoYW5zW2ldKSkgewomIzQzOwkJCXJldCA9IFBUUl9FUlIoZXAtJmd0O3R4X2NoYW5zW2ldKTsKJiM0MzsJCQllcC0mZ3Q7dHhfY2hhbnNbaV0gPSBOVUxMOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfY2hhbnM7CiYjNDM7CQl9CiYjNDM7CQl0eF9hbGxvY2F0ZWQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBlcC0mZ3Q7bnVtX3J4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDtyeF9jaGFuJXUmIzM0OywgZXAtJmd0O3J4X2NoYW5fbnVtW2ldKTsKJiM0MzsJCWVwLSZndDtyeF9jaGFuc1tpXSA9IGVwX2FsbG9jX2RtYV9jaGFuKGVwLCBuYW1lLCBmYWxzZSwKJiM0MzsJCQkJCQkgICAgUlhfQkRfTlVNX0RFRkFVTFQpOwomIzQzOwkJaWYgKElTX0VSUihlcC0mZ3Q7cnhfY2hhbnNbaV0pKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihlcC0mZ3Q7cnhfY2hhbnNbaV0pOwomIzQzOwkJCWVwLSZndDtyeF9jaGFuc1tpXSA9IE5VTEw7CiYjNDM7CQkJZ290byBlcnJfZnJlZV9jaGFuczsKJiM0MzsJCX0KJiM0MzsJCXJ4X2FsbG9jYXRlZCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGVwLSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFlcF9yeF9yZWZpbGwoZXAtJmd0O3J4X2NoYW5zW2ldLCBmYWxzZSkpIHsKJiM0MzsJCQlkZXZfZXJyKGVwLSZndDtkZXYsICYjMzQ7UlggY2hhbm5lbCAlZDogbm8gZGVzY3JpcHRvcnMgYXJtZWRcbiYjMzQ7LAomIzQzOwkJCQlpKTsKJiM0MzsJCQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfY2hhbnM7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWVfY2hhbnM6CiYjNDM7CVdSSVRFX09OQ0UoZXAtJmd0O2Nsb3NpbmcsIHRydWUpOwomIzQzOwl3aGlsZSAoLS1yeF9hbGxvY2F0ZWQgJmd0Oz0gMCkKJiM0MzsJCWVwX2ZyZWVfZG1hX2NoYW4oZXAtJmd0O3J4X2NoYW5zW3J4X2FsbG9jYXRlZF0pOwomIzQzOwl3aGlsZSAoLS10eF9hbGxvY2F0ZWQgJmd0Oz0gMCkKJiM0MzsJCWVwX2ZyZWVfZG1hX2NoYW4oZXAtJmd0O3R4X2NoYW5zW3R4X2FsbG9jYXRlZF0pOwomIzQzOwlrZnJlZShlcC0mZ3Q7cnhfY2hhbnMpOwomIzQzOwllcC0mZ3Q7cnhfY2hhbnMgPSBOVUxMOwomIzQzO2Vycl9mcmVlX3R4OgomIzQzOwlrZnJlZShlcC0mZ3Q7dHhfY2hhbnMpOwomIzQzOwllcC0mZ3Q7dHhfY2hhbnMgPSBOVUxMOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGlsaW54X3ZkbWFfY29uZmlnIGNmZyA9IHsgLnJlc2V0ID0gMSB9OwomIzQzOwlzdHJ1Y3QgZG1hX2NoYW4gKnJlc2V0X2NoYW47CiYjNDM7CWNoYXIgbmFtZVsxNl07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgJiMzNDt0eF9jaGFuJXUmIzM0OywgZXAtJmd0O3R4X2RtYV9jaGFuX21hcFswXSk7CiYjNDM7CXJlc2V0X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLSZndDtkZXYsIG5hbWUpOwomIzQzOwlpZiAoSVNfRVJSKHJlc2V0X2NoYW4pKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtJmd0O2RldiwgUFRSX0VSUihyZXNldF9jaGFuKSwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZXF1ZXN0ICVzIGZvciByZXNldFxuJiMzNDssIG5hbWUpOwomIzQzOwomIzQzOwlyZXQgPSB4aWxpbnhfdmRtYV9jaGFubmVsX3NldF9jb25maWcocmVzZXRfY2hhbiwgJmFtcDtjZmcpOwomIzQzOwlkbWFfcmVsZWFzZV9jaGFubmVsKHJlc2V0X2NoYW4pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGVwLSZndDtkZXYsIHJldCwKJiM0MzsJCQkJICAgICAmIzM0O2ZhaWxlZCB0byByZXNldCBETUEgY29udHJvbGxlclxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBQYXJzZSB0aGUgJiMzNDt0eC1xdWV1ZXMtY29uZmlnJiMzNDsgY2hpbGQgb2YgdGhlIEVQIG5vZGUuIFRoZSBsb2dpY2FsIHF1ZXVlCiYjNDM7ICogaW5kZXggaXMgdGFrZW4gZnJvbSB0aGUgJiMzNDtxdWV1ZSZsdDtOJmd0OyYjMzQ7IG5vZGUgbmFtZSwgc28gdGhlIG1hcHBpbmcgZG9lcyBub3QKJiM0MzsgKiBkZXBlbmQgb24gdGhlIG9yZGVyIHRoZSBjaGlsZCBub2RlcyBhcHBlYXIgaW4gdGhlIGRldmljZSB0cmVlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wLCB1MTYgdHhfcHJlc2VudCkKJiM0Mzt7CiYjNDM7CURFQ0xBUkVfQklUTUFQKHF1ZXVlX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307CiYjNDM7CURFQ0xBUkVfQklUTUFQKGNoYW5fc2VlbiwgVFNOX01BWF9UWF9RVUVVRSkgPSB7fTsKJiM0MzsJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQodHhjZmdfbnAsIHFub2RlKSB7CiYjNDM7CQl1MzIgY2hhbiwgcXVldWU7CiYjNDM7CiYjNDM7CQlpZiAoIXN0cl9oYXNfcHJlZml4KHFub2RlLSZndDtuYW1lLCAmIzM0O3F1ZXVlJiMzNDspIHx8CiYjNDM7CQkgICAga3N0cnRvdTMyKHFub2RlLSZndDtuYW1lICYjNDM7IHN0cmxlbigmIzM0O3F1ZXVlJiMzNDspLCAxMCwgJmFtcDtxdWV1ZSkgfHwKJiM0MzsJCSAgICBxdWV1ZSAmZ3Q7PSBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcykKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O3R4LWNvbmZpZzogaW52YWxpZCBxdWV1ZSBub2RlICVwT0ZuIChoYXZlICV1IHF1ZXVlcylcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBxbm9kZSwgZXAtJmd0O251bV90eF9xdWV1ZXMpOwomIzQzOwomIzQzOwkJaWYgKHRlc3RfYW5kX3NldF9iaXQocXVldWUsIHF1ZXVlX3NlZW4pKQomIzQzOwkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGVwLSZndDtkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkgICAgICYjMzQ7dHgtY29uZmlnOiBxdWV1ZSAldSBkZXNjcmliZWQgdHdpY2VcbiYjMzQ7LAomIzQzOwkJCQkJICAgICBxdWV1ZSk7CiYjNDM7CiYjNDM7CQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihxbm9kZSwgJiMzNDt4bG54LGRtYS1jaGFubmVsLW51bSYjMzQ7LCAmYW1wO2NoYW4pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC0mZ3Q7ZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7dHgtY29uZmlnOiBxdWV1ZSAldSBtaXNzaW5nIHhsbngsZG1hLWNoYW5uZWwtbnVtXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgcXVldWUpOwomIzQzOwomIzQzOwkJaWYgKGNoYW4gJmd0Oz0gVFNOX01BWF9UWF9RVUVVRSB8fCAhKHR4X3ByZXNlbnQgJmFtcDsgQklUKGNoYW4pKSkKJiM0MzsJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC0mZ3Q7ZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkJICAgICAmIzM0O3R4LWNvbmZpZzogcXVldWUgJXUgbWFwcyB0byBjaGFubmVsICV1IG5vdCBwcmVzZW50IGluIGRtYS1uYW1lc1xuJiMzNDssCiYjNDM7CQkJCQkgICAgIHF1ZXVlLCBjaGFuKTsKJiM0MzsKJiM0MzsJCWlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW4sIGNoYW5fc2VlbikpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJCSAgICAgJiMzNDt0eC1jb25maWc6IGNoYW5uZWwgJXUgYWxyZWFkeSBhc3NpZ25lZCB0byBhbm90aGVyIHF1ZXVlXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgY2hhbik7CiYjNDM7CiYjNDM7CQllcC0mZ3Q7dHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9IGNoYW47CiYjNDM7CQljb3VudCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNvdW50ICE9IGVwLSZndDtudW1fdHhfcXVldWVzKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtJmd0O2RldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O3R4LWNvbmZpZzogZGVzY3JpYmVkICV1IHF1ZXVlcyBidXQgZXhwZWN0ZWQgJXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgIGNvdW50LCBlcC0mZ3Q7bnVtX3R4X3F1ZXVlcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVwX2NvdW50X2RtYV9xdWV1ZXMoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgKm91dF90eCwgdTMyICpvdXRfcngsCiYjNDM7CQkJICAgICAgIHUxNiAqdHhfcHJlc2VudCwgdTMyICpyeF9jaGFuX251bSkKJiM0Mzt7CiYjNDM7CXUzMiB0eCA9IDAsIHJ4ID0gMDsKJiM0MzsJdTE2IHJ4X3ByZXNlbnQgPSAwOwomIzQzOwlpbnQgbiwgaSwgcmV0OwomIzQzOwomIzQzOwluID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkZXYtJmd0O29mX25vZGUsICYjMzQ7ZG1hLW5hbWVzJiMzNDspOwomIzQzOwlpZiAobiAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIG4sICYjMzQ7ZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3QgY2hhciAqbmFtZTsKJiM0MzsJCXNpemVfdCBwbGVuOwomIzQzOwkJdTMyIGlkeDsKJiM0MzsKJiM0MzsJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2luZGV4KGRldi0mZ3Q7b2Zfbm9kZSwgJiMzNDtkbWEtbmFtZXMmIzM0OywKJiM0MzsJCQkJCQkgICAgaSwgJmFtcDtuYW1lKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxuJiMzNDssIGkpOwomIzQzOwomIzQzOwkJcGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsICYjMzQ7dHhfY2hhbiYjMzQ7KTsKJiM0MzsJCWlmIChwbGVuKSB7CiYjNDM7CQkJaWYgKGtzdHJ0b3UzMihuYW1lICYjNDM7IHBsZW4sIDEwLCAmYW1wO2lkeCkgfHwKJiM0MzsJCQkgICAgaWR4ICZndDs9IFRTTl9NQVhfVFhfUVVFVUUpCiYjNDM7CQkJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJCQkgICAgICYjMzQ7aW52YWxpZCBUWCBjaGFubmVsIG5hbWUgJXNcbiYjMzQ7LAomIzQzOwkJCQkJCSAgICAgbmFtZSk7CiYjNDM7CiYjNDM7CQkJaWYgKCp0eF9wcmVzZW50ICZhbXA7IEJJVChpZHgpKQomIzQzOwkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkJICAgICAmIzM0O2R1cGxpY2F0ZSBUWCBjaGFubmVsICVzXG4mIzM0OywKJiM0MzsJCQkJCQkgICAgIG5hbWUpOwomIzQzOwomIzQzOwkJCSp0eF9wcmVzZW50IHw9IEJJVChpZHgpOwomIzQzOwkJCXR4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXBsZW4gPSBzdHJfaGFzX3ByZWZpeChuYW1lLCAmIzM0O3J4X2NoYW4mIzM0Oyk7CiYjNDM7CQlpZiAocGxlbikgewomIzQzOwkJCWlmIChrc3RydG91MzIobmFtZSAmIzQzOyBwbGVuLCAxMCwgJmFtcDtpZHgpIHx8CiYjNDM7CQkJICAgIGlkeCAmZ3Q7PSBUU05fTUFYX1JYX1FVRVVFKQomIzQzOwkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkJICAgICAmIzM0O2ludmFsaWQgUlggY2hhbm5lbCBuYW1lICVzXG4mIzM0OywKJiM0MzsJCQkJCQkgICAgIG5hbWUpOwomIzQzOwomIzQzOwkJCWlmIChyeF9wcmVzZW50ICZhbXA7IEJJVChpZHgpKQomIzQzOwkJCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCQkJICAgICAmIzM0O2R1cGxpY2F0ZSBSWCBjaGFubmVsICVzXG4mIzM0OywKJiM0MzsJCQkJCQkgICAgIG5hbWUpOwomIzQzOwomIzQzOwkJCXJ4X3ByZXNlbnQgfD0gQklUKGlkeCk7CiYjNDM7CQkJcnhfY2hhbl9udW1bcnhdID0gaWR4OwomIzQzOwkJCXJ4JiM0MzsmIzQzOzsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwKJiM0MzsJCQkJICAgICAmIzM0O3VucmVjb2duaXNlZCBkbWEtbmFtZXMgZW50cnkgJXNcbiYjMzQ7LCBuYW1lKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXR4KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLAomIzQzOwkJCQkgICAgICYjMzQ7bm8gVFggY2hhbm5lbHMgaW4gZG1hLW5hbWVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICghcngpCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAgJiMzNDtubyBSWCBjaGFubmVscyBpbiBkbWEtbmFtZXNcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJKm91dF90eCA9IHR4OwomIzQzOwkqb3V0X3J4ID0gcng7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlcF9mcmVlX3BvcnRfbWQoc3RydWN0IHhsbnhfdHNuX2VwICplcCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChlcC0mZ3Q7cG9ydF9tZFtpXSkgewomIzQzOwkJCWRzdF9yZWxlYXNlKCZhbXA7ZXAtJmd0O3BvcnRfbWRbaV0tJmd0O2RzdCk7CiYjNDM7CQkJZXAtJmd0O3BvcnRfbWRbaV0gPSBOVUxMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZXBfYWxsb2NfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IFRTTl9UVVNFUl9QT1JUX01BQzE7IGkgJmx0Oz0gVFNOX1RVU0VSX1BPUlRfTUFDMjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBtZXRhZGF0YV9kc3QgKm1kOwomIzQzOwomIzQzOwkJbWQgPSBtZXRhZGF0YV9kc3RfYWxsb2MoMCwgTUVUQURBVEFfSFdfUE9SVF9NVVgsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFtZCkgewomIzQzOwkJCWVwX2ZyZWVfcG9ydF9tZChlcCk7CiYjNDM7CQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQl9CiYjNDM7CQltZC0mZ3Q7dS5wb3J0X2luZm8ucG9ydF9pZCA9IGk7CiYjNDM7CQllcC0mZ3Q7cG9ydF9tZFtpXSA9IG1kOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHhsbnhfdHNuX2VwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiYjNDM7ewomIzQzOwl1MzIgcnhfY2hhbl9udW1bVFNOX01BWF9SWF9RVUVVRV07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wOwomIzQzOwl1MzIgbnVtX3R4LCBudW1fcngsIG51bV9wcmlvOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlwX25wOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJc3RydWN0IHhsbnhfdHNuX2VwICplcDsKJiM0MzsJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwomIzQzOwl1MTYgdHhfcHJlc2VudCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlyZXQgPSBlcF9jb3VudF9kbWFfcXVldWVzKGRldiwgJmFtcDtudW1fdHgsICZhbXA7bnVtX3J4LCAmYW1wO3R4X3ByZXNlbnQsIHJ4X2NoYW5fbnVtKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlwX25wID0gb2ZfZ2V0X3BhcmVudChkZXYtJmd0O29mX25vZGUpOwomIzQzOwlpZiAoIWlwX25wKQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCAmIzM0O21pc3NpbmcgcGFyZW50IElQIG5vZGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoaXBfbnAsICYjMzQ7eGxueCxudW0tcHJpb3JpdGllcyYjMzQ7LCAmYW1wO251bV9wcmlvKTsKJiM0MzsJb2Zfbm9kZV9wdXQoaXBfbnApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7bWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CWlmIChudW1fdHggIT0gbnVtX3ByaW8pCiYjNDM7CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAgJiMzNDtUWCBjaGFubmVsIGNvdW50ICV1IG11c3QgZXF1YWwgbnVtLXByaW9yaXRpZXMgJXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgIG51bV90eCwgbnVtX3ByaW8pOwomIzQzOwomIzQzOwluZGV2ID0gYWxsb2NfbmV0ZGV2X21xcyhzaXplb2YoKmVwKSwgJiMzNDtlcCVkJiMzNDssIE5FVF9OQU1FX0VOVU0sCiYjNDM7CQkJCWV0aGVyX3NldHVwLCBudW1fdHgsIG51bV9yeCk7CiYjNDM7CWlmICghbmRldikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpOwomIzQzOwluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDtlcF9uZXRkZXZfb3BzOwomIzQzOwluZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7ZXBfZXRodG9vbF9vcHM7CiYjNDM7CW5kZXYtJmd0O2ZlYXR1cmVzID0gTkVUSUZfRl9TRzsKJiM0MzsKJiM0MzsJZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJZXAtJmd0O25kZXYgPSBuZGV2OwomIzQzOwllcC0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwllcC0mZ3Q7bnVtX3R4X3F1ZXVlcyA9IG51bV90eDsKJiM0MzsJZXAtJmd0O251bV9yeF9xdWV1ZXMgPSBudW1fcng7CiYjNDM7CWVwLSZndDttYXhfZnJtX3NpemUgPSBUU05fTUFYX1ZMQU5fRlJBTUVfU0laRTsKJiM0MzsJbWVtY3B5KGVwLSZndDtyeF9jaGFuX251bSwgcnhfY2hhbl9udW0sIG51bV9yeCAqIHNpemVvZigqcnhfY2hhbl9udW0pKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRTTl9NQVhfVFhfUVVFVUU7IGkmIzQzOyYjNDM7KQomIzQzOwkJZXAtJmd0O3R4X2RtYV9jaGFuX21hcFtpXSA9IFRTTl9ETUFfQ0hfSU5WQUxJRDsKJiM0MzsKJiM0MzsJdHhjZmdfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7dHgtcXVldWVzLWNvbmZpZyYjMzQ7KTsKJiM0MzsJaWYgKCF0eGNmZ19ucCkgewomIzQzOwkJcmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsCiYjNDM7CQkJCSAgICAmIzM0O21pc3NpbmcgdHgtcXVldWVzLWNvbmZpZyBub2RlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGVycl9mcmVlX25kZXY7CiYjNDM7CX0KJiM0MzsJcmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7CiYjNDM7CW9mX25vZGVfcHV0KHR4Y2ZnX25wKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmRldjsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG8KJiM0MzsJICogZ2F0ZSBvbiB0aGUgTUNETUEgcHJvdmlkZXIgYmVpbmcgYm91bmQuIFRoaXMga2VlcHMgLUVQUk9CRV9ERUZFUiBpbgomIzQzOwkgKiB0aGUgcHJvYmUgcGF0aCwgc28gdGhlIG5ldGRldiBpcyBvbmx5IHJlZ2lzdGVyZWQgb25jZSB0aGUgcHJvdmlkZXIgaXMKJiM0MzsJICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuCiYjNDM7CSAqLwomIzQzOwlyZXQgPSBlcF9yZXNldF9kbWFfY29udHJvbGxlcihlcCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9mcmVlX25kZXY7CiYjNDM7CiYjNDM7CXJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtJmd0O29mX25vZGUsIG1hY19hZGRyKTsKJiM0MzsJaWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7CiYjNDM7CQlnb3RvIGVycl9mcmVlX25kZXY7CiYjNDM7CX0gZWxzZSBpZiAoIXJldCAmYW1wOyZhbXA7IGlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjX2FkZHIpKSB7CiYjNDM7CQlldGhfaHdfYWRkcl9zZXQobmRldiwgbWFjX2FkZHIpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpOwomIzQzOwkJZGV2X2luZm8oZGV2LCAmIzM0O25vIHZhbGlkIE1BQyBpbiBEVCwgdXNpbmcgcmFuZG9tIGFkZHJlc3MgJXBNXG4mIzM0OywKJiM0MzsJCQkgbmRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGVwX2FsbG9jX3BvcnRfbWQoZXApOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBwZXItcG9ydCBtZXRhZGF0YVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfZnJlZV9uZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVwKTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBuZXQgZGV2aWNlXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIGVycl9mcmVlX21kOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9mcmVlX21kOgomIzQzOwllcF9mcmVlX3BvcnRfbWQoZXApOwomIzQzO2Vycl9mcmVlX25kZXY6CiYjNDM7CWZyZWVfbmV0ZGV2KG5kZXYpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB4bG54X3Rzbl9lcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFlcCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXYoZXAtJmd0O25kZXYpOwomIzQzOwllcF9mcmVlX3BvcnRfbWQoZXApOwomIzQzOwlmcmVlX25ldGRldihlcC0mZ3Q7bmRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhsbnhfdHNuX2VwX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsdHNuLWVwLW1hYyYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGxueF90c25fZXBfb2ZfbWF0Y2gpOwomIzQzOwomIzQzO3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGxueF90c25fZXBfZHJpdmVyID0gewomIzQzOwkucHJvYmUJPSB4bG54X3Rzbl9lcF9wcm9iZSwKJiM0MzsJLnJlbW92ZQk9IHhsbnhfdHNuX2VwX3JlbW92ZSwKJiM0MzsJLmRyaXZlcgk9IHsKJiM0MzsJCS5uYW1lCQk9IERSSVZFUl9OQU1FLAomIzQzOwkJLm9mX21hdGNoX3RhYmxlCT0geGxueF90c25fZXBfb2ZfbWF0Y2gsCiYjNDM7CX0sCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmQzM2EwMGRkNmQxNWUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jCkBAIC0wLDAgJiM0MzsxLDEwNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaW1lIFNlbnNpdGl2ZSBOZXR3b3JraW5nIChUU04pIEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29mX3BsYXRmb3JtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt4aWxpbnhfdHNuLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgVFNOX05VTV9DTE9DS1MJCTYKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgeGxueF90c25faXAgLSB3cmFwcGVyLXByaXZhdGUgSVAgc3RhdGUKJiM0MzsgKiBAY2xrczogYnVsay1tYW5hZ2VkIElQIGNsb2NrcwomIzQzOyAqLwomIzQzO3N0cnVjdCB4bG54X3Rzbl9pcCB7CiYjNDM7CXN0cnVjdCBjbGtfYnVsa19kYXRhIGNsa3NbVFNOX05VTV9DTE9DS1NdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0c25fY2xrX25hbWVzW1RTTl9OVU1fQ0xPQ0tTXSA9IHsKJiM0MzsJJiMzNDtndHgmIzM0OywKJiM0MzsJJiMzNDtndHg5MCYjMzQ7LAomIzQzOwkmIzM0O2hvc3RfcnhmaWZvJiMzNDssCiYjNDM7CSYjMzQ7aG9zdF90eGZpZm8mIzM0OywKJiM0MzsJJiMzNDtyZWYmIzM0OywKJiM0MzsJJiMzNDtzX2F4aSYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdHNuX2Nsa19idWxrX2Rpc2FibGUodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB4bG54X3Rzbl9pcCAqdyA9IGRhdGE7CiYjNDM7CiYjNDM7CWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKFRTTl9OVU1fQ0xPQ0tTLCB3LSZndDtjbGtzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB0c25faXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgeGxueF90c25faXAgKnc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXcgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKncpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCF3KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgVFNOX05VTV9DTE9DS1M7IGkmIzQzOyYjNDM7KQomIzQzOwkJdy0mZ3Q7Y2xrc1tpXS5pZCA9IHRzbl9jbGtfbmFtZXNbaV07CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fY2xrX2J1bGtfZ2V0KGRldiwgVFNOX05VTV9DTE9DS1MsIHctJmd0O2Nsa3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGdldCBjbG9ja3NcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoVFNOX05VTV9DTE9DS1MsIHctJmd0O2Nsa3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBjbG9ja3NcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgdHNuX2Nsa19idWxrX2Rpc2FibGUsIHcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldm1fb2ZfcGxhdGZvcm1fcG9wdWxhdGUoZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdHNuX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjAmIzM0OyB9LAomIzQzOwl7IH0KJiM0Mzt9OwomIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRzbl9vZl9tYXRjaCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHNuX2RyaXZlciA9IHsKJiM0MzsJLnByb2JlID0gdHNuX2lwX3Byb2JlLAomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSAmIzM0O3hpbGlueC10c24mIzM0OywKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IHRzbl9vZl9tYXRjaCwKJiM0MzsJfSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgdHNuX2RyaXZlcnNbXSA9IHsKJiM0MzsJJmFtcDt0c25fZHJpdmVyLAomIzQzOwkmYW1wO3hsbnhfdHNuX2VwX2RyaXZlciwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IHhsbnhfdHNuX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwbGF0Zm9ybV9yZWdpc3Rlcl9kcml2ZXJzKHRzbl9kcml2ZXJzLCBBUlJBWV9TSVpFKHRzbl9kcml2ZXJzKSk7CiYjNDM7fQomIzQzO21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fZXhpdCB4bG54X3Rzbl9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlwbGF0Zm9ybV91bnJlZ2lzdGVyX2RyaXZlcnModHNuX2RyaXZlcnMsIEFSUkFZX1NJWkUodHNuX2RyaXZlcnMpKTsKJiM0Mzt9CiYjNDM7bW9kdWxlX2V4aXQoeGxueF90c25fZXhpdCk7CiYjNDM7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O1NyaW5pdmFzIE5lZWxpICZsdDtzcmluaXZhcy5uZWVsaUBhbWQuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgd3JhcHBlciBkcml2ZXImIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDIzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogWGlsaW54IFRTTiBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoLCBpbnRyb2R1Y2luZyB0aGUgWGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXIsIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBzZWUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIChgLnlhbWxgIGFuZCBgTUFJTlRBSU5FUlNgKSwgS2NvbmZpZyBhbmQgTWFrZWZpbGUgYWRkaXRpb25zIGluZGljYXRpbmcgYSBuZXcgYHRzbi9gIHN1YmRpcmVjdG9yeSwgYW5kIHRoZSBjb3JlIGRyaXZlciBmaWxlcyAoYC5jYCBhbmQgYC5oYCkuIFRoaXMgc3VnZ2VzdHMgYSBuZXcgZnVuY3Rpb25hbCBibG9jaywgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBPcGVuRmlybXdhcmUvRGV2aWNldHJlZSAoJiMzNDt4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wJiMzNDsgYW5kICYjMzQ7eGxueCx0c24tZXAtbWFjJiMzNDspLiBJdCYjMzk7cyAqZGVmaW5pdGVseSogaW50ZXJlc3RpbmcsIGJ1dCBteSBhbGFybSBiZWxscyBhcmUgZ29pbmcgb2ZmIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBgT0ZfQUREUkVTU2AgYW5kIGBYSUxJTlhfRE1BYC4gVGhhdCYjMzk7cyB0aGUga2V5LgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eSB3aXRoaW4gc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ2FuIEkgdHJpZ2dlciB0aGUgYHhsbnhfdHNuX2VwX2RyaXZlcmAgb3IgYHRzbl9kcml2ZXJgIGluIFFFTVUgKGFtZDY0KSBpbiBHQ0U/IERvZXMgUUVNVSBlbXVsYXRlIFhpbGlueCBUU04gTUFDIG9yIFhpbGlueCBETUE/IE9yIGlzIHRoaXMsIGFzIEkgc3VzcGVjdCwgaGFyZHdhcmUtZGVwZW5kZW50LCBwb3NzaWJseSBhbiBGUEdBL1p5bnFNUCBTb0Mtc3BlY2lmaWMgY29tcG9uZW50PyBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIHNpZ25pZmljYW50IGh1cmRsZS4KCkkgbmVlZCB0byBleHBsb3JlIGhvdyBwbGF0Zm9ybSBkZXZpY2VzLCBlc3BlY2lhbGx5IHRob3NlIERULWJhc2VkLCBiZWhhdmUgaW4geDg2XzY0IGVudmlyb25tZW50cy4gQ2FuIERldmljZSBUcmVlIG92ZXJsYXlzIGluc3RhbnRpYXRlIHRoaXM/IFdpbGwgSSBuZWVkIHRvIGVtdWxhdGUgdGhlIHBsYXRmb3JtIG9yIHVzZSBhIGRlZGljYXRlZCBoYXJkd2FyZSBzZXR1cD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBvdGhlciBYaWxpbnggRXRoZXJuZXQgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSBPRi0gb3IgRFQtYmFzZWQsIGFyZSBoYW5kbGVkLiBIYXMgYW55b25lIHN1Y2Nlc3NmdWxseSBmdXp6ZWQgc2ltaWxhciBkcml2ZXJzPwoKSSBuZWVkIHRvIGFwcGx5IHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gSXMgdGhpcyBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU/IEkgbmVlZCB0byBrbm93IGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZW11bGF0ZWQgb3IgaWYgdGhlIGhhcmR3YXJlIGlzIG5lY2Vzc2FyeS4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgJiMzNDt2ZW5kb3Itc3BlY2lmaWMuLi5yZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsgbWFrZXMgbWUgd29ycmllZC4gSSBhbSBjb25jZXJuZWQgdGhpcyBpcyBzaW1pbGFyIHRvIHRoYXQuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSwgdGhpcyBpc24mIzM5O3QgYW4gJiMzNDt1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCYjMzQ7LCBpLmUuIHRoYXQgaXQgaXNuJiMzOTt0IG9ubHkgY2FsbGVkIGR1cmluZyBwaHlzaWNhbCBob3QtdW5wbHVnLgoKTXkgbmV4dCBzdGVwcyBpbnZvbHZlIGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciBgWElMSU5YX0RNQWAsIGBPRl9BRERSRVNTYCwgYW5kIG90aGVyIFhpbGlueCBFdGhlcm5ldCBkcml2ZXIgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlbiBjaGVja2luZyB3aGF0JiMzOTtzIGZlYXNpYmxlIGdpdmVuIHRoZSB0eXBpY2FsIHN5emthbGxlciBsaW1pdGF0aW9ucy4gSXMgaXQgYSAqZ28qIG9yIGEgKm5vLWdvKj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWElMSU5YX0RNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS9LY29uZmlnPTY3ND1jb25maWcgWEdFTkVfRE1BXG4tLVxuZHJpdmVycy9kbWEvS2NvbmZpZy02ODItXG5kcml2ZXJzL2RtYS9LY29uZmlnOjY4Mzpjb25maWcgWElMSU5YX0RNQVxuZHJpdmVycy9kbWEvS2NvbmZpZy02ODQtXHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggQVhJIERNQVMgRW5naW5lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGEgRE1BIENvbmZpZ3VyYXRpb24gQ29uY2VybioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBETUEgY29uZmlndXJhdGlvbi4gSSYjMzk7bSB0aGlua2luZyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYGRyaXZlcnMvZG1hL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgbGluZSA2ODMuIFRoYXQgYXJlYSBsaWtlbHkgaG9sZHMgc29tZSBjcnVjaWFsIGRlZmluaXRpb25zIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHdoYXRldmVyIERNQSBpc3N1ZSBJJiMzOTttIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgb3IgY29uZmlndXJlZCB0aGVyZS4gSSBiZXQgaXQgd2lsbCBwcm92aWRlIHRoZSBrZXkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2ODA6XHRcdGhlbHBcbiA2ODE6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUE0gWC1HZW5lIFNvQyBETUEgZW5naW5lLlxuIDY4MjpcdFxuIDY4MzpcdGNvbmZpZyBYSUxJTlhfRE1BXG4gNjg0Olx0XHR0cmlzdGF0ZSBcJiMzNDtYaWxpbnggQVhJIERNQVMgRW5naW5lXCYjMzQ7XG4gNjg1Olx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVxuIDY4NjpcdFx0c2VsZWN0IERNQV9FTkdJTkVcbiA2ODc6XHRcdGhlbHBcbiA2ODg6XHRcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFhpbGlueCBBWEkgVkRNQSBTb2Z0IElQLlxuIDY4OTpcdFxuIDY5MDpcdFx0ICBBWEkgVkRNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggZGlyZWN0IG1lbW9yeSBhY2Nlc3NcbiA2OTE6XHRcdCAgYmV0d2VlbiBtZW1vcnkgYW5kIEFYSTQtU3RyZWFtIHZpZGVvIHR5cGUgdGFyZ2V0XG4gNjkyOlx0XHQgIHBlcmlwaGVyYWxzIGluY2x1ZGluZyBwZXJpcGhlcmFscyB3aGljaCBzdXBwb3J0IEFYSTQtXG4gNjkzOlx0XHQgIFN0cmVhbSBWaWRlbyBQcm90b2NvbC4gIEl0IGhhcyB0d28gc3RyZWFtIGludGVyZmFjZXMvXG4gNjk0Olx0XHQgIGNoYW5uZWxzLCBNZW1vcnkgTWFwcGVkIHRvIFN0cmVhbSAoTU0yUykgYW5kIFN0cmVhbSB0b1xuIDY5NTpcdFx0ICBNZW1vcnkgTWFwcGVkIChTMk1NKSBmb3IgdGhlIGRhdGEgdHJhbnNmZXJzLlxuIDY5NjpcdFx0ICBBWEkgQ0RNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggZGlyZWN0IG1lbW9yeSBhY2Nlc3NcbiA2OTc6XHRcdCAgYmV0d2VlbiBhIG1lbW9yeS1tYXBwZWQgc291cmNlIGFkZHJlc3MgYW5kIGEgbWVtb3J5LW1hcHBlZFxuIDY5ODpcdFx0ICBkZXN0aW5hdGlvbiBhZGRyZXNzLlxuIDY5OTpcdFx0ICBBWEkgRE1BIGVuZ2luZSBwcm92aWRlcyBoaWdoLWJhbmR3aWR0aCBvbmUgZGltZW5zaW9uYWwgZGlyZWN0XG4gNzAwOlx0XHQgIG1lbW9yeSBhY2Nlc3MgYmV0d2VlbiBtZW1vcnkgYW5kIEFYSTQtU3RyZWFtIHRhcmdldCBwZXJpcGhlcmFscy5cbiA3MDE6XHRcdCAgQVhJIE1DRE1BIGVuZ2luZSBwcm92aWRlcyBoaWdoLWJhbmR3aWR0aCBkaXJlY3QgbWVtb3J5IGFjY2Vzc1xuIDcwMjpcdFx0ICBiZXR3ZWVuIG1lbW9yeSBhbmQgQVhJNC1TdHJlYW0gdGFyZ2V0IHBlcmlwaGVyYWxzLiBJdCBwcm92aWRlc1xuIDcwMzpcdFx0ICB0aGUgc2NhdHRlciBnYXRoZXIgaW50ZXJmYWNlIHdpdGggbXVsdGlwbGUgY2hhbm5lbHMgaW5kZXBlbmRlbnRcbiA3MDQ6XHRcdCAgY29uZmlndXJhdGlvbiBzdXBwb3J0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDIyCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQ09ORklHX09GX0FERFJFU1NgLiBDYW4gd2UgcmVhbGlzdGljYWxseSBlbmFibGUgYENPTkZJR19PRl9BRERSRVNTYCBvbiBhbiB4ODZfNjQgYXJjaGl0ZWN0dXJlPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBUbyBhbnN3ZXIgdGhhdCBkZWZpbml0aXZlbHksIEkgbmVlZCB0byBrbm93IHdoZXJlIGBPRl9BRERSRVNTYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIHN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGl0cyBvcmlnaW5zIGFuZCBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgYXBwbGljYWJpbGl0eSBpbiB0aGlzIGNvbnRleHQuIExldCYjMzk7cyBnZXQgdG8gdGhlIHJvb3Qgb2YgaXRzIGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9GX0FERFJFU1MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9LY29uZmlnPTgzPWNvbmZpZyBPRl9EWU5BTUlDXG4tLVxuZHJpdmVycy9vZi9LY29uZmlnLTkwLVxuZHJpdmVycy9vZi9LY29uZmlnOjkxOmNvbmZpZyBPRl9BRERSRVNTXG5kcml2ZXJzL29mL0tjb25maWctOTItXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNzAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgZHJpdmVycy9vZi9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNvbWV0aGluZyBhcm91bmQgbGluZSA5MSwgb3IgYXQgbGVhc3QgaW4gdGhhdCB2aWNpbml0eS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3Qgc29tZXRoaW5nIHJlbGF0ZWQgdG8gZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbiBvciBwb3RlbnRpYWxseSBhIHNwZWNpZmljIGRyaXZlciYjMzk7cyBidWlsZCBvcHRpb25zIG1pZ2h0IGJlIGRlZmluZWQgdGhlcmUuIEl0JiMzOTtzIGEgaHVuY2ggYmFzZWQgb24gY29tbW9uIHBhdHRlcm5zIGluIGVtYmVkZGVkIHN5c3RlbXMgZGV2ZWxvcG1lbnQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0IGxpZXMgd2l0aGluIHRob3NlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcbiAgODE6XHQjIEhhcmRseSBhbnkgcGxhdGZvcm1zIG5lZWQgdGhpcy4gIEl0IGlzIHNhZmUgdG8gc2VsZWN0LCBidXQgb25seSBkbyBzbyBpZiB5b3VcbiAgODI6XHQjIG5lZWQgaXQuXG4gIDgzOlx0Y29uZmlnIE9GX0RZTkFNSUNcbiAgODQ6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgZHluYW1pYyBkZXZpY2UgdHJlZXNcJiMzNDsgaWYgT0ZfVU5JVFRFU1RcbiAgODU6XHRcdHNlbGVjdCBPRl9LT0JKXG4gIDg2Olx0XHRoZWxwXG4gIDg3Olx0XHQgIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgZGV2aWNlIHRyZWUgY2FuIGJlIG1hbmlwdWxhdGVkIGF0IHJ1bnRpbWUuXG4gIDg4Olx0XHQgIFdoaWxlIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgb24gc3VjaCBwbGF0Zm9ybXMsIHlvdVxuICA4OTpcdFx0ICBjYW4gZW5hYmxlIGl0IG1hbnVhbGx5IHRvIGltcHJvdmUgZGV2aWNlIHRyZWUgdW5pdCB0ZXN0IGNvdmVyYWdlLlxuICA5MDpcdFxuICA5MTpcdGNvbmZpZyBPRl9BRERSRVNTXG4gIDkyOlx0XHRkZWZfYm9vbCB5XG4gIDkzOlx0XHRkZXBlbmRzIG9uICFTUEFSQyBcdTAwMjZcdTAwMjYgKEhBU19JT01FTSB8fCBVTUwpXG4gIDk0Olx0XG4gIDk1Olx0Y29uZmlnIE9GX0lSUVxuICA5NjpcdFx0ZGVmX2Jvb2wgeVxuICA5NzpcdFx0ZGVwZW5kcyBvbiAhU1BBUkMgXHUwMDI2XHUwMDI2IElSUV9ET01BSU5cbiAgOTg6XHRcbiAgOTk6XHRjb25maWcgT0ZfUkVTRVJWRURfTUVNXG4gMTAwOlx0XHRkZWZfYm9vbCBPRl9FQVJMWV9GTEFUVFJFRVxuIDEwMTpcdFxuIDEwMjpcdGNvbmZpZyBPRl9SRVNPTFZFXG4gMTAzOlx0XHRib29sXG4gMTA0Olx0XG4gMTA1Olx0Y29uZmlnIE9GX09WRVJMQVlcbiAxMDY6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIFRyZWUgb3ZlcmxheXNcJiMzNDtcbiAxMDc6XHRcdHNlbGVjdCBPRl9EWU5BTUlDXG4gMTA4Olx0XHRzZWxlY3QgT0ZfRkxBVFRSRUVcbiAxMDk6XHRcdHNlbGVjdCBPRl9SRVNPTFZFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODI5CgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDEyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IE5lZ2F0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBgeGxueF90c25gIGNvbXBvbmVudCBpcyBzb21ldGhpbmcgd2UgY2FuIGVmZmVjdGl2ZWx5IGZ1enouIEZpcnN0LCBpcyBpdCBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpYyB0byBoYXJkd2FyZT8gIFllcywgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFuIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIG9uIGFuIEZQR0Egb3IgU29DLiBTbywgaXQgZGVmaW5pdGVseSByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZTogYW4gRlBHQSBhbmQgcmVsYXRlZCBJUCBibG9ja3MsIGluY2x1ZGluZyBYaWxpbngmIzM5O3MgTUNETUEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGUgZHJpdmVyIGRvZXMuIEZyb20gdGhlIGNvZGUsIGl0IHByb2JlcyBmb3IgY2xvY2tzIGFuZCBwb3B1bGF0ZXMgc3ViZGV2aWNlcyBhbmQgYWxzbyByZXF1ZXN0cyBhbmQgY29uZmlndXJlcyBETUEgY2hhbm5lbHMsIGludGVyYWN0aW5nIHdpdGggdGhlIFhpbGlueCBWRE1BL01DRE1BLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB0aGlzIGhhcmR3YXJlIGJlIGVtdWxhdGVkIGluIG91ciBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgUUVNVSBvciBHQ0UgVk1zIG9uIGFtZDY0PyBOby4gVGhlcmUmIzM5O3Mgbm8gZW11bGF0aW9uIG9mIHRoaXMgWGlsaW54LXNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIHRoZSBUU04gRlBHQSBNQUMgb3IgTUNETUEsIGluIHRob3NlIGVudmlyb25tZW50cy4KCkxldCYjMzk7cyBjb25zdWx0IHRoZSBzeXprYWxsZXIgY3JpdGVyaWEgcmVnYXJkaW5nIHdoZW4gKm5vdCogdG8gZnV6ei4gIEl0JiMzOTtzIGNsZWFyIGZyb20gdGhlIGRvY3VtZW50YXRpb24gdGhhdCB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUgZmFsbCB1bmRlciB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeSBhbmQgdGhhdCBzdWNoIGRyaXZlcnMgc2hvdWxkbiYjMzk7dCBiZSBmdXp6ZWQuIFRoaXMgaXMgYSB2ZXJ5IGltcG9ydGFudCBwb2ludCEKClNvLCBkb2VzIHRoaXMgZHJpdmVyIGludGVyYWN0IHdpdGggYW55IHZpcnR1YWwgYnVzZXM/IE5vLiBJdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgcHJvdmlkZWQgYnkgWGlsaW54LiBJdCYjMzk7cyBub3QgcmVhY2hhYmxlIHZpYSB2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIG9yIHNvY2tldHMuCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIHNvbGUgZXh0ZW50IG9mIHRoZSBjaGFuZ2UuIFRoZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgbG9vayBsaWtlIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGFuZCBNYWtlZmlsZSB1cGRhdGVzIGFsb25nc2lkZSB0aGUgbmV3IGRyaXZlciBmaWxlczogYHhsbnhfdHNuLmhgLCBgeGxueF90c25fZXAuY2AsIGB4bG54X3Rzbl9tYWluLmNgLiBFdmVyeXRoaW5nIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL2AgZGlyZWN0b3J5LCBpbmNsdWRpbmcgRGV2aWNlIFRyZWUgYmluZGluZ3MuCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgZHJpdmVyIGlzIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBoYXJkd2FyZSB1bmF2YWlsYWJsZSBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cywgaXQmIzM5O3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBUaGUgbW9kaWZpZWQgY29kZSBpcyB2ZW5kb3Itc3BlY2lmaWMgYW5kIHJlcXVpcmVzIGFuIEZQR0EvU29DLiAgVGh1cywgdGhpcyBjb2RlIGlzIG5vdCB3b3J0aCBmdXp6aW5nLiBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAgYW5kIHByb3ZpZGUgdGhlIHJlYXNvbmluZy4gSSB3aWxsIHNldCB0aGUgZmllbGRzIHJlcXVpcmVkIGJ5IGBzZXQtcmVzdWx0c2AgYXM6Ci0gYFdvcnRoRnV6emluZ2A6IGZhbHNlCi0gYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gKFRpbWUtU2Vuc2l0aXZlIE5ldHdvcmtpbmcpIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChgZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9gKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuCi0gYEZvY3VzU3ltYm9sc2A6IFtdIChlbXB0eSBsaXN0KQotIGBFbmFibGVDb25maWdzYDogW10gKGVtcHR5IGxpc3QpCgpOb3csIGxldCYjMzk7cyBpbnZva2UgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHBsYXRmb3JtIGRyaXZlciBhbmQgRGV2aWNlIFRyZWUgYmluZGluZ3MgZm9yIHRoZSBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAgY29yZSAoZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi8pLiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgdmVuZG9yLXNwZWNpZmljIEZQR0EvU29DIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFKSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuLykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjI6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjM1LjQxMjYyODAyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzQwNTIzMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzozNS40MTI2MzIzMjhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzcxMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI3ZGFkZWUwYjYzZWRjZGM5MzUzZTRiNjFmODRmZWE0ZDQzY2IzMjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjoxNzozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGU2NWQxNzEwZGE3OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXFxuQEAgLTAsMCArMSwzNjQgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFhpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGltcGxlbWVudHMgSUVFRSA4MDIuMSBUaW1lLVNlbnNpdGl2ZVxcbisgIE5ldHdvcmtpbmcgKFRTTikgc3RhbmRhcmRzIGFuZCBwcm92aWRlcyBsb3ctbGF0ZW5jeSBuZXR3b3JrIGNvbm5lY3Rpdml0eVxcbisgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydFxcbisgIHN3aXRjaCwgd2l0aCB0d28gcG9ydHMgY29ubmVjdGVkIHRvIHRoZSBleHRlcm5hbCBuZXR3b3JrIGFuZCBvbmUgcG9ydFxcbisgIGNvbm5lY3RlZCB0byBhbiBpbnRlcm5hbCBlbmRwb2ludC4gSXQgYWxzbyBzdXBwb3J0cyBHTUlJL1JHTUlJIGludGVyZmFjZXNcXG4rICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdFxcbisgIDEwMCBNYi9zIGFuZCAxIEdiL3Mgc3BlZWRzLlxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBTcmluaXZhcyBOZWVsaSBcXHUwMDNjc3Jpbml2YXMubmVlbGlAYW1kLmNvbVxcdTAwM2VcXG4rICAtIE5hZ2FkaGVlcmFqIFJvdHRlbGEgXFx1MDAzY25hZ2FkaGVlcmFqLnJvdHRlbGFAYW1kLmNvbVxcdTAwM2VcXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGNvbnN0OiB4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXFxuK1xcbisgIGNsb2NrczpcXG4rICAgIGl0ZW1zOlxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBHVFggY2xvY2sgZm9yIHRyYW5zbWl0dGVyIGxvZ2ljIGFuZCBSVENcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1RYIDkwLWRlZ3JlZSBwaGFzZSBzaGlmdGVkIGNsb2NrIGZvciBSR01JSVxcbisgICAgICAtIGRlc2NyaXB0aW9uOiBIb3N0IFJYIEZJRk8gY2xvY2tcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogSG9zdCBUWCBGSUZPIGNsb2NrXFxuKyAgICAgIC0gZGVzY3JpcHRpb246IFJlZmVyZW5jZSBjbG9jayBmb3IgSURFTEFZIGNvbnRyb2xcXG4rICAgICAgLSBkZXNjcmlwdGlvbjogQVhJLUxpdGUgcmVnaXN0ZXIgaW50ZXJmYWNlIGNsb2NrXFxuK1xcbisgIGNsb2NrLW5hbWVzOlxcbisgICAgaXRlbXM6XFxuKyAgICAgIC0gY29uc3Q6IGd0eFxcbisgICAgICAtIGNvbnN0OiBndHg5MFxcbisgICAgICAtIGNvbnN0OiBob3N0X3J4Zmlmb1xcbisgICAgICAtIGNvbnN0OiBob3N0X3R4Zmlmb1xcbisgICAgICAtIGNvbnN0OiByZWZcXG4rICAgICAgLSBjb25zdDogc19heGlcXG4rXFxuKyAgcmFuZ2VzOiB0cnVlXFxuK1xcbisgICcjYWRkcmVzcy1jZWxscyc6XFxuKyAgICBjb25zdDogMVxcbitcXG4rICAnI3NpemUtY2VsbHMnOlxcbisgICAgY29uc3Q6IDFcXG4rXFxuKyAgeGxueCxudW0tcHJpb3JpdGllczpcXG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbisgICAgbWluaW11bTogMlxcbisgICAgbWF4aW11bTogOFxcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIE51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMgKHByaW9yaXRpZXMpIGNvbmZpZ3VyZWQgaW4gdGhlIElQLlxcbisgICAgICBUaGlzIGlzIGFuIElQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mXFxuKyAgICAgIHByaW9yaXR5IHF1ZXVlcyBhdmFpbGFibGUgZm9yIFFvUyBzY2hlZHVsaW5nLiBUcmFmZmljIGNsYXNzZXMgbWFwIHRvXFxuKyAgICAgIElFRUUgODAyLjFRIHByaW9yaXR5IGxldmVscyAoMC03KS5cXG4rXFxuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxcbisgIFxcXCJeZXRoZXJuZXRAWzAtOWEtZl0rJFxcXCI6XFxuKyAgICB0eXBlOiBvYmplY3RcXG4rICAgICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXFxuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgRW5kcG9pbnQgTUFDIHN1Yi1ub2RlLiBQcm92aWRlcyB0aGUgaG9zdC1zaWRlIGRhdGEgcGF0aCB0aHJvdWdoIHRoZVxcbisgICAgICBETUEgY2hhbm5lbHMgZGVzY3JpYmVkIGJ5IGl0cyBkbWFzIC8gZG1hLW5hbWVzLlxcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICBjb25zdDogeGxueCx0c24tZXAtbWFjXFxuK1xcbisgICAgICByZWc6XFxuKyAgICAgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgICAgIGRtYXM6XFxuKyAgICAgICAgbWluSXRlbXM6IDJcXG4rICAgICAgICBtYXhJdGVtczogMTZcXG4rXFxuKyAgICAgIGRtYS1uYW1lczpcXG4rICAgICAgICBtaW5JdGVtczogMlxcbisgICAgICAgIG1heEl0ZW1zOiAxNlxcbisgICAgICAgIGl0ZW1zOlxcbisgICAgICAgICAgcGF0dGVybjogXFxcIl4odHh8cngpX2NoYW5bMC03XSRcXFwiXFxuKyAgICAgICAgZGVzY3JpcHRpb246IHxcXG4rICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICdkbWFzJywgb25lIHBlciBETUEgY2hhbm5lbCBhbmQgaW5cXG4rICAgICAgICAgIHRoZSBzYW1lIG9yZGVyLiBUWCBjaGFubmVsIG5hbWVzIHVzZSBcXFwidHhfY2hhblxcdTAwM2NOXFx1MDAzZVxcXCIgYW5kIFJYIGNoYW5uZWxcXG4rICAgICAgICAgIG5hbWVzIHVzZSBcXFwicnhfY2hhblxcdTAwM2NOXFx1MDAzZVxcXCIsIHdoZXJlIE4gaXMgMC4uNy4gRXhhbXBsZTogXFxcInR4X2NoYW4wXFxcIixcXG4rICAgICAgICAgIFxcXCJ0eF9jaGFuMVxcXCIsIC4uLiwgXFxcInJ4X2NoYW4wXFxcIiwgXFxcInJ4X2NoYW4xXFxcIiwgLi4uLlxcbitcXG4rICAgICAgdHgtcXVldWVzLWNvbmZpZzpcXG4rICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rICAgICAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgIFRYIHF1ZXVlIGNvbmZpZ3VyYXRpb24gbm9kZSB0aGF0IG1hcHMgSVAgcHJpb3JpdHkgcXVldWVzIHRvXFxuKyAgICAgICAgICBETUEgVFggY2hhbm5lbHMuIFRoZSBUU04gSVAgc3VwcG9ydHMgbXVsdGlwbGUgcHJpb3JpdHkgcXVldWVzIGZvclxcbisgICAgICAgICAgUW9TIHNjaGVkdWxpbmcsIGFuZCBlYWNoIHF1ZXVlIGNhbiBiZSBjb25uZWN0ZWQgdG8gYSBzcGVjaWZpYyBETUFcXG4rICAgICAgICAgIGNoYW5uZWwuIFRoaXMgbWFwcGluZyBkZWZpbmVzIHdoaWNoIERNQSBUWCBjaGFubmVsIGlzIHVzZWQgdG9cXG4rICAgICAgICAgIHRyYW5zbWl0IHBhY2tldHMgZm9yIGVhY2ggcHJpb3JpdHkgcXVldWUuIEZvciBleGFtcGxlLCBxdWV1ZTBcXG4rICAgICAgICAgIHdpdGggeGxueCxkbWEtY2hhbm5lbC1udW0gc2V0IHRvIDUgbWVhbnMgcHJpb3JpdHkgcXVldWUgMCB1c2VzXFxuKyAgICAgICAgICB0eF9jaGFuNSBmb3IgZGF0YSB0cmFuc2Zlci5cXG4rXFxuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgICAgICBcXFwiXnF1ZXVlWzAtN10kXFxcIjpcXG4rICAgICAgICAgICAgdHlwZTogb2JqZWN0XFxuKyAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICAgICAgRWFjaCBzdWJub2RlIHJlcHJlc2VudHMgYSBwcmlvcml0eSBxdWV1ZS4gVGhlXFxuKyAgICAgICAgICAgICAgeGxueCxkbWEtY2hhbm5lbC1udW0gcHJvcGVydHkgc3BlY2lmaWVzIHdoaWNoIERNQSBUWCBjaGFubmVsXFxuKyAgICAgICAgICAgICAgKHR4X2NoYW4wIHRvIHR4X2NoYW43KSBpcyBjb25uZWN0ZWQgdG8gdGhpcyBxdWV1ZSBmb3JcXG4rICAgICAgICAgICAgICB0cmFuc21pdHRpbmcgcGFja2V0cy5cXG4rICAgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bTpcXG4rICAgICAgICAgICAgICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxcbisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICAgICAgICAgIERNQSBjaGFubmVsIHRoYXQgdHJhbnNtaXRzIHRoaXMgcHJpb3JpdHkgcXVldWUsIGdpdmVuIGFzXFxuKyAgICAgICAgICAgICAgICAgIHRoZSBOIG9mIHRoZSB0eF9jaGFuTiBlbnRyeSBpbiBkbWEtbmFtZXMuXFxuKyAgICAgICAgICAgICAgICBtaW5pbXVtOiAwXFxuKyAgICAgICAgICAgICAgICBtYXhpbXVtOiA3XFxuK1xcbisgICAgICAgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAgICAgICAtIHhsbngsZG1hLWNoYW5uZWwtbnVtXFxuK1xcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gY29tcGF0aWJsZVxcbisgICAgICAtIHJlZ1xcbisgICAgICAtIGRtYXNcXG4rICAgICAgLSBkbWEtbmFtZXNcXG4rICAgICAgLSB0eC1xdWV1ZXMtY29uZmlnXFxuK1xcbisgIFxcXCJec3dpdGNoQFswLTlhLWZdKyRcXFwiOlxcbisgICAgdHlwZTogb2JqZWN0XFxuKyAgICAkcmVmOiAvc2NoZW1hcy9uZXQvZHNhL2RzYS55YW1sIy8kZGVmcy9ldGhlcm5ldC1wb3J0c1xcbisgICAgZGVzY3JpcHRpb246XFxuKyAgICAgIFRocmVlLXBvcnQgRXRoZXJuZXQgc3dpdGNoIHN1Yi1ub2RlLiBDb250YWlucyB0aGUgc3dpdGNoIGZhYnJpY1xcbisgICAgICByZWdpc3RlciB3aW5kb3cgYW5kIHRoZSB0d28gcGVyLU1BQyByZWdpc3RlciB3aW5kb3dzLiBFYWNoIHBlci1NQUNcXG4rICAgICAgd2luZG93IGhvdXNlcyBhbiBNRElPIGNvbnRyb2xsZXIgYW5kIGEgUFRQIHJlZ2lzdGVyIGJsb2NrIGF0IGZpeGVkXFxuKyAgICAgIG9mZnNldHMuIFRoZSBJUCdzIHBlci1NQUMgYW5kIFBUUC10aW1lciBpbnRlcnJ1cHRzIGFyZSBleHBvc2VkIGhlcmUuXFxuK1xcbisgICAgcHJvcGVydGllczpcXG4rICAgICAgY29tcGF0aWJsZTpcXG4rICAgICAgICBjb25zdDogeGxueCx0c24tc3dpdGNoXFxuK1xcbisgICAgICByZWc6XFxuKyAgICAgICAgaXRlbXM6XFxuKyAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBTd2l0Y2ggZmFicmljIHJlZ2lzdGVyIHdpbmRvd1xcbisgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTUFDMSByZWdpc3RlciB3aW5kb3cgKGluY2x1ZGVzIE1ESU8gYW5kIFBUUClcXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1BQzIgcmVnaXN0ZXIgd2luZG93IChpbmNsdWRlcyBNRElPIGFuZCBQVFApXFxuK1xcbisgICAgICByZWctbmFtZXM6XFxuKyAgICAgICAgaXRlbXM6XFxuKyAgICAgICAgICAtIGNvbnN0OiBzd2l0Y2hcXG4rICAgICAgICAgIC0gY29uc3Q6IG1hYzFcXG4rICAgICAgICAgIC0gY29uc3Q6IG1hYzJcXG4rXFxuKyAgICAgIGludGVycnVwdHM6XFxuKyAgICAgICAgbWluSXRlbXM6IDdcXG4rICAgICAgICBtYXhJdGVtczogN1xcbitcXG4rICAgICAgaW50ZXJydXB0LW5hbWVzOlxcbisgICAgICAgIGl0ZW1zOlxcbisgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzFcXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90eF9tYWMxXFxuKyAgICAgICAgICAtIGNvbnN0OiBtYWNfaXJxX21hYzFcXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90aW1lclxcbisgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzJcXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90eF9tYWMyXFxuKyAgICAgICAgICAtIGNvbnN0OiBtYWNfaXJxX21hYzJcXG4rXFxuKyAgICAgIG1kaW8tMTpcXG4rICAgICAgICAkcmVmOiAvc2NoZW1hcy9uZXQvbWRpby55YW1sI1xcbisgICAgICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgTURJTyBidXMgY29udHJvbGxlciBmb3IgTUFDMS4gUmVnaXN0ZXJzIHJlc2lkZSBpbnNpZGUgdGhlIG1hYzFcXG4rICAgICAgICAgIHJlZy1uYW1lcyB3aW5kb3cuXFxuKyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rICAgICAgbWRpby0yOlxcbisgICAgICAgICRyZWY6IC9zY2hlbWFzL25ldC9tZGlvLnlhbWwjXFxuKyAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMyLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMlxcbisgICAgICAgICAgcmVnLW5hbWVzIHdpbmRvdy5cXG4rICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydHMkXFxcIjpcXG4rICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcXG4rXFxuKyAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICcjYWRkcmVzcy1jZWxscyc6XFxuKyAgICAgICAgICAgIGNvbnN0OiAxXFxuK1xcbisgICAgICAgICAgJyNzaXplLWNlbGxzJzpcXG4rICAgICAgICAgICAgY29uc3Q6IDBcXG4rXFxuKyAgICAgICAgICBwb3J0QDA6XFxuKyAgICAgICAgICAgIHR5cGU6IG9iamVjdFxcbisgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWVcXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XFxuKyAgICAgICAgICAgICAgQ1BVIHBvcnQuIFdpcmVkIGludGVybmFsbHkgdG8gdGhlIGVuZHBvaW50IE1BQyBzaWJsaW5nLlxcbitcXG4rICAgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgICByZWc6XFxuKyAgICAgICAgICAgICAgICBjb25zdDogMFxcbitcXG4rICAgICAgICAgICAgICBwaHktbW9kZTpcXG4rICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbFxcbitcXG4rICAgICAgICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgICAgICAgLSBldGhlcm5ldFxcbitcXG4rICAgICAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgICAgIFxcXCJecG9ydEBbMS0yXSRcXFwiOlxcbisgICAgICAgICAgICB0eXBlOiBvYmplY3RcXG4rICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlXFxuKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgICAgIEV4dGVybmFsIEV0aGVybmV0IHBvcnQuIHBvcnRAMSBpcyB3aXJlZCB0byBNQUMxIGFuZCByZWFjaGVkXFxuKyAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbWRpby0xIGJ1cywgcG9ydEAyIGlzIHdpcmVkIHRvIE1BQzIgYW5kIHJlYWNoZWRcXG4rICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBtZGlvLTIgYnVzLlxcbitcXG4rICAgICAgICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICAgICAgICByZWc6XFxuKyAgICAgICAgICAgICAgICBlbnVtOiBbMSwgMl1cXG4rXFxuKyAgICAgICAgICAgICAgcGh5LW1vZGU6XFxuKyAgICAgICAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAgICAgICAtIGdtaWlcXG4rICAgICAgICAgICAgICAgICAgLSByZ21paVxcbisgICAgICAgICAgICAgICAgICAtIHJnbWlpLWlkXFxuK1xcbisgICAgICAgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAgICAgICAtIHJlZ1xcbisgICAgICAgICAgICAgIC0gcGh5LW1vZGVcXG4rICAgICAgICAgICAgICAtIHBoeS1oYW5kbGVcXG4rXFxuKyAgICAgICAgcmVxdWlyZWQ6XFxuKyAgICAgICAgICAtIHBvcnRAMFxcbisgICAgICAgICAgLSBwb3J0QDFcXG4rICAgICAgICAgIC0gcG9ydEAyXFxuK1xcbisgICAgcmVxdWlyZWQ6XFxuKyAgICAgIC0gY29tcGF0aWJsZVxcbisgICAgICAtIHJlZ1xcbisgICAgICAtIHJlZy1uYW1lc1xcbisgICAgICAtIGludGVycnVwdHNcXG4rICAgICAgLSBpbnRlcnJ1cHQtbmFtZXNcXG4rXFxuKyAgICBvbmVPZjpcXG4rICAgICAgLSByZXF1aXJlZDogW3BvcnRzXVxcbisgICAgICAtIHJlcXVpcmVkOiBbZXRoZXJuZXQtcG9ydHNdXFxuK1xcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIGNsb2Nrc1xcbisgIC0gY2xvY2stbmFtZXNcXG4rICAtIHhsbngsbnVtLXByaW9yaXRpZXNcXG4rICAtIHJhbmdlc1xcbisgIC0gJyNhZGRyZXNzLWNlbGxzJ1xcbisgIC0gJyNzaXplLWNlbGxzJ1xcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICB0c25AODAwNDAwMDAge1xcbisgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLTMuMFxcXCI7XFxuKyAgICAgICAgY2xvY2tzID0gXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18yXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18yXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18xXFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZtaXNjX2Nsa18xXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNm1pc2NfY2xrXzNcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNm1pc2NfY2xrXzBcXHUwMDNlO1xcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXFxcImd0eFxcXCIsIFxcXCJndHg5MFxcXCIsIFxcXCJob3N0X3J4Zmlmb1xcXCIsIFxcXCJob3N0X3R4Zmlmb1xcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgICBcXFwicmVmXFxcIiwgXFxcInNfYXhpXFxcIjtcXG4rICAgICAgICB4bG54LG51bS1wcmlvcml0aWVzID0gXFx1MDAzYzhcXHUwMDNlO1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgIHJhbmdlcyA9IFxcdTAwM2MweDAgMHg4MDA0MDAwMCAweDQwMDAwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgZXBfbWFjOiBldGhlcm5ldEAxNjAwMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tZXAtbWFjXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4MTYwMDAgMHhhMDAwXFx1MDAzZTtcXG4rICAgICAgICAgICAgZG1hcyA9IFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMVxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMlxcdTAwM2UsXFxuKyAgICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDNcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDRcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDVcXHUwMDNlLFxcbisgICAgICAgICAgICAgICAgICAgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCA2XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCA3XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCAxNlxcdTAwM2UsXFxuKyAgICAgICAgICAgICAgICAgICBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDE3XFx1MDAzZSwgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCAxOFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMTlcXHUwMDNlLFxcbisgICAgICAgICAgICAgICAgICAgXFx1MDAzY1xcdTAwMjZheGlfbWNkbWFfMCAyMFxcdTAwM2UsIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMjFcXHUwMDNlLCBcXHUwMDNjXFx1MDAyNmF4aV9tY2RtYV8wIDIyXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICAgIFxcdTAwM2NcXHUwMDI2YXhpX21jZG1hXzAgMjNcXHUwMDNlO1xcbisgICAgICAgICAgICBkbWEtbmFtZXMgPSBcXFwidHhfY2hhbjBcXFwiLCBcXFwidHhfY2hhbjFcXFwiLCBcXFwidHhfY2hhbjJcXFwiLCBcXFwidHhfY2hhbjNcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwidHhfY2hhbjRcXFwiLCBcXFwidHhfY2hhbjVcXFwiLCBcXFwidHhfY2hhbjZcXFwiLCBcXFwidHhfY2hhbjdcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwicnhfY2hhbjBcXFwiLCBcXFwicnhfY2hhbjFcXFwiLCBcXFwicnhfY2hhbjJcXFwiLCBcXFwicnhfY2hhbjNcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICBcXFwicnhfY2hhbjRcXFwiLCBcXFwicnhfY2hhbjVcXFwiLCBcXFwicnhfY2hhbjZcXFwiLCBcXFwicnhfY2hhbjdcXFwiO1xcbisgICAgICAgICAgICB0eC1xdWV1ZXMtY29uZmlnIHtcXG4rICAgICAgICAgICAgICAgIHF1ZXVlMCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXFx1MDAzYzB4N1xcdTAwM2U7IH07XFxuKyAgICAgICAgICAgICAgICBxdWV1ZTEgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFxcdTAwM2MweDZcXHUwMDNlOyB9O1xcbisgICAgICAgICAgICAgICAgcXVldWUyIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcXHUwMDNjMHg1XFx1MDAzZTsgfTtcXG4rICAgICAgICAgICAgICAgIHF1ZXVlMyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXFx1MDAzYzB4NFxcdTAwM2U7IH07XFxuKyAgICAgICAgICAgICAgICBxdWV1ZTQgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFxcdTAwM2MweDNcXHUwMDNlOyB9O1xcbisgICAgICAgICAgICAgICAgcXVldWU1IHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcXHUwMDNjMHgyXFx1MDAzZTsgfTtcXG4rICAgICAgICAgICAgICAgIHF1ZXVlNiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXFx1MDAzYzB4MVxcdTAwM2U7IH07XFxuKyAgICAgICAgICAgICAgICBxdWV1ZTcgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFxcdTAwM2MweDBcXHUwMDNlOyB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuK1xcbisgICAgICAgIHN3aXRjaEAzODAwMCB7XFxuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tc3dpdGNoXFxcIjtcXG4rICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4MzgwMDAgMHg4MDAwXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICAgXFx1MDAzYzB4MDAwMDAgMHgxNDAwMFxcdTAwM2UsXFxuKyAgICAgICAgICAgICAgICAgIFxcdTAwM2MweDIwMDAwIDB4MTQwMDBcXHUwMDNlO1xcbisgICAgICAgICAgICByZWctbmFtZXMgPSBcXFwic3dpdGNoXFxcIiwgXFxcIm1hYzFcXFwiLCBcXFwibWFjMlxcXCI7XFxuK1xcbisgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gXFx1MDAzY1xcdTAwMjZpbnRjXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0cyA9IFxcdTAwM2MwIDJcXHUwMDNlLCBcXHUwMDNjMiAyXFx1MDAzZSwgXFx1MDAzYzQgMlxcdTAwM2UsIFxcdTAwM2M2IDJcXHUwMDNlLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzYzEgMlxcdTAwM2UsIFxcdTAwM2MzIDJcXHUwMDNlLCBcXHUwMDNjNSAyXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0LW5hbWVzID0gXFxcInB0cF9yeF9tYWMxXFxcIiwgXFxcInB0cF90eF9tYWMxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm1hY19pcnFfbWFjMVxcXCIsIFxcXCJwdHBfdGltZXJcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwicHRwX3J4X21hYzJcXFwiLCBcXFwicHRwX3R4X21hYzJcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibWFjX2lycV9tYWMyXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIG1kaW8tMSB7XFxuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICAgICAgcGh5MDogZXRoZXJuZXQtcGh5QDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgIH07XFxuKyAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICBtZGlvLTIge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgIHBoeTE6IGV0aGVybmV0LXBoeUAxIHtcXG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbitcXG4rICAgICAgICAgICAgZXRoZXJuZXQtcG9ydHMge1xcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwb3J0QDAge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBldGhlcm5ldCA9IFxcdTAwM2NcXHUwMDI2ZXBfbWFjXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJpbnRlcm5hbFxcXCI7XFxuK1xcbisgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsge1xcbisgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IFxcdTAwM2MxMDAwXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7XFxuKyAgICAgICAgICAgICAgICAgICAgfTtcXG4rICAgICAgICAgICAgICAgIH07XFxuK1xcbisgICAgICAgICAgICAgICAgcG9ydEAxIHtcXG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9IFxcdTAwM2NcXHUwMDI2cGh5MFxcdTAwM2U7XFxuKyAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSBcXFwicmdtaWktaWRcXFwiO1xcbisgICAgICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgICAgICBwb3J0QDIge1xcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MyXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXFx1MDAzY1xcdTAwMjZwaHkxXFx1MDAzZTtcXG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFxcXCJyZ21paS1pZFxcXCI7XFxuKyAgICAgICAgICAgICAgICB9O1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYjIzZmI2ZjJmNGVmNC4uZmY5NGUzMTRlZWIxZiAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTI5OTExLDYgKzI5OTExLDE0IEBAIE06XFx0SGFyc2ggSmFpbiBcXHUwMDNjaC5qYWluQGFtZC5jb21cXHUwMDNlXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdGRyaXZlcnMvY2hhci9od19yYW5kb20veGlsaW54LXRybmcuY1xcbiBcXG4rWElMSU5YIFRTTiBFTkRQT0lOVCBFVEhFUk5FVCBNQUMgRFJJVkVSXFxuK006XFx0TmFnYWRoZWVyYWogUm90dGVsYSBcXHUwMDNjbmFnYWRoZWVyYWoucm90dGVsYUBhbWQuY29tXFx1MDAzZVxcbitNOlxcdFNyaW5pdmFzIE5lZWxpIFxcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXFx1MDAzZVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRNYWludGFpbmVkXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vXFxuK1xcbiBYSUxJTlggVUFSVExJVEUgU0VSSUFMIERSSVZFUlxcbiBNOlxcdFBldGVyIEtvcnNnYWFyZCBcXHUwMDNjamFjbWV0QHN1bnNpdGUuZGtcXHUwMDNlXFxuIEw6XFx0bGludXgtc2VyaWFsQHZnZXIua2VybmVsLm9yZ1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXFxuaW5kZXggNzUwMjIxNGNjN2Q1MC4uYzZkNzA0YzhkM2Q0NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXFxuQEAgLTQxLDQgKzQxLDUgQEAgY29uZmlnIFhJTElOWF9MTF9URU1BQ1xcbiBcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDXFxuIFxcdCAgY29yZSB1c2VkIGluIFhpbGlueCBTcGFydGFuIGFuZCBWaXJ0ZXggRlBHQXNcXG4gXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnXFxcIlxcbiBlbmRpZiAjIE5FVF9WRU5ET1JfWElMSU5YXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9NYWtlZmlsZVxcbmluZGV4IDdkN2RjMTc3MTQyM2UuLjY2ZGFiMDEyNjUwYjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXFxuQEAgLTgsMyArOCw0IEBAIG9iai0kKENPTkZJR19YSUxJTlhfTExfVEVNQUMpICs9IGxsX3RlbWFjLm9cXG4gb2JqLSQoQ09ORklHX1hJTElOWF9FTUFDTElURSkgKz0geGlsaW54X2VtYWNsaXRlLm9cXG4geGlsaW54X2VtYWMtb2JqcyA6PSB4aWxpbnhfYXhpZW5ldF9tYWluLm8geGlsaW54X2F4aWVuZXRfbWRpby5vXFxuIG9iai0kKENPTkZJR19YSUxJTlhfQVhJX0VNQUMpICs9IHhpbGlueF9lbWFjLm9cXG4rb2JqLSQoQ09ORklHX1hJTElOWF9UU04pICs9IHRzbi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yOTJmMTc2OTQ0MDQyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uXFxuKyNcXG4rXFxuK2NvbmZpZyBYSUxJTlhfVFNOXFxuK1xcdHRyaXN0YXRlIFxcXCJYaWxpbnggVFNOIEV0aGVybmV0IGRyaXZlclxcXCJcXG4rXFx0ZGVwZW5kcyBvbiBPRl9BRERSRVNTXFxuK1xcdGRlcGVuZHMgb24gWElMSU5YX0RNQVxcbitcXHRoZWxwXFxuK1xcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFNRC9YaWxpbnggVGltZS1TZW5zaXRpdmUgTmV0d29ya2luZ1xcbitcXHQgIChUU04pIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUC4gSXQgcHJvdmlkZXMgdGhlIHdyYXBwZXIgZGV2aWNlXFxuK1xcdCAgYW5kIHRoZSBlbmRwb2ludCBNQUMgdGhhdCBjb25uZWN0cyB0aGUgSVAgdG8gdGhlIGhvc3QgQ1BVLiBUaGVcXG4rXFx0ICB0aHJlZS1wb3J0IHN3aXRjaCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBhbmlvbiBEU0EgZHJpdmVyLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNTg4NjgyOGIzODZmNFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlXFxuQEAgLTAsMCArMSwyIEBAXFxuK29iai0kKENPTkZJR19YSUxJTlhfVFNOKSArPSB4aWxpbnhfdHNuLm9cXG4reGlsaW54X3Rzbi15IDo9IHhpbGlueF90c25fbWFpbi5vIHhpbGlueF90c25fZXAub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iMDc1N2UyMmQxZmQxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oXFxuQEAgLTAsMCArMSwxNSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgZHJpdmVyLCBzaGFyZWQgZGVmaW5pdGlvbnMuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfWElMSU5YX1RTTl9IXFxuKyNkZWZpbmUgX1hJTElOWF9UU05fSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbitcXG4rZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGxueF90c25fZXBfZHJpdmVyO1xcbitcXG4rI2VuZGlmIC8qIF9YSUxJTlhfVFNOX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGI3ZGEyNjUyMWQwMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuY1xcbkBAIC0wLDAgKzEsMTAzNCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jaXJjX2J1Zi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hL3hpbGlueF9kbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9kc2EuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwieGlsaW54X3Rzbi5oXFxcIlxcbitcXG4rI2RlZmluZSBEUklWRVJfTkFNRVxcdFxcdFxcdFxcXCJ4aWxpbnhfdHNuX2VwXFxcIlxcbitcXG4rI2RlZmluZSBUU05fRE1BX0NIX0lOVkFMSURcXHRcXHQweEZGVVxcbisjZGVmaW5lIFRTTl9NQVhfVFhfUVVFVUVcXHRcXHQ4XFxuKyNkZWZpbmUgVFNOX01BWF9SWF9RVUVVRVxcdFxcdDhcXG4rXFxuKyNkZWZpbmUgVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkVcXHRcXHQoRVRIX0RBVEFfTEVOICsgVkxBTl9FVEhfSExFTiArIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEVUSF9GQ1NfTEVOKVxcbitcXG4rI2RlZmluZSBUWF9CRF9OVU1fREVGQVVMVFxcdFxcdDY0XFxuKyNkZWZpbmUgUlhfQkRfTlVNX0RFRkFVTFRcXHRcXHQxMjhcXG4rXFxuKyNkZWZpbmUgRVBfUlhfUkVGSUxMX1JFVFJZXFx0XFx0bXNlY3NfdG9famlmZmllcygxMClcXG4rXFxuKy8qXFxuKyAqIFRoZSBETUEgZGVzY3JpcHRvciBzaWRlYmFuZCBzdGF0dXMgd29yZCBwYWNrcyBUSUQvVERFU1QvVFVTRVIgdG9nZXRoZXI7XFxuKyAqIFRVU0VSIG9jY3VwaWVzIHRoZSBsb3cgYnl0ZSwgVElEL1RERVNUIHNpdCBpbiB0aGUgdXBwZXIgYml0cy5cXG4rICovXFxuKyNkZWZpbmUgVFNOX1RVU0VSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuKy8qIFRVU0VSIElucHV0IFBvcnQgSUQgZmllbGQgKGJpdHMgWzU6NF0gb2YgdGhlIFRVU0VSIGZpZWxkKSAqL1xcbisjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX0lEX01BU0tcXHRcXHRHRU5NQVNLKDUsIDQpXFxuKyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfRVBcXHRcXHQweDBcXG4rI2RlZmluZSBUU05fVFVTRVJfUE9SVF9NQUMxXFx0XFx0MHgxXFxuKyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfTUFDMlxcdFxcdDB4MlxcbitcXG4rLyogU2l6ZWQgdG8gaW5kZXggcG9ydF9tZFtdIGJ5IFRVU0VSIHBvcnRfaWQgKDEgb3IgMiwgc2xvdCAwIHVudXNlZCkgKi9cXG4rI2RlZmluZSBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTXFx0KFRTTl9UVVNFUl9QT1JUX01BQzIgKyAxKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAtIHNrYiBjb250YWluZXIgZm9yIGVhY2ggaW4tZmxpZ2h0IERNQSBkZXNjcmlwdG9yXFxuKyAqIEBzZ2w6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgYmFja2luZyB0aGUgRE1BIG1hcHBpbmdcXG4rICogQGRlc2M6IGRtYWVuZ2luZSBkZXNjcmlwdG9yIGhhbmRsZVxcbisgKiBAZG1hX2FkZHJlc3M6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHNnbCBlbnRyeSAoUlggcGF0aClcXG4rICogQHNrYjogU0tCIG93bmluZyB0aGUgYnVmZmVyXFxuKyAqIEBzZ19sZW46IG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIEBzZ2wgKFRYIHBhdGgpXFxuKyAqL1xcbitzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3Ige1xcbitcXHRzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dsW01BWF9TS0JfRlJBR1MgKyAxXTtcXG4rXFx0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjO1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyZXNzO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRpbnQgc2dfbGVuO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAtIG9uZSBETUEgY2hhbm5lbCBhbmQgaXRzIFNLQiByaW5nXFxuKyAqIEBza2JfcmluZzogcGVyLXNsb3QgU0tCIGRlc2NyaXB0b3JzXFxuKyAqIEBlcDogcG9pbnRlciBiYWNrIHRvIHRoZSBvd25pbmcgRVAgaW5zdGFuY2VcXG4rICogQGNoYW46IGRtYWVuZ2luZSBjaGFubmVsIGhhbmRsZVxcbisgKiBAZG1hX2RldjogZGV2aWNlIHVzZWQgZm9yIERNQSBtYXBwaW5nICh0aGUgRE1BIGVuZ2luZSwgbm90IHRoZSBFUClcXG4rICogQHJpbmdfaGVhZDogcHJvZHVjZXIgaW5kZXhcXG4rICogQHJpbmdfdGFpbDogY29uc3VtZXIgaW5kZXhcXG4rICogQHJpbmdfc2l6ZTogbnVtYmVyIG9mIHNsb3RzIGluIEBza2JfcmluZ1xcbisgKiBAcnhfbG9jazogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGJldHdlZW4gdGhlIFJYIGNhbGxiYWNrIGFuZCB0aGUgcmVmaWxsIHRpbWVyXFxuKyAqIEB0eF9sb2NrOiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgYW5kIEByaW5nX3RhaWwgYmV0d2VlbiB4bWl0IGFuZCBUWCBjb21wbGV0aW9uXFxuKyAqIEByeF9yZWZpbGxfdGltZXI6IHJldHJpZXMgUlggcmVmaWxsIGFmdGVyIGFuIGFsbG9jYXRpb24gZmFpbHVyZVxcbisgKiBAaXNfdHg6IHRydWUgZm9yIFRYIGNoYW5uZWxzLCBmYWxzZSBmb3IgUlhcXG4rICovXFxuK3N0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiB7XFxuK1xcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqKnNrYl9yaW5nO1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwO1xcbitcXHRzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRtYV9kZXY7XFxuK1xcdHUzMiByaW5nX2hlYWQ7XFxuK1xcdHUzMiByaW5nX3RhaWw7XFxuK1xcdHUzMiByaW5nX3NpemU7XFxuK1xcdHNwaW5sb2NrX3QgcnhfbG9jaztcXHQvKiBzZXJpYWxpc2VzIEByaW5nX2hlYWQgKi9cXG4rXFx0c3BpbmxvY2tfdCB0eF9sb2NrO1xcdC8qIHNlcmlhbGlzZXMgQHJpbmdfaGVhZCBhbmQgQHJpbmdfdGFpbCAqL1xcbitcXHRzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWZpbGxfdGltZXI7XFxuK1xcdGJvb2wgaXNfdHg7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHhsbnhfdHNuX2VwIC0gRVAgTUFDIHByaXZhdGUgZGF0YSwgZW1iZWRkZWQgaW4gbmV0X2RldmljZSBwcml2IGFyZWFcXG4rICogQG5kZXY6IHRoZSBjb25kdWl0IG5ldGRldiAoXFxcImVwMFxcXCIgZm9yIHRoZSBmaXJzdCBJUCBpbnN0YW5jZSlcXG4rICogQGRldjogYmFja2luZyBkZXZpY2VcXG4rICogQG51bV90eF9xdWV1ZXM6IG51bWJlciBvZiBUWCBETUEgY2hhbm5lbHMgKG9uZSBwZXIgcHJpb3JpdHkpXFxuKyAqIEBudW1fcnhfcXVldWVzOiBudW1iZXIgb2YgUlggRE1BIGNoYW5uZWxzXFxuKyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLVxcdTAwM2UgcGh5c2ljYWwgRE1BIGNoYW5uZWwgbnVtYmVyXFxuKyAqIEByeF9jaGFuX251bTogUlggcmluZyBpbmRleCAtXFx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcXG4rICogQG1heF9mcm1fc2l6ZTogbWF4aW11bSBmcmFtZSBzaXplIGFjY2VwdGVkIG9uIFJYXFxuKyAqIEB0eF9jaGFuczogYXJyYXkgb2YgVFggY2hhbm5lbHMgKHNpemUgQG51bV90eF9xdWV1ZXMpXFxuKyAqIEByeF9jaGFuczogYXJyYXkgb2YgUlggY2hhbm5lbHMgKHNpemUgQG51bV9yeF9xdWV1ZXMpXFxuKyAqIEBjbG9zaW5nOiBzZXQgaW4gbmRvX3N0b3Agc28gdGhlIFJYIGNvbXBsZXRpb24gY2FsbGJhY2sgc3RvcHMgcmUtYXJtaW5nXFxuKyAqIEBwb3J0X21kOiBwZXItVFVTRVItcG9ydCBNRVRBREFUQV9IV19QT1JUX01VWCBlbnRyaWVzIGF0dGFjaGVkIG9uIFJYLFxcbisgKlxcdGluZGV4ZWQgYnkgcG9ydF9pZCAoMSBmb3IgTUFDMSwgMiBmb3IgTUFDMilcXG4rICovXFxuK3N0cnVjdCB4bG54X3Rzbl9lcCB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK1xcdHUzMiBudW1fdHhfcXVldWVzO1xcbitcXHR1MzIgbnVtX3J4X3F1ZXVlcztcXG4rXFx0dTMyIHR4X2RtYV9jaGFuX21hcFtUU05fTUFYX1RYX1FVRVVFXTtcXG4rXFx0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xcbitcXHR1MzIgbWF4X2ZybV9zaXplO1xcbitcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoqdHhfY2hhbnM7XFxuK1xcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnJ4X2NoYW5zO1xcbitcXG4rXFx0Ym9vbCBjbG9zaW5nO1xcbitcXG4rXFx0c3RydWN0IG1ldGFkYXRhX2RzdCAqcG9ydF9tZFtYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpcXG4rZXBfZ2V0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiwgaW50IGlkeClcXG4re1xcbitcXHRyZXR1cm4geGNoYW4tXFx1MDAzZXNrYl9yaW5nW2lkeF07XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVwX2RtYV9yeF9jYih2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzdWx0KTtcXG4rXFxuK3N0YXRpYyBpbnQgZXBfcnhfc3VibWl0X2Rlc2Moc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYV9yeF9kZXNjO1xcbitcXHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHhjaGFuLVxcdTAwM2VlcDtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0ZG1hX2FkZHJfdCBhZGRyO1xcbitcXG4rXFx0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQgXFx1MDAyNiAoeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcXG4rXFx0aWYgKCFza2J1Zl9kbWEpXFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXG4rXFx0c2tiID0gZGV2X2FsbG9jX3NrYihlcC1cXHUwMDNlbWF4X2ZybV9zaXplKTtcXG4rXFx0aWYgKCFza2IpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c2dfaW5pdF90YWJsZShza2J1Zl9kbWEtXFx1MDAzZXNnbCwgMSk7XFxuK1xcdGFkZHIgPSBkbWFfbWFwX3NpbmdsZSh4Y2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tiLVxcdTAwM2VkYXRhLCBlcC1cXHUwMDNlbWF4X2ZybV9zaXplLFxcbitcXHRcXHRcXHQgICAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbitcXHRpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoeGNoYW4tXFx1MDAzZWRtYV9kZXYsIGFkZHIpKSkge1xcbitcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbitcXHRcXHRcXHRkZXZfd2FybihlcC1cXHUwMDNlZGV2LCBcXFwiRE1BIG1hcHBpbmcgZXJyb3Igb24gUlggc3VibWl0XFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbitcXHR9XFxuK1xcdHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cXHUwMDNlc2dsKSA9IGFkZHI7XFxuK1xcdHNnX2RtYV9sZW4oc2tidWZfZG1hLVxcdTAwM2VzZ2wpID0gZXAtXFx1MDAzZW1heF9mcm1fc2l6ZTtcXG4rXFx0ZG1hX3J4X2Rlc2MgPSBkbWFlbmdpbmVfcHJlcF9zbGF2ZV9zZyh4Y2hhbi1cXHUwMDNlY2hhbiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIDEsIERNQV9ERVZfVE9fTUVNLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBETUFfUFJFUF9JTlRFUlJVUFQpO1xcbitcXHRpZiAoIWRtYV9yeF9kZXNjKVxcbitcXHRcXHRnb3RvIGVycl91bm1hcF9za2I7XFxuK1xcbitcXHRza2J1Zl9kbWEtXFx1MDAzZXNrYiA9IHNrYjtcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2VkbWFfYWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cXHUwMDNlc2dsKTtcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2VkZXNjID0gZG1hX3J4X2Rlc2M7XFxuK1xcdGRtYV9yeF9kZXNjLVxcdTAwM2VjYWxsYmFja19wYXJhbSA9IHhjaGFuO1xcbitcXHRkbWFfcnhfZGVzYy1cXHUwMDNlY2FsbGJhY2tfcmVzdWx0ID0gZXBfZG1hX3J4X2NiO1xcbitcXHR4Y2hhbi1cXHUwMDNlcmluZ19oZWFkKys7XFxuK1xcdGRtYWVuZ2luZV9zdWJtaXQoZG1hX3J4X2Rlc2MpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfdW5tYXBfc2tiOlxcbitcXHRkbWFfdW5tYXBfc2luZ2xlKHhjaGFuLVxcdTAwM2VkbWFfZGV2LCBhZGRyLCBlcC1cXHUwMDNlbWF4X2ZybV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xcbitlcnJfZnJlZV9za2I6XFxuK1xcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4rXFx0cmV0dXJuIC1FTk9NRU07XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGVwX3J4X3JlZmlsbChzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuLCBib29sIGFybV90aW1lcilcXG4re1xcbitcXHRpbnQgYXZhaWwsIGk7XFxuK1xcbitcXHRndWFyZChzcGlubG9ja19iaCkoXFx1MDAyNnhjaGFuLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UoeGNoYW4tXFx1MDAzZWVwLVxcdTAwM2VjbG9zaW5nKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0YXZhaWwgPSBDSVJDX1NQQUNFKHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQsIFJFQURfT05DRSh4Y2hhbi1cXHUwMDNlcmluZ190YWlsKSxcXG4rXFx0XFx0XFx0ICAgeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhdmFpbDsgaSsrKSB7XFxuK1xcdFxcdGlmIChlcF9yeF9zdWJtaXRfZGVzYyh4Y2hhbikpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFxuK1xcdGlmICh4Y2hhbi1cXHUwMDNlcmluZ19oZWFkICE9IFJFQURfT05DRSh4Y2hhbi1cXHUwMDNlcmluZ190YWlsKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoYXJtX3RpbWVyKVxcbitcXHRcXHRtb2RfdGltZXIoXFx1MDAyNnhjaGFuLVxcdTAwM2VyeF9yZWZpbGxfdGltZXIsIGppZmZpZXMgKyBFUF9SWF9SRUZJTExfUkVUUlkpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9yeF9yZWZpbGxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiA9IHRpbWVyX2NvbnRhaW5lcl9vZih4Y2hhbiwgdCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHJ4X3JlZmlsbF90aW1lcik7XFxuK1xcbitcXHRlcF9yeF9yZWZpbGwoeGNoYW4sIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9kbWFfcnhfY2Iodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlc3VsdClcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcXG4rXFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XFxuK1xcdHNpemVfdCBtZXRhX2xlbiwgbWV0YV9tYXhfbGVuLCByeF9sZW47XFxuK1xcdHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSB4Y2hhbi1cXHUwMDNlZXA7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZXAtXFx1MDAzZW5kZXY7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuK1xcdHUzMiBwb3J0X2lkLCB0dXNlcjtcXG4rXFx0dTMyICptZXRhZGF0YTtcXG4rXFxuK1xcdHNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi1cXHUwMDNlcmluZ190YWlsIFxcdTAwMjYgKHhjaGFuLVxcdTAwM2VyaW5nX3NpemUgLSAxKSk7XFxuK1xcdFdSSVRFX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCArIDEpO1xcbitcXHRza2IgPSBza2J1Zl9kbWEtXFx1MDAzZXNrYjtcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2Vza2IgPSBOVUxMO1xcbitcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVxcdTAwM2VkbWFfYWRkcmVzcyxcXG4rXFx0XFx0XFx0IGVwLVxcdTAwM2VtYXhfZnJtX3NpemUsIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcbitcXHRpZiAocmVzdWx0LVxcdTAwM2VyZXN1bHQgIT0gRE1BX1RSQU5TX05PRVJST1IpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZXAtXFx1MDAzZWRldiwgXFxcIlJYIERNQSB0cmFuc2ZlciBlcnJvciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IHJlc3VsdC1cXHUwMDNlcmVzdWx0KTtcXG4rXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZXJyb3JzKTtcXG4rXFx0XFx0Z290byBzdWJtaXRfbmV3O1xcbitcXHR9XFxuK1xcbitcXHRtZXRhZGF0YSA9IGRtYWVuZ2luZV9kZXNjX2dldF9tZXRhZGF0YV9wdHIoc2tidWZfZG1hLVxcdTAwM2VkZXNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2bWV0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtZXRhX21heF9sZW4pO1xcbitcXHRpZiAoSVNfRVJSX09SX05VTEwobWV0YWRhdGEpKSB7XFxuK1xcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdGRldl93YXJuKGVwLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gZ2V0IFJYIG1ldGFkYXRhIHBvaW50ZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9kcm9wcGVkKTtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9lcnJvcnMpO1xcbitcXHRcXHRnb3RvIHN1Ym1pdF9uZXc7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIE1DRE1BIG1ldGFkYXRhOiBbMF0gPSBzdGF0dXMsIFsxXSA9IHNpZGViYW5kIChUSUQvVERFU1QvVFVTRVIpLCBbMi4uXSA9IGFwcCAqL1xcbitcXHR0dXNlciA9IG1ldGFkYXRhWzFdIFxcdTAwMjYgVFNOX1RVU0VSX01BU0s7XFxuK1xcdHJ4X2xlbiA9IGVwLVxcdTAwM2VtYXhfZnJtX3NpemUgLSByZXN1bHQtXFx1MDAzZXJlc2lkdWU7XFxuK1xcbitcXHRpZiAocnhfbGVuIFxcdTAwM2UgZXAtXFx1MDAzZW1heF9mcm1fc2l6ZSB8fCByeF9sZW4gXFx1MDAzYyBFVEhfSExFTikge1xcbitcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbitcXHRcXHRcXHRkZXZfd2FybihlcC1cXHUwMDNlZGV2LCBcXFwiSW52YWxpZCBSWCBsZW5ndGggJXp1IChtYXg9JXUsIG1pbj0ldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCByeF9sZW4sIGVwLVxcdTAwM2VtYXhfZnJtX3NpemUsIEVUSF9ITEVOKTtcXG4rXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZXJyb3JzKTtcXG4rXFx0XFx0Z290byBzdWJtaXRfbmV3O1xcbitcXHR9XFxuK1xcbitcXHRwb3J0X2lkID0gRklFTERfR0VUKFRTTl9UVVNFUl9QT1JUX0lEX01BU0ssIHR1c2VyKTtcXG4rXFx0aWYgKHBvcnRfaWQgIT0gVFNOX1RVU0VSX1BPUlRfTUFDMSBcXHUwMDI2XFx1MDAyNiBwb3J0X2lkICE9IFRTTl9UVVNFUl9QT1JUX01BQzIpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0ZGV2X2RiZyhlcC1cXHUwMDNlZGV2LCBcXFwiUlggZHJvcHBpbmcgdW5leHBlY3RlZCBUVVNFUiBwb3J0X2lkPSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRwb3J0X2lkKTtcXG4rXFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuK1xcdFxcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdGdvdG8gc3VibWl0X25ldztcXG4rXFx0fVxcbitcXG4rXFx0c2tiX3B1dChza2IsIHJ4X2xlbik7XFxuK1xcdGlmIChuZXRkZXZfdXNlc19kc2EobmRldikpIHtcXG4rXFx0XFx0ZHN0X2hvbGQoXFx1MDAyNmVwLVxcdTAwM2Vwb3J0X21kW3BvcnRfaWRdLVxcdTAwM2Vkc3QpO1xcbitcXHRcXHRza2JfZHN0X3NldChza2IsIFxcdTAwMjZlcC1cXHUwMDNlcG9ydF9tZFtwb3J0X2lkXS1cXHUwMDNlZHN0KTtcXG4rXFx0fVxcbitcXHRza2ItXFx1MDAzZWRldiA9IG5kZXY7XFxuK1xcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5kZXYpO1xcbitcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuK1xcdF9fbmV0aWZfcngoc2tiKTtcXG4rXFxuK1xcdERFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7XFxuK1xcdERFVl9TVEFUU19BREQobmRldiwgcnhfYnl0ZXMsIHJ4X2xlbik7XFxuK1xcbitzdWJtaXRfbmV3OlxcbitcXHRlcF9yeF9yZWZpbGwoeGNoYW4sIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9kbWFfdHhfY2Iodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlc3VsdClcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcXG4rXFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XFxuK1xcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbitcXHRpbnQgc2dfbGVuO1xcbitcXHRpbnQgbGVuO1xcbitcXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spIHtcXG4rXFx0XFx0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sXFxuK1xcdFxcdFxcdFxcdFxcdHhjaGFuLVxcdTAwM2VyaW5nX3RhaWwgXFx1MDAyNiAoeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcXG4rXFx0XFx0aWYgKCFza2J1Zl9kbWEgfHwgIXNrYnVmX2RtYS1cXHUwMDNlc2tiKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRza2IgPSBza2J1Zl9kbWEtXFx1MDAzZXNrYjtcXG4rXFx0XFx0c2dsID0gc2tidWZfZG1hLVxcdTAwM2VzZ2w7XFxuK1xcdFxcdHNnX2xlbiA9IHNrYnVmX2RtYS1cXHUwMDNlc2dfbGVuO1xcbitcXG4rXFx0XFx0ZG1hX3VubWFwX3NnKHhjaGFuLVxcdTAwM2VkbWFfZGV2LCBzZ2wsIHNnX2xlbiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcbitcXHRcXHRza2J1Zl9kbWEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCArIDEpO1xcbitcXHR9XFxuK1xcbitcXHRuZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuK1xcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xcbitcXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShyZXN1bHQtXFx1MDAzZXJlc3VsdCAhPSBETUFfVFJBTlNfTk9FUlJPUikpIHtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9lcnJvcnMpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X3BhY2tldHMpO1xcbitcXHRcXHRERVZfU1RBVFNfQUREKG5kZXYsIHR4X2J5dGVzLCBsZW4pO1xcbitcXHR9XFxuK1xcbitcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuK1xcdG5ldGlmX3R4cV9jb21wbGV0ZWRfd2FrZSh0eHEsIDEsIGxlbixcXG4rXFx0XFx0XFx0XFx0IENJUkNfU1BBQ0UoUkVBRF9PTkNFKHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUkVBRF9PTkNFKHhjaGFuLVxcdTAwM2VyaW5nX3RhaWwpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgeGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSksIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgbmV0ZGV2X3R4X3QgZXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYV90eF9kZXNjO1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hO1xcbitcXHRpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbjtcXG4rXFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xcbitcXHRpbnQgc2dfbGVuLCBuZW50cywgcmV0O1xcbitcXHRkbWFfY29va2llX3QgY29va2llO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHF1ZXVlIFxcdTAwM2U9IGVwLVxcdTAwM2VudW1fdHhfcXVldWVzKSkge1xcbitcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbitcXHRcXHRcXHRuZXRkZXZfd2FybihuZGV2LCBcXFwiSW52YWxpZCBUWCBxdWV1ZSAlZCAobWF4ICV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHF1ZXVlLCBlcC1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuK1xcdFxcdGdvdG8gZXJyX2Ryb3Bfc2tiO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZXAtXFx1MDAzZXR4X2RtYV9jaGFuX21hcFtxdWV1ZV0gPT0gVFNOX0RNQV9DSF9JTlZBTElEKSB7XFxuK1xcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdG5ldGRldl93YXJuKG5kZXYsIFxcXCJMb2dpY2FsIFRYIHF1ZXVlICVkIGhhcyBpbnZhbGlkIERNQSBtYXBwaW5nXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgcXVldWUpO1xcbitcXHRcXHRnb3RvIGVycl9kcm9wX3NrYjtcXG4rXFx0fVxcbitcXG4rXFx0eGNoYW4gPSBlcC1cXHUwMDNldHhfY2hhbnNbcXVldWVdO1xcbitcXG4rXFx0c2dfbGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncyArIDE7XFxuK1xcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgcXVldWUpO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4Y2hhbi1cXHUwMDNldHhfbG9jayk7XFxuK1xcdGlmIChDSVJDX1NQQUNFKHhjaGFuLVxcdTAwM2VyaW5nX2hlYWQsIFJFQURfT05DRSh4Y2hhbi1cXHUwMDNlcmluZ190YWlsKSxcXG4rXFx0XFx0ICAgICAgIHhjaGFuLVxcdTAwM2VyaW5nX3NpemUpIFxcdTAwM2M9IDEpIHtcXG4rXFx0XFx0bmV0aWZfdHhxX3RyeV9zdG9wKHR4cSxcXG4rXFx0XFx0XFx0XFx0ICAgQ0lSQ19TUEFDRSh4Y2hhbi1cXHUwMDNlcmluZ19oZWFkLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBSRUFEX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfdGFpbCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHhjaGFuLVxcdTAwM2VyaW5nX3NpemUpLFxcbitcXHRcXHRcXHRcXHQgICAyKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhjaGFuLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0bmV0ZGV2X3dhcm4obmRldiwgXFxcIlRTTiBUWCByaW5nIGZ1bGxcXFxcblxcXCIpO1xcbitcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbitcXHR9XFxuK1xcbitcXHRza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbiwgeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCBcXHUwMDI2ICh4Y2hhbi1cXHUwMDNlcmluZ19zaXplIC0gMSkpO1xcbitcXHRpZiAoIXNrYnVmX2RtYSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXHRcXHRnb3RvIGVycl9kcm9wX3NrYjtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXG4rXFx0c2dfaW5pdF90YWJsZShza2J1Zl9kbWEtXFx1MDAzZXNnbCwgc2dfbGVuKTtcXG4rXFx0cmV0ID0gc2tiX3RvX3NndmVjKHNrYiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsIDAsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX2Ryb3Bfc2tiO1xcbitcXHRzZ19sZW4gPSByZXQ7XFxuK1xcbitcXHRuZW50cyA9IGRtYV9tYXBfc2coeGNoYW4tXFx1MDAzZWRtYV9kZXYsIHNrYnVmX2RtYS1cXHUwMDNlc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xcbitcXHRpZiAoIW5lbnRzKVxcbitcXHRcXHRnb3RvIGVycl9kcm9wX3NrYjtcXG4rXFxuK1xcdGRtYV90eF9kZXNjID0gZG1hZW5naW5lX3ByZXBfc2xhdmVfc2coeGNoYW4tXFx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cXHUwMDNlc2dsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBuZW50cywgRE1BX01FTV9UT19ERVYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIERNQV9QUkVQX0lOVEVSUlVQVCk7XFxuK1xcdGlmICghZG1hX3R4X2Rlc2MpXFxuK1xcdFxcdGdvdG8gZXJyX3VubWFwX3NnO1xcbitcXG4rXFx0c2tidWZfZG1hLVxcdTAwM2Vza2IgPSBza2I7XFxuK1xcdHNrYnVmX2RtYS1cXHUwMDNlc2dfbGVuID0gc2dfbGVuO1xcbitcXHRkbWFfdHhfZGVzYy1cXHUwMDNlY2FsbGJhY2tfcGFyYW0gPSB4Y2hhbjtcXG4rXFx0ZG1hX3R4X2Rlc2MtXFx1MDAzZWNhbGxiYWNrX3Jlc3VsdCA9IGVwX2RtYV90eF9jYjtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXHRjb29raWUgPSBkbWFlbmdpbmVfc3VibWl0KGRtYV90eF9kZXNjKTtcXG4rXFx0aWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2eGNoYW4tXFx1MDAzZXR4X2xvY2spO1xcbitcXHRcXHRza2J1Zl9kbWEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdGdvdG8gZXJyX3VubWFwX3NnO1xcbitcXHR9XFxuK1xcdFdSSVRFX09OQ0UoeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCwgeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCArIDEpO1xcbitcXHRuZXRkZXZfdHhfc2VudF9xdWV1ZSh0eHEsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0bmV0aWZfdHhxX21heWJlX3N0b3AodHhxLFxcbitcXHRcXHRcXHQgICAgIENJUkNfU1BBQ0UoeGNoYW4tXFx1MDAzZXJpbmdfaGVhZCxcXG4rXFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHhjaGFuLVxcdTAwM2VyaW5nX3RhaWwpLFxcbitcXHRcXHRcXHRcXHRcXHR4Y2hhbi1cXHUwMDNlcmluZ19zaXplKSxcXG4rXFx0XFx0XFx0ICAgICAyLCAyKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhjaGFuLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFxuK1xcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFxuK1xcdHJldHVybiBORVRERVZfVFhfT0s7XFxuK1xcbitlcnJfdW5tYXBfc2c6XFxuK1xcdGRtYV91bm1hcF9zZyh4Y2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsIHNnX2xlbiwgRE1BX1RPX0RFVklDRSk7XFxuK2Vycl9kcm9wX3NrYjpcXG4rXFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4rXFx0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9kcm9wcGVkKTtcXG4rXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rfVxcbitcXG4rc3RhdGljIGludCBlcF9pbml0X2RtYWVuZ2luZShzdHJ1Y3QgeGxueF90c25fZXAgKmVwKTtcXG4rc3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XFxuK1xcbitzdGF0aWMgaW50IGVwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0V1JJVEVfT05DRShlcC1cXHUwMDNlY2xvc2luZywgZmFsc2UpO1xcbitcXG4rXFx0cmV0ID0gZXBfaW5pdF9kbWFlbmdpbmUoZXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmRldiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIERNQSBlbmdpbmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0bmV0aWZfdHhfZGlzYWJsZShuZGV2KTtcXG4rXFx0V1JJVEVfT05DRShlcC1cXHUwMDNlY2xvc2luZywgdHJ1ZSk7XFxuK1xcdGVwX2V4aXRfZG1hZW5naW5lKGVwKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5kZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0bmV0ZGV2X3R4X3Jlc2V0X3N1YnF1ZXVlKG5kZXYsIGkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICplZClcXG4re1xcbitcXHRzdHJzY3B5KGVkLVxcdTAwM2Vkcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoZWQtXFx1MDAzZWRyaXZlcikpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVwX25ldGRldl9vcHMgPSB7XFxuK1xcdC5uZG9fb3BlblxcdFxcdD0gZXBfb3BlbixcXG4rXFx0Lm5kb19zdG9wXFx0XFx0PSBlcF9zdG9wLFxcbitcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGVwX3N0YXJ0X3htaXQsXFxuK1xcdC5uZG9fdmFsaWRhdGVfYWRkclxcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXFxuK1xcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBldGhfbWFjX2FkZHIsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVwX2V0aHRvb2xfb3BzID0ge1xcbitcXHQuZ2V0X2RydmluZm9cXHQ9IGVwX2dldF9kcnZpbmZvLFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqXFxuK2VwX2FsbG9jX2RtYV9jaGFuKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAsIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgaXNfdHgsXFxuK1xcdFxcdCAgaW50IHJpbmdfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKmNoYW47XFxuK1xcdHN0cnVjdCBkbWFfY2hhbiAqZXJyX2NoYW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Y2hhbiA9IGt6YWxsb2Nfb2JqKCpjaGFuKTtcXG4rXFx0aWYgKCFjaGFuKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGNoYW4tXFx1MDAzZWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVxcdTAwM2VkZXYsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKGNoYW4tXFx1MDAzZWNoYW4pKSB7XFxuK1xcdFxcdGVycl9jaGFuID0gY2hhbi1cXHUwMDNlY2hhbjtcXG4rXFx0XFx0a2ZyZWUoY2hhbik7XFxuK1xcdFxcdHJldHVybiBFUlJfQ0FTVChlcnJfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGNoYW4tXFx1MDAzZXNrYl9yaW5nID0ga2NhbGxvYyhyaW5nX3NpemUsIHNpemVvZigqY2hhbi1cXHUwMDNlc2tiX3JpbmcpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjaGFuLVxcdTAwM2Vza2JfcmluZykge1xcbitcXHRcXHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXFx1MDAzZWNoYW4pO1xcbitcXHRcXHRrZnJlZShjaGFuKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByaW5nX3NpemU7IGkrKykge1xcbitcXHRcXHRjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSA9IGt6YWxsb2Nfb2JqKCpjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSk7XFxuK1xcdFxcdGlmICghY2hhbi1cXHUwMDNlc2tiX3JpbmdbaV0pIHtcXG4rXFx0XFx0XFx0d2hpbGUgKC0taSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRcXHRrZnJlZShjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSk7XFxuK1xcdFxcdFxcdGtmcmVlKGNoYW4tXFx1MDAzZXNrYl9yaW5nKTtcXG4rXFx0XFx0XFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFx0XFx0XFx0a2ZyZWUoY2hhbik7XFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGNoYW4tXFx1MDAzZWlzX3R4ID0gaXNfdHg7XFxuK1xcdGNoYW4tXFx1MDAzZWVwID0gZXA7XFxuK1xcdGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSA9IHJpbmdfc2l6ZTtcXG4rXFx0Y2hhbi1cXHUwMDNlZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLVxcdTAwM2VjaGFuKTtcXG4rXFx0aWYgKGlzX3R4KSB7XFxuK1xcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZjaGFuLVxcdTAwM2V0eF9sb2NrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmNoYW4tXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2Y2hhbi1cXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBlcF9yeF9yZWZpbGxfdGltZXIsIDApO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY2hhbjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZXBfZnJlZV9kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKmNoYW4pXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIWNoYW4pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChjaGFuLVxcdTAwM2VjaGFuKSB7XFxuK1xcdFxcdGlmICghY2hhbi1cXHUwMDNlaXNfdHgpIHtcXG4rXFx0XFx0XFx0LyogZXBfc3RvcCgpIHNldHMgY2xvc2luZyBiZWZvcmUgdGVhcmRvd24uIFRha2UgcnhfbG9ja1xcbitcXHRcXHRcXHQgKiBzbyBhbnkgcmVmaWxsIHRoYXQgYWxyZWFkeSBwYXNzZWQgdGhlIGNsb3NpbmcgY2hlY2tcXG4rXFx0XFx0XFx0ICogZmluaXNoZXMgYW5kIG5vIGxhdGVyIG9uZSBzdWJtaXRzIG9yIGFybXMgdGhlIHRpbWVyLFxcbitcXHRcXHRcXHQgKiB0aGVuIHNodXQgZG93biB0aGUgdGltZXIgc28gaXQgY2Fubm90IGJlIHJlYXJtZWRcXG4rXFx0XFx0XFx0ICogYmVmb3JlIHRoZSBjaGFubmVsIGlzIGZyZWVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjaGFuLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmNoYW4tXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZjaGFuLVxcdTAwM2VyeF9yZWZpbGxfdGltZXIpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoY2hhbi1cXHUwMDNlY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChjaGFuLVxcdTAwM2Vpc190eCkge1xcbitcXHRcXHR3aGlsZSAoY2hhbi1cXHUwMDNlcmluZ190YWlsICE9IGNoYW4tXFx1MDAzZXJpbmdfaGVhZCkge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKnNrYnVmX2RtYTtcXG4rXFxuK1xcdFxcdFxcdHNrYnVmX2RtYSA9IGNoYW4tXFx1MDAzZXNrYl9yaW5nW2NoYW4tXFx1MDAzZXJpbmdfdGFpbCBcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgKGNoYW4tXFx1MDAzZXJpbmdfc2l6ZSAtIDEpXTtcXG4rXFx0XFx0XFx0aWYgKHNrYnVmX2RtYSBcXHUwMDI2XFx1MDAyNiBza2J1Zl9kbWEtXFx1MDAzZXNrYikge1xcbitcXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2coY2hhbi1cXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVxcdTAwM2VzZ2wsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2tidWZfZG1hLVxcdTAwM2VzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xcbitcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2J1Zl9kbWEtXFx1MDAzZXNrYik7XFxuK1xcdFxcdFxcdFxcdHNrYnVmX2RtYS1cXHUwMDNlc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRjaGFuLVxcdTAwM2VyaW5nX3RhaWwrKztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAoY2hhbi1cXHUwMDNlc2tiX3JpbmcpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNoYW4tXFx1MDAzZXJpbmdfc2l6ZTsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hID0gY2hhbi1cXHUwMDNlc2tiX3JpbmdbaV07XFxuK1xcbitcXHRcXHRcXHRpZiAoc2tidWZfZG1hIFxcdTAwMjZcXHUwMDI2ICFjaGFuLVxcdTAwM2Vpc190eCBcXHUwMDI2XFx1MDAyNiBza2J1Zl9kbWEtXFx1MDAzZXNrYikge1xcbitcXHRcXHRcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKGNoYW4tXFx1MDAzZWRtYV9kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBza2J1Zl9kbWEtXFx1MDAzZWRtYV9hZGRyZXNzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY2hhbi1cXHUwMDNlZXAtXFx1MDAzZW1heF9mcm1fc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdFxcdFxcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYnVmX2RtYS1cXHUwMDNlc2tiKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRrZnJlZShjaGFuLVxcdTAwM2Vza2JfcmluZ1tpXSk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0a2ZyZWUoY2hhbi1cXHUwMDNlc2tiX3JpbmcpO1xcbitcXHR9XFxuK1xcdGlmIChjaGFuLVxcdTAwM2VjaGFuKVxcbitcXHRcXHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXFx1MDAzZWNoYW4pO1xcbitcXG4rXFx0a2ZyZWUoY2hhbik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVwX2V4aXRfZG1hZW5naW5lKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoZXAtXFx1MDAzZXR4X2NoYW5zKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlcC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHRlcF9mcmVlX2RtYV9jaGFuKGVwLVxcdTAwM2V0eF9jaGFuc1tpXSk7XFxuK1xcdFxcdGtmcmVlKGVwLVxcdTAwM2V0eF9jaGFucyk7XFxuK1xcdFxcdGVwLVxcdTAwM2V0eF9jaGFucyA9IE5VTEw7XFxuK1xcdH1cXG4rXFx0aWYgKGVwLVxcdTAwM2VyeF9jaGFucykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXAtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcXG4rXFx0XFx0XFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cXHUwMDNlcnhfY2hhbnNbaV0pO1xcbitcXHRcXHRrZnJlZShlcC1cXHUwMDNlcnhfY2hhbnMpO1xcbitcXHRcXHRlcC1cXHUwMDNlcnhfY2hhbnMgPSBOVUxMO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcXG4re1xcbitcXHRpbnQgdHhfYWxsb2NhdGVkID0gMCwgcnhfYWxsb2NhdGVkID0gMDtcXG4rXFx0Y2hhciBuYW1lWzE2XTtcXG4rXFx0aW50IGksIHJldDtcXG4rXFxuK1xcdGVwLVxcdTAwM2V0eF9jaGFucyA9IGtjYWxsb2MoZXAtXFx1MDAzZW51bV90eF9xdWV1ZXMsIHNpemVvZigqZXAtXFx1MDAzZXR4X2NoYW5zKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWVwLVxcdTAwM2V0eF9jaGFucylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcC1cXHUwMDNlcnhfY2hhbnMgPSBrY2FsbG9jKGVwLVxcdTAwM2VudW1fcnhfcXVldWVzLCBzaXplb2YoKmVwLVxcdTAwM2VyeF9jaGFucyksXFxuK1xcdFxcdFxcdCAgICAgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFlcC1cXHUwMDNlcnhfY2hhbnMpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV90eDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGVwLVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4rXFx0XFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwidHhfY2hhbiV1XFxcIiwgZXAtXFx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSk7XFxuK1xcdFxcdGVwLVxcdTAwM2V0eF9jaGFuc1tpXSA9IGVwX2FsbG9jX2RtYV9jaGFuKGVwLCBuYW1lLCB0cnVlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgVFhfQkRfTlVNX0RFRkFVTFQpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGVwLVxcdTAwM2V0eF9jaGFuc1tpXSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihlcC1cXHUwMDNldHhfY2hhbnNbaV0pO1xcbitcXHRcXHRcXHRlcC1cXHUwMDNldHhfY2hhbnNbaV0gPSBOVUxMO1xcbitcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2NoYW5zO1xcbitcXHRcXHR9XFxuK1xcdFxcdHR4X2FsbG9jYXRlZCsrO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXAtXFx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xcbitcXHRcXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCJyeF9jaGFuJXVcXFwiLCBlcC1cXHUwMDNlcnhfY2hhbl9udW1baV0pO1xcbitcXHRcXHRlcC1cXHUwMDNlcnhfY2hhbnNbaV0gPSBlcF9hbGxvY19kbWFfY2hhbihlcCwgbmFtZSwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBSWF9CRF9OVU1fREVGQVVMVCk7XFxuK1xcdFxcdGlmIChJU19FUlIoZXAtXFx1MDAzZXJ4X2NoYW5zW2ldKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGVwLVxcdTAwM2VyeF9jaGFuc1tpXSk7XFxuK1xcdFxcdFxcdGVwLVxcdTAwM2VyeF9jaGFuc1tpXSA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY2hhbnM7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cnhfYWxsb2NhdGVkKys7XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlcC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKSB7XFxuK1xcdFxcdGlmICghZXBfcnhfcmVmaWxsKGVwLVxcdTAwM2VyeF9jaGFuc1tpXSwgZmFsc2UpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZXAtXFx1MDAzZWRldiwgXFxcIlJYIGNoYW5uZWwgJWQ6IG5vIGRlc2NyaXB0b3JzIGFybWVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRpKTtcXG4rXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9jaGFucztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX2NoYW5zOlxcbitcXHRXUklURV9PTkNFKGVwLVxcdTAwM2VjbG9zaW5nLCB0cnVlKTtcXG4rXFx0d2hpbGUgKC0tcnhfYWxsb2NhdGVkIFxcdTAwM2U9IDApXFxuK1xcdFxcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXFx1MDAzZXJ4X2NoYW5zW3J4X2FsbG9jYXRlZF0pO1xcbitcXHR3aGlsZSAoLS10eF9hbGxvY2F0ZWQgXFx1MDAzZT0gMClcXG4rXFx0XFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cXHUwMDNldHhfY2hhbnNbdHhfYWxsb2NhdGVkXSk7XFxuK1xcdGtmcmVlKGVwLVxcdTAwM2VyeF9jaGFucyk7XFxuK1xcdGVwLVxcdTAwM2VyeF9jaGFucyA9IE5VTEw7XFxuK2Vycl9mcmVlX3R4OlxcbitcXHRrZnJlZShlcC1cXHUwMDNldHhfY2hhbnMpO1xcbitcXHRlcC1cXHUwMDNldHhfY2hhbnMgPSBOVUxMO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXFxuK3tcXG4rXFx0c3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmcgPSB7IC5yZXNldCA9IDEgfTtcXG4rXFx0c3RydWN0IGRtYV9jaGFuICpyZXNldF9jaGFuO1xcbitcXHRjaGFyIG5hbWVbMTZdO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcXFwidHhfY2hhbiV1XFxcIiwgZXAtXFx1MDAzZXR4X2RtYV9jaGFuX21hcFswXSk7XFxuK1xcdHJlc2V0X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVxcdTAwM2VkZXYsIG5hbWUpO1xcbitcXHRpZiAoSVNfRVJSKHJlc2V0X2NoYW4pKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cXHUwMDNlZGV2LCBQVFJfRVJSKHJlc2V0X2NoYW4pLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVxdWVzdCAlcyBmb3IgcmVzZXRcXFxcblxcXCIsIG5hbWUpO1xcbitcXG4rXFx0cmV0ID0geGlsaW54X3ZkbWFfY2hhbm5lbF9zZXRfY29uZmlnKHJlc2V0X2NoYW4sIFxcdTAwMjZjZmcpO1xcbitcXHRkbWFfcmVsZWFzZV9jaGFubmVsKHJlc2V0X2NoYW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gcmVzZXQgRE1BIGNvbnRyb2xsZXJcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFBhcnNlIHRoZSBcXFwidHgtcXVldWVzLWNvbmZpZ1xcXCIgY2hpbGQgb2YgdGhlIEVQIG5vZGUuIFRoZSBsb2dpY2FsIHF1ZXVlXFxuKyAqIGluZGV4IGlzIHRha2VuIGZyb20gdGhlIFxcXCJxdWV1ZVxcdTAwM2NOXFx1MDAzZVxcXCIgbm9kZSBuYW1lLCBzbyB0aGUgbWFwcGluZyBkb2VzIG5vdFxcbisgKiBkZXBlbmQgb24gdGhlIG9yZGVyIHRoZSBjaGlsZCBub2RlcyBhcHBlYXIgaW4gdGhlIGRldmljZSB0cmVlLlxcbisgKi9cXG4rc3RhdGljIGludCBlcF9wYXJzZV90eF9xdWV1ZV9jb25maWcoc3RydWN0IHhsbnhfdHNuX2VwICplcCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdHhjZmdfbnAsIHUxNiB0eF9wcmVzZW50KVxcbit7XFxuK1xcdERFQ0xBUkVfQklUTUFQKHF1ZXVlX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307XFxuK1xcdERFQ0xBUkVfQklUTUFQKGNoYW5fc2VlbiwgVFNOX01BWF9UWF9RVUVVRSkgPSB7fTtcXG4rXFx0dW5zaWduZWQgaW50IGNvdW50ID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHR4Y2ZnX25wLCBxbm9kZSkge1xcbitcXHRcXHR1MzIgY2hhbiwgcXVldWU7XFxuK1xcbitcXHRcXHRpZiAoIXN0cl9oYXNfcHJlZml4KHFub2RlLVxcdTAwM2VuYW1lLCBcXFwicXVldWVcXFwiKSB8fFxcbitcXHRcXHQgICAga3N0cnRvdTMyKHFub2RlLVxcdTAwM2VuYW1lICsgc3RybGVuKFxcXCJxdWV1ZVxcXCIpLCAxMCwgXFx1MDAyNnF1ZXVlKSB8fFxcbitcXHRcXHQgICAgcXVldWUgXFx1MDAzZT0gZXAtXFx1MDAzZW51bV90eF9xdWV1ZXMpXFxuK1xcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVxcdTAwM2VkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcInR4LWNvbmZpZzogaW52YWxpZCBxdWV1ZSBub2RlICVwT0ZuIChoYXZlICV1IHF1ZXVlcylcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcW5vZGUsIGVwLVxcdTAwM2VudW1fdHhfcXVldWVzKTtcXG4rXFxuK1xcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KHF1ZXVlLCBxdWV1ZV9zZWVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwidHgtY29uZmlnOiBxdWV1ZSAldSBkZXNjcmliZWQgdHdpY2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcXVldWUpO1xcbitcXG4rXFx0XFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocW5vZGUsIFxcXCJ4bG54LGRtYS1jaGFubmVsLW51bVxcXCIsIFxcdTAwMjZjaGFuKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgcmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ0eC1jb25maWc6IHF1ZXVlICV1IG1pc3NpbmcgeGxueCxkbWEtY2hhbm5lbC1udW1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcXVldWUpO1xcbitcXG4rXFx0XFx0aWYgKGNoYW4gXFx1MDAzZT0gVFNOX01BWF9UWF9RVUVVRSB8fCAhKHR4X3ByZXNlbnQgXFx1MDAyNiBCSVQoY2hhbikpKVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJ0eC1jb25maWc6IHF1ZXVlICV1IG1hcHMgdG8gY2hhbm5lbCAldSBub3QgcHJlc2VudCBpbiBkbWEtbmFtZXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcXVldWUsIGNoYW4pO1xcbitcXG4rXFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbiwgY2hhbl9zZWVuKSlcXG4rXFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXFx1MDAzZWRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwidHgtY29uZmlnOiBjaGFubmVsICV1IGFscmVhZHkgYXNzaWduZWQgdG8gYW5vdGhlciBxdWV1ZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBjaGFuKTtcXG4rXFxuK1xcdFxcdGVwLVxcdTAwM2V0eF9kbWFfY2hhbl9tYXBbcXVldWVdID0gY2hhbjtcXG4rXFx0XFx0Y291bnQrKztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNvdW50ICE9IGVwLVxcdTAwM2VudW1fdHhfcXVldWVzKVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cXHUwMDNlZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcXCJ0eC1jb25maWc6IGRlc2NyaWJlZCAldSBxdWV1ZXMgYnV0IGV4cGVjdGVkICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvdW50LCBlcC1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlcF9jb3VudF9kbWFfcXVldWVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyICpvdXRfdHgsIHUzMiAqb3V0X3J4LFxcbitcXHRcXHRcXHQgICAgICAgdTE2ICp0eF9wcmVzZW50LCB1MzIgKnJ4X2NoYW5fbnVtKVxcbit7XFxuK1xcdHUzMiB0eCA9IDAsIHJ4ID0gMDtcXG4rXFx0dTE2IHJ4X3ByZXNlbnQgPSAwO1xcbitcXHRpbnQgbiwgaSwgcmV0O1xcbitcXG4rXFx0biA9IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3MoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwiZG1hLW5hbWVzXFxcIik7XFxuK1xcdGlmIChuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBuLCBcXFwiZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuOyBpKyspIHtcXG4rXFx0XFx0Y29uc3QgY2hhciAqbmFtZTtcXG4rXFx0XFx0c2l6ZV90IHBsZW47XFxuK1xcdFxcdHUzMiBpZHg7XFxuK1xcbitcXHRcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJkbWEtbmFtZXNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgaSwgXFx1MDAyNm5hbWUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxcXFxuXFxcIiwgaSk7XFxuK1xcbitcXHRcXHRwbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgXFxcInR4X2NoYW5cXFwiKTtcXG4rXFx0XFx0aWYgKHBsZW4pIHtcXG4rXFx0XFx0XFx0aWYgKGtzdHJ0b3UzMihuYW1lICsgcGxlbiwgMTAsIFxcdTAwMjZpZHgpIHx8XFxuK1xcdFxcdFxcdCAgICBpZHggXFx1MDAzZT0gVFNOX01BWF9UWF9RVUVVRSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJpbnZhbGlkIFRYIGNoYW5uZWwgbmFtZSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuYW1lKTtcXG4rXFxuK1xcdFxcdFxcdGlmICgqdHhfcHJlc2VudCBcXHUwMDI2IEJJVChpZHgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFxcImR1cGxpY2F0ZSBUWCBjaGFubmVsICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIG5hbWUpO1xcbitcXG4rXFx0XFx0XFx0KnR4X3ByZXNlbnQgfD0gQklUKGlkeCk7XFxuK1xcdFxcdFxcdHR4Kys7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgXFxcInJ4X2NoYW5cXFwiKTtcXG4rXFx0XFx0aWYgKHBsZW4pIHtcXG4rXFx0XFx0XFx0aWYgKGtzdHJ0b3UzMihuYW1lICsgcGxlbiwgMTAsIFxcdTAwMjZpZHgpIHx8XFxuK1xcdFxcdFxcdCAgICBpZHggXFx1MDAzZT0gVFNOX01BWF9SWF9RVUVVRSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJpbnZhbGlkIFJYIGNoYW5uZWwgbmFtZSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuYW1lKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChyeF9wcmVzZW50IFxcdTAwMjYgQklUKGlkeCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZHVwbGljYXRlIFJYIGNoYW5uZWwgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgbmFtZSk7XFxuK1xcbitcXHRcXHRcXHRyeF9wcmVzZW50IHw9IEJJVChpZHgpO1xcbitcXHRcXHRcXHRyeF9jaGFuX251bVtyeF0gPSBpZHg7XFxuK1xcdFxcdFxcdHJ4Kys7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcInVucmVjb2duaXNlZCBkbWEtbmFtZXMgZW50cnkgJXNcXFxcblxcXCIsIG5hbWUpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXR4KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIm5vIFRYIGNoYW5uZWxzIGluIGRtYS1uYW1lc1xcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAoIXJ4KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcIm5vIFJYIGNoYW5uZWxzIGluIGRtYS1uYW1lc1xcXFxuXFxcIik7XFxuK1xcbitcXHQqb3V0X3R4ID0gdHg7XFxuK1xcdCpvdXRfcnggPSByeDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlcF9mcmVlX3BvcnRfbWQoc3RydWN0IHhsbnhfdHNuX2VwICplcClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTOyBpKyspIHtcXG4rXFx0XFx0aWYgKGVwLVxcdTAwM2Vwb3J0X21kW2ldKSB7XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKFxcdTAwMjZlcC1cXHUwMDNlcG9ydF9tZFtpXS1cXHUwMDNlZHN0KTtcXG4rXFx0XFx0XFx0ZXAtXFx1MDAzZXBvcnRfbWRbaV0gPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBlcF9hbGxvY19wb3J0X21kKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSBUU05fVFVTRVJfUE9SVF9NQUMxOyBpIFxcdTAwM2M9IFRTTl9UVVNFUl9QT1JUX01BQzI7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZDtcXG4rXFxuK1xcdFxcdG1kID0gbWV0YWRhdGFfZHN0X2FsbG9jKDAsIE1FVEFEQVRBX0hXX1BPUlRfTVVYLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFtZCkge1xcbitcXHRcXHRcXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0XFx0fVxcbitcXHRcXHRtZC1cXHUwMDNldS5wb3J0X2luZm8ucG9ydF9pZCA9IGk7XFxuK1xcdFxcdGVwLVxcdTAwM2Vwb3J0X21kW2ldID0gbWQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHhsbnhfdHNuX2VwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKnR4Y2ZnX25wO1xcbitcXHR1MzIgbnVtX3R4LCBudW1fcngsIG51bV9wcmlvO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmlwX25wO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcDtcXG4rXFx0dTggbWFjX2FkZHJbRVRIX0FMRU5dO1xcbitcXHR1MTYgdHhfcHJlc2VudCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0cmV0ID0gZXBfY291bnRfZG1hX3F1ZXVlcyhkZXYsIFxcdTAwMjZudW1fdHgsIFxcdTAwMjZudW1fcngsIFxcdTAwMjZ0eF9wcmVzZW50LCByeF9jaGFuX251bSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpcF9ucCA9IG9mX2dldF9wYXJlbnQoZGV2LVxcdTAwM2VvZl9ub2RlKTtcXG4rXFx0aWYgKCFpcF9ucClcXG4rXFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLCBcXFwibWlzc2luZyBwYXJlbnQgSVAgbm9kZVxcXFxuXFxcIik7XFxuK1xcbitcXHRyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihpcF9ucCwgXFxcInhsbngsbnVtLXByaW9yaXRpZXNcXFwiLCBcXHUwMDI2bnVtX3ByaW8pO1xcbitcXHRvZl9ub2RlX3B1dChpcF9ucCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwibWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChudW1fdHggIT0gbnVtX3ByaW8pXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiVFggY2hhbm5lbCBjb3VudCAldSBtdXN0IGVxdWFsIG51bS1wcmlvcml0aWVzICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIG51bV90eCwgbnVtX3ByaW8pO1xcbitcXG4rXFx0bmRldiA9IGFsbG9jX25ldGRldl9tcXMoc2l6ZW9mKCplcCksIFxcXCJlcCVkXFxcIiwgTkVUX05BTUVfRU5VTSxcXG4rXFx0XFx0XFx0XFx0ZXRoZXJfc2V0dXAsIG51bV90eCwgbnVtX3J4KTtcXG4rXFx0aWYgKCFuZGV2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldik7XFxuK1xcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2ZXBfbmV0ZGV2X29wcztcXG4rXFx0bmRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2ZXBfZXRodG9vbF9vcHM7XFxuK1xcdG5kZXYtXFx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRztcXG4rXFxuK1xcdGVwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcdGVwLVxcdTAwM2VuZGV2ID0gbmRldjtcXG4rXFx0ZXAtXFx1MDAzZWRldiA9IGRldjtcXG4rXFx0ZXAtXFx1MDAzZW51bV90eF9xdWV1ZXMgPSBudW1fdHg7XFxuK1xcdGVwLVxcdTAwM2VudW1fcnhfcXVldWVzID0gbnVtX3J4O1xcbitcXHRlcC1cXHUwMDNlbWF4X2ZybV9zaXplID0gVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkU7XFxuK1xcdG1lbWNweShlcC1cXHUwMDNlcnhfY2hhbl9udW0sIHJ4X2NoYW5fbnVtLCBudW1fcnggKiBzaXplb2YoKnJ4X2NoYW5fbnVtKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVFNOX01BWF9UWF9RVUVVRTsgaSsrKVxcbitcXHRcXHRlcC1cXHUwMDNldHhfZG1hX2NoYW5fbWFwW2ldID0gVFNOX0RNQV9DSF9JTlZBTElEO1xcbitcXG4rXFx0dHhjZmdfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJ0eC1xdWV1ZXMtY29uZmlnXFxcIik7XFxuK1xcdGlmICghdHhjZmdfbnApIHtcXG4rXFx0XFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwibWlzc2luZyB0eC1xdWV1ZXMtY29uZmlnIG5vZGVcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25kZXY7XFxuK1xcdH1cXG4rXFx0cmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7XFxuK1xcdG9mX25vZGVfcHV0KHR4Y2ZnX25wKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9uZGV2O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG9cXG4rXFx0ICogZ2F0ZSBvbiB0aGUgTUNETUEgcHJvdmlkZXIgYmVpbmcgYm91bmQuIFRoaXMga2VlcHMgLUVQUk9CRV9ERUZFUiBpblxcbitcXHQgKiB0aGUgcHJvYmUgcGF0aCwgc28gdGhlIG5ldGRldiBpcyBvbmx5IHJlZ2lzdGVyZWQgb25jZSB0aGUgcHJvdmlkZXIgaXNcXG4rXFx0ICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuXFxuK1xcdCAqL1xcbitcXHRyZXQgPSBlcF9yZXNldF9kbWFfY29udHJvbGxlcihlcCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbmRldjtcXG4rXFxuK1xcdHJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtXFx1MDAzZW9mX25vZGUsIG1hY19hZGRyKTtcXG4rXFx0aWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfbmRldjtcXG4rXFx0fSBlbHNlIGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IGlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjX2FkZHIpKSB7XFxuK1xcdFxcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcXG4rXFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwibm8gdmFsaWQgTUFDIGluIERULCB1c2luZyByYW5kb20gYWRkcmVzcyAlcE1cXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBuZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGVwX2FsbG9jX3BvcnRfbWQoZXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgcGVyLXBvcnQgbWV0YWRhdGFcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25kZXY7XFxuK1xcdH1cXG4rXFxuK1xcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVwKTtcXG4rXFxuK1xcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldCBkZXZpY2VcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX21kO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX21kOlxcbitcXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xcbitlcnJfZnJlZV9uZGV2OlxcbitcXHRmcmVlX25ldGRldihuZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeGxueF90c25fZXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbitcXG4rXFx0aWYgKCFlcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXYoZXAtXFx1MDAzZW5kZXYpO1xcbitcXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xcbitcXHRmcmVlX25ldGRldihlcC1cXHUwMDNlbmRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhsbnhfdHNuX2VwX29mX21hdGNoW10gPSB7XFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwieGxueCx0c24tZXAtbWFjXFxcIiB9LFxcbitcXHR7IH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGxueF90c25fZXBfb2ZfbWF0Y2gpO1xcbitcXG4rc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXIgPSB7XFxuK1xcdC5wcm9iZVxcdD0geGxueF90c25fZXBfcHJvYmUsXFxuK1xcdC5yZW1vdmVcXHQ9IHhsbnhfdHNuX2VwX3JlbW92ZSxcXG4rXFx0LmRyaXZlclxcdD0ge1xcbitcXHRcXHQubmFtZVxcdFxcdD0gRFJJVkVSX05BTUUsXFxuK1xcdFxcdC5vZl9tYXRjaF90YWJsZVxcdD0geGxueF90c25fZXBfb2ZfbWF0Y2gsXFxuK1xcdH0sXFxuK307XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kMzNhMDBkZDZkMTVlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmNcXG5AQCAtMCwwICsxLDEwNyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbitcXG4rLypcXG4rICogVGltZSBTZW5zaXRpdmUgTmV0d29ya2luZyAoVFNOKSBFdGhlcm5ldCBNQUMgd3JhcHBlciBkcml2ZXIuXFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nsay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9wbGF0Zm9ybS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInhpbGlueF90c24uaFxcXCJcXG4rXFxuKyNkZWZpbmUgVFNOX05VTV9DTE9DS1NcXHRcXHQ2XFxuK1xcbisvKipcXG4rICogc3RydWN0IHhsbnhfdHNuX2lwIC0gd3JhcHBlci1wcml2YXRlIElQIHN0YXRlXFxuKyAqIEBjbGtzOiBidWxrLW1hbmFnZWQgSVAgY2xvY2tzXFxuKyAqL1xcbitzdHJ1Y3QgeGxueF90c25faXAge1xcbitcXHRzdHJ1Y3QgY2xrX2J1bGtfZGF0YSBjbGtzW1RTTl9OVU1fQ0xPQ0tTXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHNuX2Nsa19uYW1lc1tUU05fTlVNX0NMT0NLU10gPSB7XFxuK1xcdFxcXCJndHhcXFwiLFxcbitcXHRcXFwiZ3R4OTBcXFwiLFxcbitcXHRcXFwiaG9zdF9yeGZpZm9cXFwiLFxcbitcXHRcXFwiaG9zdF90eGZpZm9cXFwiLFxcbitcXHRcXFwicmVmXFxcIixcXG4rXFx0XFxcInNfYXhpXFxcIixcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHRzbl9jbGtfYnVsa19kaXNhYmxlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHhsbnhfdHNuX2lwICp3ID0gZGF0YTtcXG4rXFxuK1xcdGNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKFRTTl9OVU1fQ0xPQ0tTLCB3LVxcdTAwM2VjbGtzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB0c25faXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgeGxueF90c25faXAgKnc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR3ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp3KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghdylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFRTTl9OVU1fQ0xPQ0tTOyBpKyspXFxuK1xcdFxcdHctXFx1MDAzZWNsa3NbaV0uaWQgPSB0c25fY2xrX25hbWVzW2ldO1xcbitcXG4rXFx0cmV0ID0gZGV2bV9jbGtfYnVsa19nZXQoZGV2LCBUU05fTlVNX0NMT0NLUywgdy1cXHUwMDNlY2xrcyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcXFwiZmFpbGVkIHRvIGdldCBjbG9ja3NcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0ID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUoVFNOX05VTV9DTE9DS1MsIHctXFx1MDAzZWNsa3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgXFxcImZhaWxlZCB0byBlbmFibGUgY2xvY2tzXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHRzbl9jbGtfYnVsa19kaXNhYmxlLCB3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRzbl9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcInhsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjBcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0c25fb2ZfbWF0Y2gpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHNuX2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0gdHNuX2lwX3Byb2JlLFxcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IFxcXCJ4aWxpbngtdHNuXFxcIixcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gdHNuX29mX21hdGNoLFxcbitcXHR9LFxcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCB0c25fZHJpdmVyc1tdID0ge1xcbitcXHRcXHUwMDI2dHNuX2RyaXZlcixcXG4rXFx0XFx1MDAyNnhsbnhfdHNuX2VwX2RyaXZlcixcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHhsbnhfdHNuX2luaXQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gcGxhdGZvcm1fcmVnaXN0ZXJfZHJpdmVycyh0c25fZHJpdmVycywgQVJSQVlfU0laRSh0c25fZHJpdmVycykpO1xcbit9XFxuK21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpO1xcbitcXG4rc3RhdGljIHZvaWQgX19leGl0IHhsbnhfdHNuX2V4aXQodm9pZClcXG4re1xcbitcXHRwbGF0Zm9ybV91bnJlZ2lzdGVyX2RyaXZlcnModHNuX2RyaXZlcnMsIEFSUkFZX1NJWkUodHNuX2RyaXZlcnMpKTtcXG4rfVxcbittb2R1bGVfZXhpdCh4bG54X3Rzbl9leGl0KTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIlNyaW5pdmFzIE5lZWxpIFxcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjM2LjA0MDk2NzExOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjE3MTIxNTk4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuLykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiN2RhZGVlMGI2M2VkY2RjOTM1M2U0YjYxZjg0ZmVhNGQ0M2NiMzI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMjoxNzozNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQveGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGU2NWQxNzEwZGE3OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbFxuQEAgLTAsMCArMSwzNjQgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC94bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogWGlsaW54IFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUNcbitcbitkZXNjcmlwdGlvbjpcbisgIFRTTiBFbmRwb2ludCBFdGhlcm5ldCBNQUMgSVAgaW1wbGVtZW50cyBJRUVFIDgwMi4xIFRpbWUtU2Vuc2l0aXZlXG4rICBOZXR3b3JraW5nIChUU04pIHN0YW5kYXJkcyBhbmQgcHJvdmlkZXMgbG93LWxhdGVuY3kgbmV0d29yayBjb25uZWN0aXZpdHlcbisgIGluIHRoZSBCcmlkZ2VkIEVuZHBvaW50IGNvbmZpZ3VyYXRpb24uIFRoZSBJUCBpbnRlZ3JhdGVzIGEgdGhyZWUtcG9ydFxuKyAgc3dpdGNoLCB3aXRoIHR3byBwb3J0cyBjb25uZWN0ZWQgdG8gdGhlIGV4dGVybmFsIG5ldHdvcmsgYW5kIG9uZSBwb3J0XG4rICBjb25uZWN0ZWQgdG8gYW4gaW50ZXJuYWwgZW5kcG9pbnQuIEl0IGFsc28gc3VwcG9ydHMgR01JSS9SR01JSSBpbnRlcmZhY2VzXG4rICBmb3IgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBQSFksIGVuYWJsaW5nIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiBhdFxuKyAgMTAwIE1iL3MgYW5kIDEgR2IvcyBzcGVlZHMuXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIFNyaW5pdmFzIE5lZWxpIFx1MDAzY3NyaW5pdmFzLm5lZWxpQGFtZC5jb21cdTAwM2VcbisgIC0gTmFnYWRoZWVyYWogUm90dGVsYSBcdTAwM2NuYWdhZGhlZXJhai5yb3R0ZWxhQGFtZC5jb21cdTAwM2Vcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IHhsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy0zLjBcbitcbisgIGNsb2NrczpcbisgICAgaXRlbXM6XG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1RYIGNsb2NrIGZvciB0cmFuc21pdHRlciBsb2dpYyBhbmQgUlRDXG4rICAgICAgLSBkZXNjcmlwdGlvbjogR1RYIDkwLWRlZ3JlZSBwaGFzZSBzaGlmdGVkIGNsb2NrIGZvciBSR01JSVxuKyAgICAgIC0gZGVzY3JpcHRpb246IEhvc3QgUlggRklGTyBjbG9ja1xuKyAgICAgIC0gZGVzY3JpcHRpb246IEhvc3QgVFggRklGTyBjbG9ja1xuKyAgICAgIC0gZGVzY3JpcHRpb246IFJlZmVyZW5jZSBjbG9jayBmb3IgSURFTEFZIGNvbnRyb2xcbisgICAgICAtIGRlc2NyaXB0aW9uOiBBWEktTGl0ZSByZWdpc3RlciBpbnRlcmZhY2UgY2xvY2tcbitcbisgIGNsb2NrLW5hbWVzOlxuKyAgICBpdGVtczpcbisgICAgICAtIGNvbnN0OiBndHhcbisgICAgICAtIGNvbnN0OiBndHg5MFxuKyAgICAgIC0gY29uc3Q6IGhvc3RfcnhmaWZvXG4rICAgICAgLSBjb25zdDogaG9zdF90eGZpZm9cbisgICAgICAtIGNvbnN0OiByZWZcbisgICAgICAtIGNvbnN0OiBzX2F4aVxuK1xuKyAgcmFuZ2VzOiB0cnVlXG4rXG4rICAnI2FkZHJlc3MtY2VsbHMnOlxuKyAgICBjb25zdDogMVxuK1xuKyAgJyNzaXplLWNlbGxzJzpcbisgICAgY29uc3Q6IDFcbitcbisgIHhsbngsbnVtLXByaW9yaXRpZXM6XG4rICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMlxuKyAgICBtaW5pbXVtOiAyXG4rICAgIG1heGltdW06IDhcbisgICAgZGVzY3JpcHRpb246XG4rICAgICAgTnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyAocHJpb3JpdGllcykgY29uZmlndXJlZCBpbiB0aGUgSVAuXG4rICAgICAgVGhpcyBpcyBhbiBJUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0aGF0IGRldGVybWluZXMgdGhlIG51bWJlciBvZlxuKyAgICAgIHByaW9yaXR5IHF1ZXVlcyBhdmFpbGFibGUgZm9yIFFvUyBzY2hlZHVsaW5nLiBUcmFmZmljIGNsYXNzZXMgbWFwIHRvXG4rICAgICAgSUVFRSA4MDIuMVEgcHJpb3JpdHkgbGV2ZWxzICgwLTcpLlxuK1xuK3BhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgXCJeZXRoZXJuZXRAWzAtOWEtZl0rJFwiOlxuKyAgICB0eXBlOiBvYmplY3RcbisgICAgJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbisgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBFbmRwb2ludCBNQUMgc3ViLW5vZGUuIFByb3ZpZGVzIHRoZSBob3N0LXNpZGUgZGF0YSBwYXRoIHRocm91Z2ggdGhlXG4rICAgICAgRE1BIGNoYW5uZWxzIGRlc2NyaWJlZCBieSBpdHMgZG1hcyAvIGRtYS1uYW1lcy5cbisgICAgcHJvcGVydGllczpcbisgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgY29uc3Q6IHhsbngsdHNuLWVwLW1hY1xuK1xuKyAgICAgIHJlZzpcbisgICAgICAgIG1heEl0ZW1zOiAxXG4rXG4rICAgICAgZG1hczpcbisgICAgICAgIG1pbkl0ZW1zOiAyXG4rICAgICAgICBtYXhJdGVtczogMTZcbitcbisgICAgICBkbWEtbmFtZXM6XG4rICAgICAgICBtaW5JdGVtczogMlxuKyAgICAgICAgbWF4SXRlbXM6IDE2XG4rICAgICAgICBpdGVtczpcbisgICAgICAgICAgcGF0dGVybjogXCJeKHR4fHJ4KV9jaGFuWzAtN10kXCJcbisgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4rICAgICAgICAgIE5hbWVzIG1hdGNoaW5nIHRoZSBlbnRyaWVzIGluICdkbWFzJywgb25lIHBlciBETUEgY2hhbm5lbCBhbmQgaW5cbisgICAgICAgICAgdGhlIHNhbWUgb3JkZXIuIFRYIGNoYW5uZWwgbmFtZXMgdXNlIFwidHhfY2hhblx1MDAzY05cdTAwM2VcIiBhbmQgUlggY2hhbm5lbFxuKyAgICAgICAgICBuYW1lcyB1c2UgXCJyeF9jaGFuXHUwMDNjTlx1MDAzZVwiLCB3aGVyZSBOIGlzIDAuLjcuIEV4YW1wbGU6IFwidHhfY2hhbjBcIixcbisgICAgICAgICAgXCJ0eF9jaGFuMVwiLCAuLi4sIFwicnhfY2hhbjBcIiwgXCJyeF9jaGFuMVwiLCAuLi4uXG4rXG4rICAgICAgdHgtcXVldWVzLWNvbmZpZzpcbisgICAgICAgIHR5cGU6IG9iamVjdFxuKyAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rICAgICAgICBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgVFggcXVldWUgY29uZmlndXJhdGlvbiBub2RlIHRoYXQgbWFwcyBJUCBwcmlvcml0eSBxdWV1ZXMgdG9cbisgICAgICAgICAgRE1BIFRYIGNoYW5uZWxzLiBUaGUgVFNOIElQIHN1cHBvcnRzIG11bHRpcGxlIHByaW9yaXR5IHF1ZXVlcyBmb3JcbisgICAgICAgICAgUW9TIHNjaGVkdWxpbmcsIGFuZCBlYWNoIHF1ZXVlIGNhbiBiZSBjb25uZWN0ZWQgdG8gYSBzcGVjaWZpYyBETUFcbisgICAgICAgICAgY2hhbm5lbC4gVGhpcyBtYXBwaW5nIGRlZmluZXMgd2hpY2ggRE1BIFRYIGNoYW5uZWwgaXMgdXNlZCB0b1xuKyAgICAgICAgICB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIHByaW9yaXR5IHF1ZXVlLiBGb3IgZXhhbXBsZSwgcXVldWUwXG4rICAgICAgICAgIHdpdGggeGxueCxkbWEtY2hhbm5lbC1udW0gc2V0IHRvIDUgbWVhbnMgcHJpb3JpdHkgcXVldWUgMCB1c2VzXG4rICAgICAgICAgIHR4X2NoYW41IGZvciBkYXRhIHRyYW5zZmVyLlxuK1xuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAgIFwiXnF1ZXVlWzAtN10kXCI6XG4rICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4rICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XG4rICAgICAgICAgICAgICBFYWNoIHN1Ym5vZGUgcmVwcmVzZW50cyBhIHByaW9yaXR5IHF1ZXVlLiBUaGVcbisgICAgICAgICAgICAgIHhsbngsZG1hLWNoYW5uZWwtbnVtIHByb3BlcnR5IHNwZWNpZmllcyB3aGljaCBETUEgVFggY2hhbm5lbFxuKyAgICAgICAgICAgICAgKHR4X2NoYW4wIHRvIHR4X2NoYW43KSBpcyBjb25uZWN0ZWQgdG8gdGhpcyBxdWV1ZSBmb3JcbisgICAgICAgICAgICAgIHRyYW5zbWl0dGluZyBwYWNrZXRzLlxuKyAgICAgICAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICAgICAgICB4bG54LGRtYS1jaGFubmVsLW51bTpcbisgICAgICAgICAgICAgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyXG4rICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICAgICAgICAgIERNQSBjaGFubmVsIHRoYXQgdHJhbnNtaXRzIHRoaXMgcHJpb3JpdHkgcXVldWUsIGdpdmVuIGFzXG4rICAgICAgICAgICAgICAgICAgdGhlIE4gb2YgdGhlIHR4X2NoYW5OIGVudHJ5IGluIGRtYS1uYW1lcy5cbisgICAgICAgICAgICAgICAgbWluaW11bTogMFxuKyAgICAgICAgICAgICAgICBtYXhpbXVtOiA3XG4rXG4rICAgICAgICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAgICAgICAtIHhsbngsZG1hLWNoYW5uZWwtbnVtXG4rXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICAgIC0gcmVnXG4rICAgICAgLSBkbWFzXG4rICAgICAgLSBkbWEtbmFtZXNcbisgICAgICAtIHR4LXF1ZXVlcy1jb25maWdcbitcbisgIFwiXnN3aXRjaEBbMC05YS1mXSskXCI6XG4rICAgIHR5cGU6IG9iamVjdFxuKyAgICAkcmVmOiAvc2NoZW1hcy9uZXQvZHNhL2RzYS55YW1sIy8kZGVmcy9ldGhlcm5ldC1wb3J0c1xuKyAgICBkZXNjcmlwdGlvbjpcbisgICAgICBUaHJlZS1wb3J0IEV0aGVybmV0IHN3aXRjaCBzdWItbm9kZS4gQ29udGFpbnMgdGhlIHN3aXRjaCBmYWJyaWNcbisgICAgICByZWdpc3RlciB3aW5kb3cgYW5kIHRoZSB0d28gcGVyLU1BQyByZWdpc3RlciB3aW5kb3dzLiBFYWNoIHBlci1NQUNcbisgICAgICB3aW5kb3cgaG91c2VzIGFuIE1ESU8gY29udHJvbGxlciBhbmQgYSBQVFAgcmVnaXN0ZXIgYmxvY2sgYXQgZml4ZWRcbisgICAgICBvZmZzZXRzLiBUaGUgSVAncyBwZXItTUFDIGFuZCBQVFAtdGltZXIgaW50ZXJydXB0cyBhcmUgZXhwb3NlZCBoZXJlLlxuK1xuKyAgICBwcm9wZXJ0aWVzOlxuKyAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICBjb25zdDogeGxueCx0c24tc3dpdGNoXG4rXG4rICAgICAgcmVnOlxuKyAgICAgICAgaXRlbXM6XG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IFN3aXRjaCBmYWJyaWMgcmVnaXN0ZXIgd2luZG93XG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1BQzEgcmVnaXN0ZXIgd2luZG93IChpbmNsdWRlcyBNRElPIGFuZCBQVFApXG4rICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1BQzIgcmVnaXN0ZXIgd2luZG93IChpbmNsdWRlcyBNRElPIGFuZCBQVFApXG4rXG4rICAgICAgcmVnLW5hbWVzOlxuKyAgICAgICAgaXRlbXM6XG4rICAgICAgICAgIC0gY29uc3Q6IHN3aXRjaFxuKyAgICAgICAgICAtIGNvbnN0OiBtYWMxXG4rICAgICAgICAgIC0gY29uc3Q6IG1hYzJcbitcbisgICAgICBpbnRlcnJ1cHRzOlxuKyAgICAgICAgbWluSXRlbXM6IDdcbisgICAgICAgIG1heEl0ZW1zOiA3XG4rXG4rICAgICAgaW50ZXJydXB0LW5hbWVzOlxuKyAgICAgICAgaXRlbXM6XG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF9yeF9tYWMxXG4rICAgICAgICAgIC0gY29uc3Q6IHB0cF90eF9tYWMxXG4rICAgICAgICAgIC0gY29uc3Q6IG1hY19pcnFfbWFjMVxuKyAgICAgICAgICAtIGNvbnN0OiBwdHBfdGltZXJcbisgICAgICAgICAgLSBjb25zdDogcHRwX3J4X21hYzJcbisgICAgICAgICAgLSBjb25zdDogcHRwX3R4X21hYzJcbisgICAgICAgICAgLSBjb25zdDogbWFjX2lycV9tYWMyXG4rXG4rICAgICAgbWRpby0xOlxuKyAgICAgICAgJHJlZjogL3NjaGVtYXMvbmV0L21kaW8ueWFtbCNcbisgICAgICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgICAgICBNRElPIGJ1cyBjb250cm9sbGVyIGZvciBNQUMxLiBSZWdpc3RlcnMgcmVzaWRlIGluc2lkZSB0aGUgbWFjMVxuKyAgICAgICAgICByZWctbmFtZXMgd2luZG93LlxuKyAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuKyAgICAgIG1kaW8tMjpcbisgICAgICAgICRyZWY6IC9zY2hlbWFzL25ldC9tZGlvLnlhbWwjXG4rICAgICAgICBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgTURJTyBidXMgY29udHJvbGxlciBmb3IgTUFDMi4gUmVnaXN0ZXJzIHJlc2lkZSBpbnNpZGUgdGhlIG1hYzJcbisgICAgICAgICAgcmVnLW5hbWVzIHdpbmRvdy5cbisgICAgICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgXCJeKGV0aGVybmV0LSk/cG9ydHMkXCI6XG4rICAgICAgICB0eXBlOiBvYmplY3RcbisgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuKyAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgJyNhZGRyZXNzLWNlbGxzJzpcbisgICAgICAgICAgICBjb25zdDogMVxuK1xuKyAgICAgICAgICAnI3NpemUtY2VsbHMnOlxuKyAgICAgICAgICAgIGNvbnN0OiAwXG4rXG4rICAgICAgICAgIHBvcnRAMDpcbisgICAgICAgICAgICB0eXBlOiBvYmplY3RcbisgICAgICAgICAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IHRydWVcbisgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgICAgIENQVSBwb3J0LiBXaXJlZCBpbnRlcm5hbGx5IHRvIHRoZSBlbmRwb2ludCBNQUMgc2libGluZy5cbitcbisgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgICAgICAgcmVnOlxuKyAgICAgICAgICAgICAgICBjb25zdDogMFxuK1xuKyAgICAgICAgICAgICAgcGh5LW1vZGU6XG4rICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbFxuK1xuKyAgICAgICAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgICAgICAgLSBldGhlcm5ldFxuK1xuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAgIFwiXnBvcnRAWzEtMl0kXCI6XG4rICAgICAgICAgICAgdHlwZTogb2JqZWN0XG4rICAgICAgICAgICAgdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiB0cnVlXG4rICAgICAgICAgICAgZGVzY3JpcHRpb246XG4rICAgICAgICAgICAgICBFeHRlcm5hbCBFdGhlcm5ldCBwb3J0LiBwb3J0QDEgaXMgd2lyZWQgdG8gTUFDMSBhbmQgcmVhY2hlZFxuKyAgICAgICAgICAgICAgdGhyb3VnaCB0aGUgbWRpby0xIGJ1cywgcG9ydEAyIGlzIHdpcmVkIHRvIE1BQzIgYW5kIHJlYWNoZWRcbisgICAgICAgICAgICAgIHRocm91Z2ggdGhlIG1kaW8tMiBidXMuXG4rXG4rICAgICAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgICAgIHJlZzpcbisgICAgICAgICAgICAgICAgZW51bTogWzEsIDJdXG4rXG4rICAgICAgICAgICAgICBwaHktbW9kZTpcbisgICAgICAgICAgICAgICAgZW51bTpcbisgICAgICAgICAgICAgICAgICAtIGdtaWlcbisgICAgICAgICAgICAgICAgICAtIHJnbWlpXG4rICAgICAgICAgICAgICAgICAgLSByZ21paS1pZFxuK1xuKyAgICAgICAgICAgIHJlcXVpcmVkOlxuKyAgICAgICAgICAgICAgLSByZWdcbisgICAgICAgICAgICAgIC0gcGh5LW1vZGVcbisgICAgICAgICAgICAgIC0gcGh5LWhhbmRsZVxuK1xuKyAgICAgICAgcmVxdWlyZWQ6XG4rICAgICAgICAgIC0gcG9ydEAwXG4rICAgICAgICAgIC0gcG9ydEAxXG4rICAgICAgICAgIC0gcG9ydEAyXG4rXG4rICAgIHJlcXVpcmVkOlxuKyAgICAgIC0gY29tcGF0aWJsZVxuKyAgICAgIC0gcmVnXG4rICAgICAgLSByZWctbmFtZXNcbisgICAgICAtIGludGVycnVwdHNcbisgICAgICAtIGludGVycnVwdC1uYW1lc1xuK1xuKyAgICBvbmVPZjpcbisgICAgICAtIHJlcXVpcmVkOiBbcG9ydHNdXG4rICAgICAgLSByZXF1aXJlZDogW2V0aGVybmV0LXBvcnRzXVxuK1xuKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gY2xvY2tzXG4rICAtIGNsb2NrLW5hbWVzXG4rICAtIHhsbngsbnVtLXByaW9yaXRpZXNcbisgIC0gcmFuZ2VzXG4rICAtICcjYWRkcmVzcy1jZWxscydcbisgIC0gJyNzaXplLWNlbGxzJ1xuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIHRzbkA4MDA0MDAwMCB7XG4rICAgICAgICBjb21wYXRpYmxlID0gXCJ4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCI7XG4rICAgICAgICBjbG9ja3MgPSBcdTAwM2NcdTAwMjZtaXNjX2Nsa18yXHUwMDNlLCBcdTAwM2NcdTAwMjZtaXNjX2Nsa18yXHUwMDNlLCBcdTAwM2NcdTAwMjZtaXNjX2Nsa18xXHUwMDNlLCBcdTAwM2NcdTAwMjZtaXNjX2Nsa18xXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgXHUwMDNjXHUwMDI2bWlzY19jbGtfM1x1MDAzZSwgXHUwMDNjXHUwMDI2bWlzY19jbGtfMFx1MDAzZTtcbisgICAgICAgIGNsb2NrLW5hbWVzID0gXCJndHhcIiwgXCJndHg5MFwiLCBcImhvc3RfcnhmaWZvXCIsIFwiaG9zdF90eGZpZm9cIixcbisgICAgICAgICAgICAgICAgICAgICAgXCJyZWZcIiwgXCJzX2F4aVwiO1xuKyAgICAgICAgeGxueCxudW0tcHJpb3JpdGllcyA9IFx1MDAzYzhcdTAwM2U7XG4rICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICByYW5nZXMgPSBcdTAwM2MweDAgMHg4MDA0MDAwMCAweDQwMDAwXHUwMDNlO1xuK1xuKyAgICAgICAgZXBfbWFjOiBldGhlcm5ldEAxNjAwMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieGxueCx0c24tZXAtbWFjXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgxNjAwMCAweGEwMDBcdTAwM2U7XG4rICAgICAgICAgICAgZG1hcyA9IFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDBcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDFcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDJcdTAwM2UsXG4rICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDNcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDRcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDVcdTAwM2UsXG4rICAgICAgICAgICAgICAgICAgIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDZcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDdcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE2XHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAxN1x1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMThcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDE5XHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyMFx1MDAzZSwgXHUwMDNjXHUwMDI2YXhpX21jZG1hXzAgMjFcdTAwM2UsIFx1MDAzY1x1MDAyNmF4aV9tY2RtYV8wIDIyXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICBcdTAwM2NcdTAwMjZheGlfbWNkbWFfMCAyM1x1MDAzZTtcbisgICAgICAgICAgICBkbWEtbmFtZXMgPSBcInR4X2NoYW4wXCIsIFwidHhfY2hhbjFcIiwgXCJ0eF9jaGFuMlwiLCBcInR4X2NoYW4zXCIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eF9jaGFuNFwiLCBcInR4X2NoYW41XCIsIFwidHhfY2hhbjZcIiwgXCJ0eF9jaGFuN1wiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwicnhfY2hhbjBcIiwgXCJyeF9jaGFuMVwiLCBcInJ4X2NoYW4yXCIsIFwicnhfY2hhbjNcIixcbisgICAgICAgICAgICAgICAgICAgICAgICBcInJ4X2NoYW40XCIsIFwicnhfY2hhbjVcIiwgXCJyeF9jaGFuNlwiLCBcInJ4X2NoYW43XCI7XG4rICAgICAgICAgICAgdHgtcXVldWVzLWNvbmZpZyB7XG4rICAgICAgICAgICAgICAgIHF1ZXVlMCB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHg3XHUwMDNlOyB9O1xuKyAgICAgICAgICAgICAgICBxdWV1ZTEgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4Nlx1MDAzZTsgfTtcbisgICAgICAgICAgICAgICAgcXVldWUyIHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDVcdTAwM2U7IH07XG4rICAgICAgICAgICAgICAgIHF1ZXVlMyB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHg0XHUwMDNlOyB9O1xuKyAgICAgICAgICAgICAgICBxdWV1ZTQgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4M1x1MDAzZTsgfTtcbisgICAgICAgICAgICAgICAgcXVldWU1IHsgeGxueCxkbWEtY2hhbm5lbC1udW0gPSBcdTAwM2MweDJcdTAwM2U7IH07XG4rICAgICAgICAgICAgICAgIHF1ZXVlNiB7IHhsbngsZG1hLWNoYW5uZWwtbnVtID0gXHUwMDNjMHgxXHUwMDNlOyB9O1xuKyAgICAgICAgICAgICAgICBxdWV1ZTcgeyB4bG54LGRtYS1jaGFubmVsLW51bSA9IFx1MDAzYzB4MFx1MDAzZTsgfTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbitcbisgICAgICAgIHN3aXRjaEAzODAwMCB7XG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwieGxueCx0c24tc3dpdGNoXCI7XG4rICAgICAgICAgICAgcmVnID0gXHUwMDNjMHgzODAwMCAweDgwMDBcdTAwM2UsXG4rICAgICAgICAgICAgICAgICAgXHUwMDNjMHgwMDAwMCAweDE0MDAwXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgIFx1MDAzYzB4MjAwMDAgMHgxNDAwMFx1MDAzZTtcbisgICAgICAgICAgICByZWctbmFtZXMgPSBcInN3aXRjaFwiLCBcIm1hYzFcIiwgXCJtYWMyXCI7XG4rXG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmludGNcdTAwM2U7XG4rICAgICAgICAgICAgaW50ZXJydXB0cyA9IFx1MDAzYzAgMlx1MDAzZSwgXHUwMDNjMiAyXHUwMDNlLCBcdTAwM2M0IDJcdTAwM2UsIFx1MDAzYzYgMlx1MDAzZSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjMSAyXHUwMDNlLCBcdTAwM2MzIDJcdTAwM2UsIFx1MDAzYzUgMlx1MDAzZTtcbisgICAgICAgICAgICBpbnRlcnJ1cHQtbmFtZXMgPSBcInB0cF9yeF9tYWMxXCIsIFwicHRwX3R4X21hYzFcIixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hY19pcnFfbWFjMVwiLCBcInB0cF90aW1lclwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHRwX3J4X21hYzJcIiwgXCJwdHBfdHhfbWFjMlwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFjX2lycV9tYWMyXCI7XG4rXG4rICAgICAgICAgICAgbWRpby0xIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIHBoeTA6IGV0aGVybmV0LXBoeUAwIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICBtZGlvLTIge1xuKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4rICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgcGh5MTogZXRoZXJuZXQtcGh5QDEge1xuKyAgICAgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICAgICAgICAgfTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBvcnRzIHtcbisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgICAgICAgICAgIHBvcnRAMCB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSBcdTAwM2NcdTAwMjZlcF9tYWNcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwiaW50ZXJuYWxcIjtcbitcbisgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsge1xuKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gXHUwMDNjMTAwMFx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDtcbisgICAgICAgICAgICAgICAgICAgIH07XG4rICAgICAgICAgICAgICAgIH07XG4rXG4rICAgICAgICAgICAgICAgIHBvcnRAMSB7XG4rICAgICAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9IFx1MDAzY1x1MDAyNnBoeTBcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9IFwicmdtaWktaWRcIjtcbisgICAgICAgICAgICAgICAgfTtcbitcbisgICAgICAgICAgICAgICAgcG9ydEAyIHtcbisgICAgICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzJcdTAwM2U7XG4rICAgICAgICAgICAgICAgICAgICBwaHktaGFuZGxlID0gXHUwMDNjXHUwMDI2cGh5MVx1MDAzZTtcbisgICAgICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gXCJyZ21paS1pZFwiO1xuKyAgICAgICAgICAgICAgICB9O1xuKyAgICAgICAgICAgIH07XG4rICAgICAgICB9O1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGIyM2ZiNmYyZjRlZjQuLmZmOTRlMzE0ZWViMWYgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yOTkxMSw2ICsyOTkxMSwxNCBAQCBNOlx0SGFyc2ggSmFpbiBcdTAwM2NoLmphaW5AYW1kLmNvbVx1MDAzZVxuIFM6XHRNYWludGFpbmVkXG4gRjpcdGRyaXZlcnMvY2hhci9od19yYW5kb20veGlsaW54LXRybmcuY1xuIFxuK1hJTElOWCBUU04gRU5EUE9JTlQgRVRIRVJORVQgTUFDIERSSVZFUlxuK006XHROYWdhZGhlZXJhaiBSb3R0ZWxhIFx1MDAzY25hZ2FkaGVlcmFqLnJvdHRlbGFAYW1kLmNvbVx1MDAzZVxuK006XHRTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXG4rTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbitTOlx0TWFpbnRhaW5lZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3hsbngsdHNuLWVuZHBvaW50LWV0aGVybmV0LW1hYy55YW1sXG4rRjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vXG4rXG4gWElMSU5YIFVBUlRMSVRFIFNFUklBTCBEUklWRVJcbiBNOlx0UGV0ZXIgS29yc2dhYXJkIFx1MDAzY2phY21ldEBzdW5zaXRlLmRrXHUwMDNlXG4gTDpcdGxpbnV4LXNlcmlhbEB2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXG5pbmRleCA3NTAyMjE0Y2M3ZDUwLi5jNmQ3MDRjOGQzZDQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC9LY29uZmlnXG5AQCAtNDEsNCArNDEsNSBAQCBjb25maWcgWElMSU5YX0xMX1RFTUFDXG4gXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBYaWxpbnggMTAvMTAwLzEwMDAgTG9jYWxMaW5rIFRFTUFDXG4gXHQgIGNvcmUgdXNlZCBpbiBYaWxpbnggU3BhcnRhbiBhbmQgVmlydGV4IEZQR0FzXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9LY29uZmlnXCJcbiBlbmRpZiAjIE5FVF9WRU5ET1JfWElMSU5YXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG5pbmRleCA3ZDdkYzE3NzE0MjNlLi42NmRhYjAxMjY1MGIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvTWFrZWZpbGVcbkBAIC04LDMgKzgsNCBAQCBvYmotJChDT05GSUdfWElMSU5YX0xMX1RFTUFDKSArPSBsbF90ZW1hYy5vXG4gb2JqLSQoQ09ORklHX1hJTElOWF9FTUFDTElURSkgKz0geGlsaW54X2VtYWNsaXRlLm9cbiB4aWxpbnhfZW1hYy1vYmpzIDo9IHhpbGlueF9heGllbmV0X21haW4ubyB4aWxpbnhfYXhpZW5ldF9tZGlvLm9cbiBvYmotJChDT05GSUdfWElMSU5YX0FYSV9FTUFDKSArPSB4aWxpbnhfZW1hYy5vXG4rb2JqLSQoQ09ORklHX1hJTElOWF9UU04pICs9IHRzbi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yOTJmMTc2OTQ0MDQyXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL0tjb25maWdcbkBAIC0wLDAgKzEsMTYgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBYaWxpbnggVFNOIGRldmljZSBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBYSUxJTlhfVFNOXG4rXHR0cmlzdGF0ZSBcIlhpbGlueCBUU04gRXRoZXJuZXQgZHJpdmVyXCJcbitcdGRlcGVuZHMgb24gT0ZfQUREUkVTU1xuK1x0ZGVwZW5kcyBvbiBYSUxJTlhfRE1BXG4rXHRoZWxwXG4rXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBBTUQvWGlsaW54IFRpbWUtU2Vuc2l0aXZlIE5ldHdvcmtpbmdcbitcdCAgKFRTTikgRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQLiBJdCBwcm92aWRlcyB0aGUgd3JhcHBlciBkZXZpY2VcbitcdCAgYW5kIHRoZSBlbmRwb2ludCBNQUMgdGhhdCBjb25uZWN0cyB0aGUgSVAgdG8gdGhlIGhvc3QgQ1BVLiBUaGVcbitcdCAgdGhyZWUtcG9ydCBzd2l0Y2ggaXMgc3VwcG9ydGVkIGJ5IHRoZSBjb21wYW5pb24gRFNBIGRyaXZlci5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjU4ODY4MjhiMzg2ZjRcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vTWFrZWZpbGVcbkBAIC0wLDAgKzEsMiBAQFxuK29iai0kKENPTkZJR19YSUxJTlhfVFNOKSArPSB4aWxpbnhfdHNuLm9cbit4aWxpbnhfdHNuLXkgOj0geGlsaW54X3Rzbl9tYWluLm8geGlsaW54X3Rzbl9lcC5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmIwNzU3ZTIyZDFmZDFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbi5oXG5AQCAtMCwwICsxLDE1IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBkcml2ZXIsIHNoYXJlZCBkZWZpbml0aW9ucy5cbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4rICovXG4rXG4rI2lmbmRlZiBfWElMSU5YX1RTTl9IXG4rI2RlZmluZSBfWElMSU5YX1RTTl9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbitcbitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXI7XG4rXG4rI2VuZGlmIC8qIF9YSUxJTlhfVFNOX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9lcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGI3ZGEyNjUyMWQwMVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX2VwLmNcbkBAIC0wLDAgKzEsMTAzNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBBTUQvWGlsaW54IFRTTiBFbmRwb2ludCBNQUMgZHJpdmVyLlxuKyAqXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy5cbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jaXJjX2J1Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hL3hpbGlueF9kbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NhdHRlcmxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwieGlsaW54X3Rzbi5oXCJcbitcbisjZGVmaW5lIERSSVZFUl9OQU1FXHRcdFx0XCJ4aWxpbnhfdHNuX2VwXCJcbitcbisjZGVmaW5lIFRTTl9ETUFfQ0hfSU5WQUxJRFx0XHQweEZGVVxuKyNkZWZpbmUgVFNOX01BWF9UWF9RVUVVRVx0XHQ4XG4rI2RlZmluZSBUU05fTUFYX1JYX1FVRVVFXHRcdDhcbitcbisjZGVmaW5lIFRTTl9NQVhfVkxBTl9GUkFNRV9TSVpFXHRcdChFVEhfREFUQV9MRU4gKyBWTEFOX0VUSF9ITEVOICsgXFxcbitcdFx0XHRcdFx0IEVUSF9GQ1NfTEVOKVxuK1xuKyNkZWZpbmUgVFhfQkRfTlVNX0RFRkFVTFRcdFx0NjRcbisjZGVmaW5lIFJYX0JEX05VTV9ERUZBVUxUXHRcdDEyOFxuK1xuKyNkZWZpbmUgRVBfUlhfUkVGSUxMX1JFVFJZXHRcdG1zZWNzX3RvX2ppZmZpZXMoMTApXG4rXG4rLypcbisgKiBUaGUgRE1BIGRlc2NyaXB0b3Igc2lkZWJhbmQgc3RhdHVzIHdvcmQgcGFja3MgVElEL1RERVNUL1RVU0VSIHRvZ2V0aGVyO1xuKyAqIFRVU0VSIG9jY3VwaWVzIHRoZSBsb3cgYnl0ZSwgVElEL1RERVNUIHNpdCBpbiB0aGUgdXBwZXIgYml0cy5cbisgKi9cbisjZGVmaW5lIFRTTl9UVVNFUl9NQVNLXHRcdFx0R0VOTUFTSyg3LCAwKVxuKy8qIFRVU0VSIElucHV0IFBvcnQgSUQgZmllbGQgKGJpdHMgWzU6NF0gb2YgdGhlIFRVU0VSIGZpZWxkKSAqL1xuKyNkZWZpbmUgVFNOX1RVU0VSX1BPUlRfSURfTUFTS1x0XHRHRU5NQVNLKDUsIDQpXG4rI2RlZmluZSBUU05fVFVTRVJfUE9SVF9FUFx0XHQweDBcbisjZGVmaW5lIFRTTl9UVVNFUl9QT1JUX01BQzFcdFx0MHgxXG4rI2RlZmluZSBUU05fVFVTRVJfUE9SVF9NQUMyXHRcdDB4MlxuK1xuKy8qIFNpemVkIHRvIGluZGV4IHBvcnRfbWRbXSBieSBUVVNFUiBwb3J0X2lkICgxIG9yIDIsIHNsb3QgMCB1bnVzZWQpICovXG4rI2RlZmluZSBYTE5YX1RTTl9FUF9QT1JUX01EX1NMT1RTXHQoVFNOX1RVU0VSX1BPUlRfTUFDMiArIDEpXG4rXG4rLyoqXG4rICogc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIC0gc2tiIGNvbnRhaW5lciBmb3IgZWFjaCBpbi1mbGlnaHQgRE1BIGRlc2NyaXB0b3JcbisgKiBAc2dsOiBzY2F0dGVyLWdhdGhlciBsaXN0IGJhY2tpbmcgdGhlIERNQSBtYXBwaW5nXG4rICogQGRlc2M6IGRtYWVuZ2luZSBkZXNjcmlwdG9yIGhhbmRsZVxuKyAqIEBkbWFfYWRkcmVzczogcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZmlyc3Qgc2dsIGVudHJ5IChSWCBwYXRoKVxuKyAqIEBza2I6IFNLQiBvd25pbmcgdGhlIGJ1ZmZlclxuKyAqIEBzZ19sZW46IG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIEBzZ2wgKFRYIHBhdGgpXG4rICovXG4rc3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yIHtcbitcdHN0cnVjdCBzY2F0dGVybGlzdCBzZ2xbTUFYX1NLQl9GUkFHUyArIDFdO1xuK1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjO1xuK1x0ZG1hX2FkZHJfdCBkbWFfYWRkcmVzcztcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRpbnQgc2dfbGVuO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuIC0gb25lIERNQSBjaGFubmVsIGFuZCBpdHMgU0tCIHJpbmdcbisgKiBAc2tiX3Jpbmc6IHBlci1zbG90IFNLQiBkZXNjcmlwdG9yc1xuKyAqIEBlcDogcG9pbnRlciBiYWNrIHRvIHRoZSBvd25pbmcgRVAgaW5zdGFuY2VcbisgKiBAY2hhbjogZG1hZW5naW5lIGNoYW5uZWwgaGFuZGxlXG4rICogQGRtYV9kZXY6IGRldmljZSB1c2VkIGZvciBETUEgbWFwcGluZyAodGhlIERNQSBlbmdpbmUsIG5vdCB0aGUgRVApXG4rICogQHJpbmdfaGVhZDogcHJvZHVjZXIgaW5kZXhcbisgKiBAcmluZ190YWlsOiBjb25zdW1lciBpbmRleFxuKyAqIEByaW5nX3NpemU6IG51bWJlciBvZiBzbG90cyBpbiBAc2tiX3JpbmdcbisgKiBAcnhfbG9jazogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGJldHdlZW4gdGhlIFJYIGNhbGxiYWNrIGFuZCB0aGUgcmVmaWxsIHRpbWVyXG4rICogQHR4X2xvY2s6IHNlcmlhbGlzZXMgQHJpbmdfaGVhZCBhbmQgQHJpbmdfdGFpbCBiZXR3ZWVuIHhtaXQgYW5kIFRYIGNvbXBsZXRpb25cbisgKiBAcnhfcmVmaWxsX3RpbWVyOiByZXRyaWVzIFJYIHJlZmlsbCBhZnRlciBhbiBhbGxvY2F0aW9uIGZhaWx1cmVcbisgKiBAaXNfdHg6IHRydWUgZm9yIFRYIGNoYW5uZWxzLCBmYWxzZSBmb3IgUlhcbisgKi9cbitzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4ge1xuK1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICoqc2tiX3Jpbmc7XG4rXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwO1xuK1x0c3RydWN0IGRtYV9jaGFuICpjaGFuO1xuK1x0c3RydWN0IGRldmljZSAqZG1hX2RldjtcbitcdHUzMiByaW5nX2hlYWQ7XG4rXHR1MzIgcmluZ190YWlsO1xuK1x0dTMyIHJpbmdfc2l6ZTtcbitcdHNwaW5sb2NrX3QgcnhfbG9jaztcdC8qIHNlcmlhbGlzZXMgQHJpbmdfaGVhZCAqL1xuK1x0c3BpbmxvY2tfdCB0eF9sb2NrO1x0Lyogc2VyaWFsaXNlcyBAcmluZ19oZWFkIGFuZCBAcmluZ190YWlsICovXG4rXHRzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWZpbGxfdGltZXI7XG4rXHRib29sIGlzX3R4O1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHhsbnhfdHNuX2VwIC0gRVAgTUFDIHByaXZhdGUgZGF0YSwgZW1iZWRkZWQgaW4gbmV0X2RldmljZSBwcml2IGFyZWFcbisgKiBAbmRldjogdGhlIGNvbmR1aXQgbmV0ZGV2IChcImVwMFwiIGZvciB0aGUgZmlyc3QgSVAgaW5zdGFuY2UpXG4rICogQGRldjogYmFja2luZyBkZXZpY2VcbisgKiBAbnVtX3R4X3F1ZXVlczogbnVtYmVyIG9mIFRYIERNQSBjaGFubmVscyAob25lIHBlciBwcmlvcml0eSlcbisgKiBAbnVtX3J4X3F1ZXVlczogbnVtYmVyIG9mIFJYIERNQSBjaGFubmVsc1xuKyAqIEB0eF9kbWFfY2hhbl9tYXA6IGxvZ2ljYWwgVFggcXVldWUgaW5kZXggLVx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcbisgKiBAcnhfY2hhbl9udW06IFJYIHJpbmcgaW5kZXggLVx1MDAzZSBwaHlzaWNhbCBETUEgY2hhbm5lbCBudW1iZXJcbisgKiBAbWF4X2ZybV9zaXplOiBtYXhpbXVtIGZyYW1lIHNpemUgYWNjZXB0ZWQgb24gUlhcbisgKiBAdHhfY2hhbnM6IGFycmF5IG9mIFRYIGNoYW5uZWxzIChzaXplIEBudW1fdHhfcXVldWVzKVxuKyAqIEByeF9jaGFuczogYXJyYXkgb2YgUlggY2hhbm5lbHMgKHNpemUgQG51bV9yeF9xdWV1ZXMpXG4rICogQGNsb3Npbmc6IHNldCBpbiBuZG9fc3RvcCBzbyB0aGUgUlggY29tcGxldGlvbiBjYWxsYmFjayBzdG9wcyByZS1hcm1pbmdcbisgKiBAcG9ydF9tZDogcGVyLVRVU0VSLXBvcnQgTUVUQURBVEFfSFdfUE9SVF9NVVggZW50cmllcyBhdHRhY2hlZCBvbiBSWCxcbisgKlx0aW5kZXhlZCBieSBwb3J0X2lkICgxIGZvciBNQUMxLCAyIGZvciBNQUMyKVxuKyAqL1xuK3N0cnVjdCB4bG54X3Rzbl9lcCB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHUzMiBudW1fdHhfcXVldWVzO1xuK1x0dTMyIG51bV9yeF9xdWV1ZXM7XG4rXHR1MzIgdHhfZG1hX2NoYW5fbWFwW1RTTl9NQVhfVFhfUVVFVUVdO1xuK1x0dTMyIHJ4X2NoYW5fbnVtW1RTTl9NQVhfUlhfUVVFVUVdO1xuK1x0dTMyIG1heF9mcm1fc2l6ZTtcbitcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqKnR4X2NoYW5zO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICoqcnhfY2hhbnM7XG4rXG4rXHRib29sIGNsb3Npbmc7XG4rXG4rXHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICpwb3J0X21kW1hMTlhfVFNOX0VQX1BPUlRfTURfU0xPVFNdO1xuK307XG4rXG4rc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tidWZfZG1hX2Rlc2NyaXB0b3IgKlxuK2VwX2dldF9kZXNjKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4sIGludCBpZHgpXG4re1xuK1x0cmV0dXJuIHhjaGFuLVx1MDAzZXNrYl9yaW5nW2lkeF07XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVwX2RtYV9yeF9jYih2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzdWx0KTtcbitcbitzdGF0aWMgaW50IGVwX3J4X3N1Ym1pdF9kZXNjKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4pXG4re1xuK1x0c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkbWFfcnhfZGVzYztcbitcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHhjaGFuLVx1MDAzZWVwO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdGRtYV9hZGRyX3QgYWRkcjtcbitcbitcdHNrYnVmX2RtYSA9IGVwX2dldF9kZXNjKHhjaGFuLCB4Y2hhbi1cdTAwM2VyaW5nX2hlYWQgXHUwMDI2ICh4Y2hhbi1cdTAwM2VyaW5nX3NpemUgLSAxKSk7XG4rXHRpZiAoIXNrYnVmX2RtYSlcbitcdFx0cmV0dXJuIC1FTk9TUEM7XG4rXG4rXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGVwLVx1MDAzZW1heF9mcm1fc2l6ZSk7XG4rXHRpZiAoIXNrYilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRzZ19pbml0X3RhYmxlKHNrYnVmX2RtYS1cdTAwM2VzZ2wsIDEpO1xuK1x0YWRkciA9IGRtYV9tYXBfc2luZ2xlKHhjaGFuLVx1MDAzZWRtYV9kZXYsIHNrYi1cdTAwM2VkYXRhLCBlcC1cdTAwM2VtYXhfZnJtX3NpemUsXG4rXHRcdFx0ICAgICAgRE1BX0ZST01fREVWSUNFKTtcbitcdGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcih4Y2hhbi1cdTAwM2VkbWFfZGV2LCBhZGRyKSkpIHtcbitcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbitcdFx0XHRkZXZfd2FybihlcC1cdTAwM2VkZXYsIFwiRE1BIG1hcHBpbmcgZXJyb3Igb24gUlggc3VibWl0XFxuXCIpO1xuK1xuK1x0XHRnb3RvIGVycl9mcmVlX3NrYjtcbitcdH1cbitcdHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cdTAwM2VzZ2wpID0gYWRkcjtcbitcdHNnX2RtYV9sZW4oc2tidWZfZG1hLVx1MDAzZXNnbCkgPSBlcC1cdTAwM2VtYXhfZnJtX3NpemU7XG4rXHRkbWFfcnhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLVx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4rXHRcdFx0XHRcdCAgICAgIDEsIERNQV9ERVZfVE9fTUVNLFxuK1x0XHRcdFx0XHQgICAgICBETUFfUFJFUF9JTlRFUlJVUFQpO1xuK1x0aWYgKCFkbWFfcnhfZGVzYylcbitcdFx0Z290byBlcnJfdW5tYXBfc2tiO1xuK1xuK1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IHNrYjtcbitcdHNrYnVmX2RtYS1cdTAwM2VkbWFfYWRkcmVzcyA9IHNnX2RtYV9hZGRyZXNzKHNrYnVmX2RtYS1cdTAwM2VzZ2wpO1xuK1x0c2tidWZfZG1hLVx1MDAzZWRlc2MgPSBkbWFfcnhfZGVzYztcbitcdGRtYV9yeF9kZXNjLVx1MDAzZWNhbGxiYWNrX3BhcmFtID0geGNoYW47XG4rXHRkbWFfcnhfZGVzYy1cdTAwM2VjYWxsYmFja19yZXN1bHQgPSBlcF9kbWFfcnhfY2I7XG4rXHR4Y2hhbi1cdTAwM2VyaW5nX2hlYWQrKztcbitcdGRtYWVuZ2luZV9zdWJtaXQoZG1hX3J4X2Rlc2MpO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3VubWFwX3NrYjpcbitcdGRtYV91bm1hcF9zaW5nbGUoeGNoYW4tXHUwMDNlZG1hX2RldiwgYWRkciwgZXAtXHUwMDNlbWF4X2ZybV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpO1xuK2Vycl9mcmVlX3NrYjpcbitcdGRldl9rZnJlZV9za2Ioc2tiKTtcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgYm9vbCBlcF9yeF9yZWZpbGwoc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICp4Y2hhbiwgYm9vbCBhcm1fdGltZXIpXG4re1xuK1x0aW50IGF2YWlsLCBpO1xuK1xuK1x0Z3VhcmQoc3BpbmxvY2tfYmgpKFx1MDAyNnhjaGFuLVx1MDAzZXJ4X2xvY2spO1xuK1xuK1x0aWYgKFJFQURfT05DRSh4Y2hhbi1cdTAwM2VlcC1cdTAwM2VjbG9zaW5nKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0YXZhaWwgPSBDSVJDX1NQQUNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCwgUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCksXG4rXHRcdFx0ICAgeGNoYW4tXHUwMDNlcmluZ19zaXplKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGF2YWlsOyBpKyspIHtcbitcdFx0aWYgKGVwX3J4X3N1Ym1pdF9kZXNjKHhjaGFuKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuK1xuK1x0aWYgKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCAhPSBSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRpZiAoYXJtX3RpbWVyKVxuK1x0XHRtb2RfdGltZXIoXHUwMDI2eGNoYW4tXHUwMDNlcnhfcmVmaWxsX3RpbWVyLCBqaWZmaWVzICsgRVBfUlhfUkVGSUxMX1JFVFJZKTtcbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZXBfcnhfcmVmaWxsX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4gPSB0aW1lcl9jb250YWluZXJfb2YoeGNoYW4sIHQsXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgcnhfcmVmaWxsX3RpbWVyKTtcbitcbitcdGVwX3J4X3JlZmlsbCh4Y2hhbiwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVwX2RtYV9yeF9jYih2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgZG1hZW5naW5lX3Jlc3VsdCAqcmVzdWx0KVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW4gPSBkYXRhO1xuK1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4rXHRzaXplX3QgbWV0YV9sZW4sIG1ldGFfbWF4X2xlbiwgcnhfbGVuO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHhjaGFuLVx1MDAzZWVwO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBlcC1cdTAwM2VuZGV2O1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbitcdHUzMiBwb3J0X2lkLCB0dXNlcjtcbitcdHUzMiAqbWV0YWRhdGE7XG4rXG4rXHRza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbiwgeGNoYW4tXHUwMDNlcmluZ190YWlsIFx1MDAyNiAoeGNoYW4tXHUwMDNlcmluZ19zaXplIC0gMSkpO1xuK1x0V1JJVEVfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwsIHhjaGFuLVx1MDAzZXJpbmdfdGFpbCArIDEpO1xuK1x0c2tiID0gc2tidWZfZG1hLVx1MDAzZXNrYjtcbitcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuK1xuK1x0ZG1hX3VubWFwX3NpbmdsZSh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlZG1hX2FkZHJlc3MsXG4rXHRcdFx0IGVwLVx1MDAzZW1heF9mcm1fc2l6ZSwgRE1BX0ZST01fREVWSUNFKTtcbitcbitcdGlmIChyZXN1bHQtXHUwMDNlcmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0ZGV2X3dhcm4oZXAtXHUwMDNlZGV2LCBcIlJYIERNQSB0cmFuc2ZlciBlcnJvciAlZFxcblwiLFxuK1x0XHRcdFx0IHJlc3VsdC1cdTAwM2VyZXN1bHQpO1xuK1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4rXHRcdGdvdG8gc3VibWl0X25ldztcbitcdH1cbitcbitcdG1ldGFkYXRhID0gZG1hZW5naW5lX2Rlc2NfZ2V0X21ldGFkYXRhX3B0cihza2J1Zl9kbWEtXHUwMDNlZGVzYyxcbitcdFx0XHRcdFx0XHQgICBcdTAwMjZtZXRhX2xlbixcbitcdFx0XHRcdFx0XHQgICBcdTAwMjZtZXRhX21heF9sZW4pO1xuK1x0aWYgKElTX0VSUl9PUl9OVUxMKG1ldGFkYXRhKSkge1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdGRldl93YXJuKGVwLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gZ2V0IFJYIG1ldGFkYXRhIHBvaW50ZXJcXG5cIik7XG4rXG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4rXHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZHJvcHBlZCk7XG4rXHRcdERFVl9TVEFUU19JTkMobmRldiwgcnhfZXJyb3JzKTtcbitcdFx0Z290byBzdWJtaXRfbmV3O1xuK1x0fVxuK1xuK1x0LyogTUNETUEgbWV0YWRhdGE6IFswXSA9IHN0YXR1cywgWzFdID0gc2lkZWJhbmQgKFRJRC9UREVTVC9UVVNFUiksIFsyLi5dID0gYXBwICovXG4rXHR0dXNlciA9IG1ldGFkYXRhWzFdIFx1MDAyNiBUU05fVFVTRVJfTUFTSztcbitcdHJ4X2xlbiA9IGVwLVx1MDAzZW1heF9mcm1fc2l6ZSAtIHJlc3VsdC1cdTAwM2VyZXNpZHVlO1xuK1xuK1x0aWYgKHJ4X2xlbiBcdTAwM2UgZXAtXHUwMDNlbWF4X2ZybV9zaXplIHx8IHJ4X2xlbiBcdTAwM2MgRVRIX0hMRU4pIHtcbitcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbitcdFx0XHRkZXZfd2FybihlcC1cdTAwM2VkZXYsIFwiSW52YWxpZCBSWCBsZW5ndGggJXp1IChtYXg9JXUsIG1pbj0ldSlcXG5cIixcbitcdFx0XHRcdCByeF9sZW4sIGVwLVx1MDAzZW1heF9mcm1fc2l6ZSwgRVRIX0hMRU4pO1xuK1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Ryb3BwZWQpO1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHJ4X2Vycm9ycyk7XG4rXHRcdGdvdG8gc3VibWl0X25ldztcbitcdH1cbitcbitcdHBvcnRfaWQgPSBGSUVMRF9HRVQoVFNOX1RVU0VSX1BPUlRfSURfTUFTSywgdHVzZXIpO1xuK1x0aWYgKHBvcnRfaWQgIT0gVFNOX1RVU0VSX1BPUlRfTUFDMSBcdTAwMjZcdTAwMjYgcG9ydF9pZCAhPSBUU05fVFVTRVJfUE9SVF9NQUMyKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0ZGV2X2RiZyhlcC1cdTAwM2VkZXYsIFwiUlggZHJvcHBpbmcgdW5leHBlY3RlZCBUVVNFUiBwb3J0X2lkPSV1XFxuXCIsXG4rXHRcdFx0XHRwb3J0X2lkKTtcbitcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbitcdFx0REVWX1NUQVRTX0lOQyhuZGV2LCByeF9kcm9wcGVkKTtcbitcdFx0Z290byBzdWJtaXRfbmV3O1xuK1x0fVxuK1xuK1x0c2tiX3B1dChza2IsIHJ4X2xlbik7XG4rXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5kZXYpKSB7XG4rXHRcdGRzdF9ob2xkKFx1MDAyNmVwLVx1MDAzZXBvcnRfbWRbcG9ydF9pZF0tXHUwMDNlZHN0KTtcbitcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZlcC1cdTAwM2Vwb3J0X21kW3BvcnRfaWRdLVx1MDAzZWRzdCk7XG4rXHR9XG4rXHRza2ItXHUwMDNlZGV2ID0gbmRldjtcbitcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7XG4rXHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbitcdF9fbmV0aWZfcngoc2tiKTtcbitcbitcdERFVl9TVEFUU19JTkMobmRldiwgcnhfcGFja2V0cyk7XG4rXHRERVZfU1RBVFNfQUREKG5kZXYsIHJ4X2J5dGVzLCByeF9sZW4pO1xuK1xuK3N1Ym1pdF9uZXc6XG4rXHRlcF9yeF9yZWZpbGwoeGNoYW4sIHRydWUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcF9kbWFfdHhfY2Iodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IGRtYWVuZ2luZV9yZXN1bHQgKnJlc3VsdClcbit7XG4rXHRzdHJ1Y3QgeGxueF90c25fZXBfZG1hX2NoYW4gKnhjaGFuID0gZGF0YTtcbitcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hO1xuK1x0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDtcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHRpbnQgc2dfbGVuO1xuK1x0aW50IGxlbjtcbitcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2eGNoYW4tXHUwMDNldHhfbG9jaykge1xuK1x0XHRza2J1Zl9kbWEgPSBlcF9nZXRfZGVzYyh4Y2hhbixcbitcdFx0XHRcdFx0eGNoYW4tXHUwMDNlcmluZ190YWlsIFx1MDAyNiAoeGNoYW4tXHUwMDNlcmluZ19zaXplIC0gMSkpO1xuK1x0XHRpZiAoIXNrYnVmX2RtYSB8fCAhc2tidWZfZG1hLVx1MDAzZXNrYilcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdHNrYiA9IHNrYnVmX2RtYS1cdTAwM2Vza2I7XG4rXHRcdHNnbCA9IHNrYnVmX2RtYS1cdTAwM2VzZ2w7XG4rXHRcdHNnX2xlbiA9IHNrYnVmX2RtYS1cdTAwM2VzZ19sZW47XG4rXG4rXHRcdGRtYV91bm1hcF9zZyh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBzZ2wsIHNnX2xlbiwgRE1BX1RPX0RFVklDRSk7XG4rXG4rXHRcdHNrYnVmX2RtYS1cdTAwM2Vza2IgPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCwgeGNoYW4tXHUwMDNlcmluZ190YWlsICsgMSk7XG4rXHR9XG4rXG4rXHRuZGV2ID0gc2tiLVx1MDAzZWRldjtcbitcdHR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuK1x0bGVuID0gc2tiLVx1MDAzZWxlbjtcbitcbitcdGlmICh1bmxpa2VseShyZXN1bHQtXHUwMDNlcmVzdWx0ICE9IERNQV9UUkFOU19OT0VSUk9SKSkge1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X2Vycm9ycyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRERVZfU1RBVFNfSU5DKG5kZXYsIHR4X3BhY2tldHMpO1xuK1x0XHRERVZfU1RBVFNfQUREKG5kZXYsIHR4X2J5dGVzLCBsZW4pO1xuK1x0fVxuK1xuK1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuK1x0bmV0aWZfdHhxX2NvbXBsZXRlZF93YWtlKHR4cSwgMSwgbGVuLFxuK1x0XHRcdFx0IENJUkNfU1BBQ0UoUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCksXG4rXHRcdFx0XHRcdCAgICBSRUFEX09OQ0UoeGNoYW4tXHUwMDNlcmluZ190YWlsKSxcbitcdFx0XHRcdFx0ICAgIHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSksIDIpO1xuK31cbitcbitzdGF0aWMgbmV0ZGV2X3R4X3QgZXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRtYV90eF9kZXNjO1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4rXHRpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbitcdHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqeGNoYW47XG4rXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7XG4rXHRpbnQgc2dfbGVuLCBuZW50cywgcmV0O1xuK1x0ZG1hX2Nvb2tpZV90IGNvb2tpZTtcbitcbitcdGlmICh1bmxpa2VseShxdWV1ZSBcdTAwM2U9IGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0bmV0ZGV2X3dhcm4obmRldiwgXCJJbnZhbGlkIFRYIHF1ZXVlICVkIChtYXggJXUpXFxuXCIsXG4rXHRcdFx0XHQgICAgcXVldWUsIGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuK1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbitcdH1cbitcbitcdGlmIChlcC1cdTAwM2V0eF9kbWFfY2hhbl9tYXBbcXVldWVdID09IFRTTl9ETUFfQ0hfSU5WQUxJRCkge1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdG5ldGRldl93YXJuKG5kZXYsIFwiTG9naWNhbCBUWCBxdWV1ZSAlZCBoYXMgaW52YWxpZCBETUEgbWFwcGluZ1xcblwiLFxuK1x0XHRcdFx0ICAgIHF1ZXVlKTtcbitcdFx0Z290byBlcnJfZHJvcF9za2I7XG4rXHR9XG4rXG4rXHR4Y2hhbiA9IGVwLVx1MDAzZXR4X2NoYW5zW3F1ZXVlXTtcbitcbitcdHNnX2xlbiA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncyArIDE7XG4rXHR0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKG5kZXYsIHF1ZXVlKTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbitcdGlmIChDSVJDX1NQQUNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCwgUkVBRF9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfdGFpbCksXG4rXHRcdCAgICAgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpIFx1MDAzYz0gMSkge1xuK1x0XHRuZXRpZl90eHFfdHJ5X3N0b3AodHhxLFxuK1x0XHRcdFx0ICAgQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsXG4rXHRcdFx0XHRcdCAgICAgIFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuK1x0XHRcdFx0XHQgICAgICB4Y2hhbi1cdTAwM2VyaW5nX3NpemUpLFxuK1x0XHRcdFx0ICAgMik7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdG5ldGRldl93YXJuKG5kZXYsIFwiVFNOIFRYIHJpbmcgZnVsbFxcblwiKTtcbitcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xuK1x0fVxuK1xuK1x0c2tidWZfZG1hID0gZXBfZ2V0X2Rlc2MoeGNoYW4sIHhjaGFuLVx1MDAzZXJpbmdfaGVhZCBcdTAwMjYgKHhjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpKTtcbitcdGlmICghc2tidWZfZG1hKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1xuK1x0c2dfaW5pdF90YWJsZShza2J1Zl9kbWEtXHUwMDNlc2dsLCBzZ19sZW4pO1xuK1x0cmV0ID0gc2tiX3RvX3NndmVjKHNrYiwgc2tidWZfZG1hLVx1MDAzZXNnbCwgMCwgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9kcm9wX3NrYjtcbitcdHNnX2xlbiA9IHJldDtcbitcbitcdG5lbnRzID0gZG1hX21hcF9zZyh4Y2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlc2dsLCBzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuK1x0aWYgKCFuZW50cylcbitcdFx0Z290byBlcnJfZHJvcF9za2I7XG4rXG4rXHRkbWFfdHhfZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3NsYXZlX3NnKHhjaGFuLVx1MDAzZWNoYW4sIHNrYnVmX2RtYS1cdTAwM2VzZ2wsXG4rXHRcdFx0XHRcdCAgICAgIG5lbnRzLCBETUFfTUVNX1RPX0RFVixcbitcdFx0XHRcdFx0ICAgICAgRE1BX1BSRVBfSU5URVJSVVBUKTtcbitcdGlmICghZG1hX3R4X2Rlc2MpXG4rXHRcdGdvdG8gZXJyX3VubWFwX3NnO1xuK1xuK1x0c2tidWZfZG1hLVx1MDAzZXNrYiA9IHNrYjtcbitcdHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4gPSBzZ19sZW47XG4rXHRkbWFfdHhfZGVzYy1cdTAwM2VjYWxsYmFja19wYXJhbSA9IHhjaGFuO1xuK1x0ZG1hX3R4X2Rlc2MtXHUwMDNlY2FsbGJhY2tfcmVzdWx0ID0gZXBfZG1hX3R4X2NiO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0Y29va2llID0gZG1hZW5naW5lX3N1Ym1pdChkbWFfdHhfZGVzYyk7XG4rXHRpZiAoZG1hX3N1Ym1pdF9lcnJvcihjb29raWUpKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhjaGFuLVx1MDAzZXR4X2xvY2spO1xuK1x0XHRza2J1Zl9kbWEtXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0Z290byBlcnJfdW5tYXBfc2c7XG4rXHR9XG4rXHRXUklURV9PTkNFKHhjaGFuLVx1MDAzZXJpbmdfaGVhZCwgeGNoYW4tXHUwMDNlcmluZ19oZWFkICsgMSk7XG4rXHRuZXRkZXZfdHhfc2VudF9xdWV1ZSh0eHEsIHNrYi1cdTAwM2VsZW4pO1xuK1x0bmV0aWZfdHhxX21heWJlX3N0b3AodHhxLFxuK1x0XHRcdCAgICAgQ0lSQ19TUEFDRSh4Y2hhbi1cdTAwM2VyaW5nX2hlYWQsXG4rXHRcdFx0XHRcdFJFQURfT05DRSh4Y2hhbi1cdTAwM2VyaW5nX3RhaWwpLFxuK1x0XHRcdFx0XHR4Y2hhbi1cdTAwM2VyaW5nX3NpemUpLFxuK1x0XHRcdCAgICAgMiwgMik7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ4Y2hhbi1cdTAwM2V0eF9sb2NrKTtcbitcbitcdGRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHhjaGFuLVx1MDAzZWNoYW4pO1xuK1xuK1x0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcbitlcnJfdW5tYXBfc2c6XG4rXHRkbWFfdW5tYXBfc2coeGNoYW4tXHUwMDNlZG1hX2Rldiwgc2tidWZfZG1hLVx1MDAzZXNnbCwgc2dfbGVuLCBETUFfVE9fREVWSUNFKTtcbitlcnJfZHJvcF9za2I6XG4rXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0REVWX1NUQVRTX0lOQyhuZGV2LCB0eF9kcm9wcGVkKTtcbitcdHJldHVybiBORVRERVZfVFhfT0s7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XG4rc3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcCk7XG4rXG4rc3RhdGljIGludCBlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9lcCAqZXAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRXUklURV9PTkNFKGVwLVx1MDAzZWNsb3NpbmcsIGZhbHNlKTtcbitcbitcdHJldCA9IGVwX2luaXRfZG1hZW5naW5lKGVwKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bmV0ZGV2X2VycihuZGV2LCBcImZhaWxlZCB0byBpbml0aWFsaXplIERNQSBlbmdpbmVcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5kZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgeGxueF90c25fZXAgKmVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcbitcdG5ldGlmX3R4X2Rpc2FibGUobmRldik7XG4rXHRXUklURV9PTkNFKGVwLVx1MDAzZWNsb3NpbmcsIHRydWUpO1xuK1x0ZXBfZXhpdF9kbWFlbmdpbmUoZXApO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmRldi1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdG5ldGRldl90eF9yZXNldF9zdWJxdWV1ZShuZGV2LCBpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZWQpXG4re1xuK1x0c3Ryc2NweShlZC1cdTAwM2Vkcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoZWQtXHUwMDNlZHJpdmVyKSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXBfbmV0ZGV2X29wcyA9IHtcbitcdC5uZG9fb3Blblx0XHQ9IGVwX29wZW4sXG4rXHQubmRvX3N0b3BcdFx0PSBlcF9zdG9wLFxuK1x0Lm5kb19zdGFydF94bWl0XHRcdD0gZXBfc3RhcnRfeG1pdCxcbitcdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbitcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXBfZXRodG9vbF9vcHMgPSB7XG4rXHQuZ2V0X2RydmluZm9cdD0gZXBfZ2V0X2RydmluZm8sXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpcbitlcF9hbGxvY19kbWFfY2hhbihzdHJ1Y3QgeGxueF90c25fZXAgKmVwLCBjb25zdCBjaGFyICpuYW1lLCBib29sIGlzX3R4LFxuK1x0XHQgIGludCByaW5nX3NpemUpXG4re1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwX2RtYV9jaGFuICpjaGFuO1xuK1x0c3RydWN0IGRtYV9jaGFuICplcnJfY2hhbjtcbitcdGludCBpO1xuK1xuK1x0Y2hhbiA9IGt6YWxsb2Nfb2JqKCpjaGFuKTtcbitcdGlmICghY2hhbilcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRjaGFuLVx1MDAzZWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFuKGVwLVx1MDAzZWRldiwgbmFtZSk7XG4rXHRpZiAoSVNfRVJSKGNoYW4tXHUwMDNlY2hhbikpIHtcbitcdFx0ZXJyX2NoYW4gPSBjaGFuLVx1MDAzZWNoYW47XG4rXHRcdGtmcmVlKGNoYW4pO1xuK1x0XHRyZXR1cm4gRVJSX0NBU1QoZXJyX2NoYW4pO1xuK1x0fVxuK1xuK1x0Y2hhbi1cdTAwM2Vza2JfcmluZyA9IGtjYWxsb2MocmluZ19zaXplLCBzaXplb2YoKmNoYW4tXHUwMDNlc2tiX3JpbmcpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghY2hhbi1cdTAwM2Vza2JfcmluZykge1xuK1x0XHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXHUwMDNlY2hhbik7XG4rXHRcdGtmcmVlKGNoYW4pO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJpbmdfc2l6ZTsgaSsrKSB7XG4rXHRcdGNoYW4tXHUwMDNlc2tiX3JpbmdbaV0gPSBremFsbG9jX29iaigqY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSk7XG4rXHRcdGlmICghY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSkge1xuK1x0XHRcdHdoaWxlICgtLWkgXHUwMDNlPSAwKVxuK1x0XHRcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSk7XG4rXHRcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZyk7XG4rXHRcdFx0ZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuLVx1MDAzZWNoYW4pO1xuK1x0XHRcdGtmcmVlKGNoYW4pO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRjaGFuLVx1MDAzZWlzX3R4ID0gaXNfdHg7XG4rXHRjaGFuLVx1MDAzZWVwID0gZXA7XG4rXHRjaGFuLVx1MDAzZXJpbmdfc2l6ZSA9IHJpbmdfc2l6ZTtcbitcdGNoYW4tXHUwMDNlZG1hX2RldiA9IGRtYWVuZ2luZV9nZXRfZG1hX2RldmljZShjaGFuLVx1MDAzZWNoYW4pO1xuK1x0aWYgKGlzX3R4KSB7XG4rXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmNoYW4tXHUwMDNldHhfbG9jayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuK1x0XHR0aW1lcl9zZXR1cChcdTAwMjZjaGFuLVx1MDAzZXJ4X3JlZmlsbF90aW1lciwgZXBfcnhfcmVmaWxsX3RpbWVyLCAwKTtcbitcdH1cbitcbitcdHJldHVybiBjaGFuO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcF9mcmVlX2RtYV9jaGFuKHN0cnVjdCB4bG54X3Rzbl9lcF9kbWFfY2hhbiAqY2hhbilcbit7XG4rXHRpbnQgaTtcbitcbitcdGlmICghY2hhbilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKGNoYW4tXHUwMDNlY2hhbikge1xuK1x0XHRpZiAoIWNoYW4tXHUwMDNlaXNfdHgpIHtcbitcdFx0XHQvKiBlcF9zdG9wKCkgc2V0cyBjbG9zaW5nIGJlZm9yZSB0ZWFyZG93bi4gVGFrZSByeF9sb2NrXG4rXHRcdFx0ICogc28gYW55IHJlZmlsbCB0aGF0IGFscmVhZHkgcGFzc2VkIHRoZSBjbG9zaW5nIGNoZWNrXG4rXHRcdFx0ICogZmluaXNoZXMgYW5kIG5vIGxhdGVyIG9uZSBzdWJtaXRzIG9yIGFybXMgdGhlIHRpbWVyLFxuK1x0XHRcdCAqIHRoZW4gc2h1dCBkb3duIHRoZSB0aW1lciBzbyBpdCBjYW5ub3QgYmUgcmVhcm1lZFxuK1x0XHRcdCAqIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBmcmVlZC5cbitcdFx0XHQgKi9cbitcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y2hhbi1cdTAwM2VyeF9sb2NrKTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjaGFuLVx1MDAzZXJ4X2xvY2spO1xuK1x0XHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2Y2hhbi1cdTAwM2VyeF9yZWZpbGxfdGltZXIpO1xuK1x0XHR9XG4rXG4rXHRcdGRtYWVuZ2luZV90ZXJtaW5hdGVfc3luYyhjaGFuLVx1MDAzZWNoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKGNoYW4tXHUwMDNlaXNfdHgpIHtcbitcdFx0d2hpbGUgKGNoYW4tXHUwMDNlcmluZ190YWlsICE9IGNoYW4tXHUwMDNlcmluZ19oZWFkKSB7XG4rXHRcdFx0c3RydWN0IHNrYnVmX2RtYV9kZXNjcmlwdG9yICpza2J1Zl9kbWE7XG4rXG4rXHRcdFx0c2tidWZfZG1hID0gY2hhbi1cdTAwM2Vza2JfcmluZ1tjaGFuLVx1MDAzZXJpbmdfdGFpbCBcdTAwMjZcbitcdFx0XHRcdFx0XHQgIChjaGFuLVx1MDAzZXJpbmdfc2l6ZSAtIDEpXTtcbitcdFx0XHRpZiAoc2tidWZfZG1hIFx1MDAyNlx1MDAyNiBza2J1Zl9kbWEtXHUwMDNlc2tiKSB7XG4rXHRcdFx0XHRkbWFfdW5tYXBfc2coY2hhbi1cdTAwM2VkbWFfZGV2LCBza2J1Zl9kbWEtXHUwMDNlc2dsLFxuK1x0XHRcdFx0XHQgICAgIHNrYnVmX2RtYS1cdTAwM2VzZ19sZW4sIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tidWZfZG1hLVx1MDAzZXNrYik7XG4rXHRcdFx0XHRza2J1Zl9kbWEtXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0XHR9XG4rXHRcdFx0Y2hhbi1cdTAwM2VyaW5nX3RhaWwrKztcbitcdFx0fVxuK1x0fVxuK1xuK1x0aWYgKGNoYW4tXHUwMDNlc2tiX3JpbmcpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2hhbi1cdTAwM2VyaW5nX3NpemU7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBza2J1Zl9kbWFfZGVzY3JpcHRvciAqc2tidWZfZG1hID0gY2hhbi1cdTAwM2Vza2JfcmluZ1tpXTtcbitcbitcdFx0XHRpZiAoc2tidWZfZG1hIFx1MDAyNlx1MDAyNiAhY2hhbi1cdTAwM2Vpc190eCBcdTAwMjZcdTAwMjYgc2tidWZfZG1hLVx1MDAzZXNrYikge1xuK1x0XHRcdFx0ZG1hX3VubWFwX3NpbmdsZShjaGFuLVx1MDAzZWRtYV9kZXYsXG4rXHRcdFx0XHRcdFx0IHNrYnVmX2RtYS1cdTAwM2VkbWFfYWRkcmVzcyxcbitcdFx0XHRcdFx0XHQgY2hhbi1cdTAwM2VlcC1cdTAwM2VtYXhfZnJtX3NpemUsXG4rXHRcdFx0XHRcdFx0IERNQV9GUk9NX0RFVklDRSk7XG4rXHRcdFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2J1Zl9kbWEtXHUwMDNlc2tiKTtcbitcdFx0XHR9XG4rXHRcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZ1tpXSk7XG4rXHRcdH1cbitcdFx0a2ZyZWUoY2hhbi1cdTAwM2Vza2JfcmluZyk7XG4rXHR9XG4rXHRpZiAoY2hhbi1cdTAwM2VjaGFuKVxuK1x0XHRkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4tXHUwMDNlY2hhbik7XG4rXG4rXHRrZnJlZShjaGFuKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZXBfZXhpdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbit7XG4rXHRpbnQgaTtcbitcbitcdGlmIChlcC1cdTAwM2V0eF9jaGFucykge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlcC1cdTAwM2VudW1fdHhfcXVldWVzOyBpKyspXG4rXHRcdFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cdTAwM2V0eF9jaGFuc1tpXSk7XG4rXHRcdGtmcmVlKGVwLVx1MDAzZXR4X2NoYW5zKTtcbitcdFx0ZXAtXHUwMDNldHhfY2hhbnMgPSBOVUxMO1xuK1x0fVxuK1x0aWYgKGVwLVx1MDAzZXJ4X2NoYW5zKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKylcbitcdFx0XHRlcF9mcmVlX2RtYV9jaGFuKGVwLVx1MDAzZXJ4X2NoYW5zW2ldKTtcbitcdFx0a2ZyZWUoZXAtXHUwMDNlcnhfY2hhbnMpO1xuK1x0XHRlcC1cdTAwM2VyeF9jaGFucyA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfaW5pdF9kbWFlbmdpbmUoc3RydWN0IHhsbnhfdHNuX2VwICplcClcbit7XG4rXHRpbnQgdHhfYWxsb2NhdGVkID0gMCwgcnhfYWxsb2NhdGVkID0gMDtcbitcdGNoYXIgbmFtZVsxNl07XG4rXHRpbnQgaSwgcmV0O1xuK1xuK1x0ZXAtXHUwMDNldHhfY2hhbnMgPSBrY2FsbG9jKGVwLVx1MDAzZW51bV90eF9xdWV1ZXMsIHNpemVvZigqZXAtXHUwMDNldHhfY2hhbnMpLFxuK1x0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghZXAtXHUwMDNldHhfY2hhbnMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0ZXAtXHUwMDNlcnhfY2hhbnMgPSBrY2FsbG9jKGVwLVx1MDAzZW51bV9yeF9xdWV1ZXMsIHNpemVvZigqZXAtXHUwMDNlcnhfY2hhbnMpLFxuK1x0XHRcdCAgICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghZXAtXHUwMDNlcnhfY2hhbnMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfZnJlZV90eDtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwidHhfY2hhbiV1XCIsIGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSk7XG4rXHRcdGVwLVx1MDAzZXR4X2NoYW5zW2ldID0gZXBfYWxsb2NfZG1hX2NoYW4oZXAsIG5hbWUsIHRydWUsXG4rXHRcdFx0XHRcdFx0ICAgIFRYX0JEX05VTV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihlcC1cdTAwM2V0eF9jaGFuc1tpXSkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKGVwLVx1MDAzZXR4X2NoYW5zW2ldKTtcbitcdFx0XHRlcC1cdTAwM2V0eF9jaGFuc1tpXSA9IE5VTEw7XG4rXHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbitcdFx0fVxuK1x0XHR0eF9hbGxvY2F0ZWQrKztcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuK1x0XHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwicnhfY2hhbiV1XCIsIGVwLVx1MDAzZXJ4X2NoYW5fbnVtW2ldKTtcbitcdFx0ZXAtXHUwMDNlcnhfY2hhbnNbaV0gPSBlcF9hbGxvY19kbWFfY2hhbihlcCwgbmFtZSwgZmFsc2UsXG4rXHRcdFx0XHRcdFx0ICAgIFJYX0JEX05VTV9ERUZBVUxUKTtcbitcdFx0aWYgKElTX0VSUihlcC1cdTAwM2VyeF9jaGFuc1tpXSkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKGVwLVx1MDAzZXJ4X2NoYW5zW2ldKTtcbitcdFx0XHRlcC1cdTAwM2VyeF9jaGFuc1tpXSA9IE5VTEw7XG4rXHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbitcdFx0fVxuK1x0XHRyeF9hbGxvY2F0ZWQrKztcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVwLVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkrKykge1xuK1x0XHRpZiAoIWVwX3J4X3JlZmlsbChlcC1cdTAwM2VyeF9jaGFuc1tpXSwgZmFsc2UpKSB7XG4rXHRcdFx0ZGV2X2VycihlcC1cdTAwM2VkZXYsIFwiUlggY2hhbm5lbCAlZDogbm8gZGVzY3JpcHRvcnMgYXJtZWRcXG5cIixcbitcdFx0XHRcdGkpO1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0Z290byBlcnJfZnJlZV9jaGFucztcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfY2hhbnM6XG4rXHRXUklURV9PTkNFKGVwLVx1MDAzZWNsb3NpbmcsIHRydWUpO1xuK1x0d2hpbGUgKC0tcnhfYWxsb2NhdGVkIFx1MDAzZT0gMClcbitcdFx0ZXBfZnJlZV9kbWFfY2hhbihlcC1cdTAwM2VyeF9jaGFuc1tyeF9hbGxvY2F0ZWRdKTtcbitcdHdoaWxlICgtLXR4X2FsbG9jYXRlZCBcdTAwM2U9IDApXG4rXHRcdGVwX2ZyZWVfZG1hX2NoYW4oZXAtXHUwMDNldHhfY2hhbnNbdHhfYWxsb2NhdGVkXSk7XG4rXHRrZnJlZShlcC1cdTAwM2VyeF9jaGFucyk7XG4rXHRlcC1cdTAwM2VyeF9jaGFucyA9IE5VTEw7XG4rZXJyX2ZyZWVfdHg6XG4rXHRrZnJlZShlcC1cdTAwM2V0eF9jaGFucyk7XG4rXHRlcC1cdTAwM2V0eF9jaGFucyA9IE5VTEw7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKHN0cnVjdCB4bG54X3Rzbl9lcCAqZXApXG4re1xuK1x0c3RydWN0IHhpbGlueF92ZG1hX2NvbmZpZyBjZmcgPSB7IC5yZXNldCA9IDEgfTtcbitcdHN0cnVjdCBkbWFfY2hhbiAqcmVzZXRfY2hhbjtcbitcdGNoYXIgbmFtZVsxNl07XG4rXHRpbnQgcmV0O1xuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBcInR4X2NoYW4ldVwiLCBlcC1cdTAwM2V0eF9kbWFfY2hhbl9tYXBbMF0pO1xuK1x0cmVzZXRfY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW4oZXAtXHUwMDNlZGV2LCBuYW1lKTtcbitcdGlmIChJU19FUlIocmVzZXRfY2hhbikpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgUFRSX0VSUihyZXNldF9jaGFuKSxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVxdWVzdCAlcyBmb3IgcmVzZXRcXG5cIiwgbmFtZSk7XG4rXG4rXHRyZXQgPSB4aWxpbnhfdmRtYV9jaGFubmVsX3NldF9jb25maWcocmVzZXRfY2hhbiwgXHUwMDI2Y2ZnKTtcbitcdGRtYV9yZWxlYXNlX2NoYW5uZWwocmVzZXRfY2hhbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIHJldCxcbitcdFx0XHRcdCAgICAgXCJmYWlsZWQgdG8gcmVzZXQgRE1BIGNvbnRyb2xsZXJcXG5cIik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBQYXJzZSB0aGUgXCJ0eC1xdWV1ZXMtY29uZmlnXCIgY2hpbGQgb2YgdGhlIEVQIG5vZGUuIFRoZSBsb2dpY2FsIHF1ZXVlXG4rICogaW5kZXggaXMgdGFrZW4gZnJvbSB0aGUgXCJxdWV1ZVx1MDAzY05cdTAwM2VcIiBub2RlIG5hbWUsIHNvIHRoZSBtYXBwaW5nIGRvZXMgbm90XG4rICogZGVwZW5kIG9uIHRoZSBvcmRlciB0aGUgY2hpbGQgbm9kZXMgYXBwZWFyIGluIHRoZSBkZXZpY2UgdHJlZS5cbisgKi9cbitzdGF0aWMgaW50IGVwX3BhcnNlX3R4X3F1ZXVlX2NvbmZpZyhzdHJ1Y3QgeGxueF90c25fZXAgKmVwLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdHhjZmdfbnAsIHUxNiB0eF9wcmVzZW50KVxuK3tcbitcdERFQ0xBUkVfQklUTUFQKHF1ZXVlX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307XG4rXHRERUNMQVJFX0JJVE1BUChjaGFuX3NlZW4sIFRTTl9NQVhfVFhfUVVFVUUpID0ge307XG4rXHR1bnNpZ25lZCBpbnQgY291bnQgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdGZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKHR4Y2ZnX25wLCBxbm9kZSkge1xuK1x0XHR1MzIgY2hhbiwgcXVldWU7XG4rXG4rXHRcdGlmICghc3RyX2hhc19wcmVmaXgocW5vZGUtXHUwMDNlbmFtZSwgXCJxdWV1ZVwiKSB8fFxuK1x0XHQgICAga3N0cnRvdTMyKHFub2RlLVx1MDAzZW5hbWUgKyBzdHJsZW4oXCJxdWV1ZVwiKSwgMTAsIFx1MDAyNnF1ZXVlKSB8fFxuK1x0XHQgICAgcXVldWUgXHUwMDNlPSBlcC1cdTAwM2VudW1fdHhfcXVldWVzKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcInR4LWNvbmZpZzogaW52YWxpZCBxdWV1ZSBub2RlICVwT0ZuIChoYXZlICV1IHF1ZXVlcylcXG5cIixcbitcdFx0XHRcdFx0ICAgICBxbm9kZSwgZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XG4rXG4rXHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KHF1ZXVlLCBxdWV1ZV9zZWVuKSlcbitcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShlcC1cdTAwM2VkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHRcdCAgICAgXCJ0eC1jb25maWc6IHF1ZXVlICV1IGRlc2NyaWJlZCB0d2ljZVxcblwiLFxuK1x0XHRcdFx0XHQgICAgIHF1ZXVlKTtcbitcbitcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocW5vZGUsIFwieGxueCxkbWEtY2hhbm5lbC1udW1cIiwgXHUwMDI2Y2hhbik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCByZXQsXG4rXHRcdFx0XHRcdCAgICAgXCJ0eC1jb25maWc6IHF1ZXVlICV1IG1pc3NpbmcgeGxueCxkbWEtY2hhbm5lbC1udW1cXG5cIixcbitcdFx0XHRcdFx0ICAgICBxdWV1ZSk7XG4rXG4rXHRcdGlmIChjaGFuIFx1MDAzZT0gVFNOX01BWF9UWF9RVUVVRSB8fCAhKHR4X3ByZXNlbnQgXHUwMDI2IEJJVChjaGFuKSkpXG4rXHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHQgICAgIFwidHgtY29uZmlnOiBxdWV1ZSAldSBtYXBzIHRvIGNoYW5uZWwgJXUgbm90IHByZXNlbnQgaW4gZG1hLW5hbWVzXFxuXCIsXG4rXHRcdFx0XHRcdCAgICAgcXVldWUsIGNoYW4pO1xuK1xuK1x0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFuLCBjaGFuX3NlZW4pKVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGVwLVx1MDAzZWRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0ICAgICBcInR4LWNvbmZpZzogY2hhbm5lbCAldSBhbHJlYWR5IGFzc2lnbmVkIHRvIGFub3RoZXIgcXVldWVcXG5cIixcbitcdFx0XHRcdFx0ICAgICBjaGFuKTtcbitcbitcdFx0ZXAtXHUwMDNldHhfZG1hX2NoYW5fbWFwW3F1ZXVlXSA9IGNoYW47XG4rXHRcdGNvdW50Kys7XG4rXHR9XG4rXG4rXHRpZiAoY291bnQgIT0gZXAtXHUwMDNlbnVtX3R4X3F1ZXVlcylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXAtXHUwMDNlZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgICBcInR4LWNvbmZpZzogZGVzY3JpYmVkICV1IHF1ZXVlcyBidXQgZXhwZWN0ZWQgJXVcXG5cIixcbitcdFx0XHRcdCAgICAgY291bnQsIGVwLVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfY291bnRfZG1hX3F1ZXVlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiAqb3V0X3R4LCB1MzIgKm91dF9yeCxcbitcdFx0XHQgICAgICAgdTE2ICp0eF9wcmVzZW50LCB1MzIgKnJ4X2NoYW5fbnVtKVxuK3tcbitcdHUzMiB0eCA9IDAsIHJ4ID0gMDtcbitcdHUxNiByeF9wcmVzZW50ID0gMDtcbitcdGludCBuLCBpLCByZXQ7XG4rXG4rXHRuID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhkZXYtXHUwMDNlb2Zfbm9kZSwgXCJkbWEtbmFtZXNcIik7XG4rXHRpZiAobiBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBuLCBcImZhaWxlZCB0byByZWFkIGRtYS1uYW1lc1xcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG47IGkrKykge1xuK1x0XHRjb25zdCBjaGFyICpuYW1lO1xuK1x0XHRzaXplX3QgcGxlbjtcbitcdFx0dTMyIGlkeDtcbitcbitcdFx0cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmdfaW5kZXgoZGV2LVx1MDAzZW9mX25vZGUsIFwiZG1hLW5hbWVzXCIsXG4rXHRcdFx0XHRcdFx0ICAgIGksIFx1MDAyNm5hbWUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LFxuK1x0XHRcdFx0XHQgICAgIFwiZmFpbGVkIHRvIHJlYWQgZG1hLW5hbWVzWyVkXVxcblwiLCBpKTtcbitcbitcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwidHhfY2hhblwiKTtcbitcdFx0aWYgKHBsZW4pIHtcbitcdFx0XHRpZiAoa3N0cnRvdTMyKG5hbWUgKyBwbGVuLCAxMCwgXHUwMDI2aWR4KSB8fFxuK1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1RYX1FVRVVFKVxuK1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHRcdCAgICAgXCJpbnZhbGlkIFRYIGNoYW5uZWwgbmFtZSAlc1xcblwiLFxuK1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4rXG4rXHRcdFx0aWYgKCp0eF9wcmVzZW50IFx1MDAyNiBCSVQoaWR4KSlcbitcdFx0XHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdFx0XHQgICAgIFwiZHVwbGljYXRlIFRYIGNoYW5uZWwgJXNcXG5cIixcbitcdFx0XHRcdFx0XHQgICAgIG5hbWUpO1xuK1xuK1x0XHRcdCp0eF9wcmVzZW50IHw9IEJJVChpZHgpO1xuK1x0XHRcdHR4Kys7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0cGxlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFwicnhfY2hhblwiKTtcbitcdFx0aWYgKHBsZW4pIHtcbitcdFx0XHRpZiAoa3N0cnRvdTMyKG5hbWUgKyBwbGVuLCAxMCwgXHUwMDI2aWR4KSB8fFxuK1x0XHRcdCAgICBpZHggXHUwMDNlPSBUU05fTUFYX1JYX1FVRVVFKVxuK1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHRcdCAgICAgXCJpbnZhbGlkIFJYIGNoYW5uZWwgbmFtZSAlc1xcblwiLFxuK1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4rXG4rXHRcdFx0aWYgKHJ4X3ByZXNlbnQgXHUwMDI2IEJJVChpZHgpKVxuK1x0XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0XHRcdCAgICAgXCJkdXBsaWNhdGUgUlggY2hhbm5lbCAlc1xcblwiLFxuK1x0XHRcdFx0XHRcdCAgICAgbmFtZSk7XG4rXG4rXHRcdFx0cnhfcHJlc2VudCB8PSBCSVQoaWR4KTtcbitcdFx0XHRyeF9jaGFuX251bVtyeF0gPSBpZHg7XG4rXHRcdFx0cngrKztcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwidW5yZWNvZ25pc2VkIGRtYS1uYW1lcyBlbnRyeSAlc1xcblwiLCBuYW1lKTtcbitcdH1cbitcbitcdGlmICghdHgpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCxcbitcdFx0XHRcdCAgICAgXCJubyBUWCBjaGFubmVscyBpbiBkbWEtbmFtZXNcXG5cIik7XG4rXG4rXHRpZiAoIXJ4KVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgIFwibm8gUlggY2hhbm5lbHMgaW4gZG1hLW5hbWVzXFxuXCIpO1xuK1xuK1x0Km91dF90eCA9IHR4O1xuK1x0Km91dF9yeCA9IHJ4O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVwX2ZyZWVfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgWExOWF9UU05fRVBfUE9SVF9NRF9TTE9UUzsgaSsrKSB7XG4rXHRcdGlmIChlcC1cdTAwM2Vwb3J0X21kW2ldKSB7XG4rXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2ZXAtXHUwMDNlcG9ydF9tZFtpXS1cdTAwM2Vkc3QpO1xuK1x0XHRcdGVwLVx1MDAzZXBvcnRfbWRbaV0gPSBOVUxMO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgZXBfYWxsb2NfcG9ydF9tZChzdHJ1Y3QgeGxueF90c25fZXAgKmVwKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gVFNOX1RVU0VSX1BPUlRfTUFDMTsgaSBcdTAwM2M9IFRTTl9UVVNFUl9QT1JUX01BQzI7IGkrKykge1xuK1x0XHRzdHJ1Y3QgbWV0YWRhdGFfZHN0ICptZDtcbitcbitcdFx0bWQgPSBtZXRhZGF0YV9kc3RfYWxsb2MoMCwgTUVUQURBVEFfSFdfUE9SVF9NVVgsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIW1kKSB7XG4rXHRcdFx0ZXBfZnJlZV9wb3J0X21kKGVwKTtcbitcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0fVxuK1x0XHRtZC1cdTAwM2V1LnBvcnRfaW5mby5wb3J0X2lkID0gaTtcbitcdFx0ZXAtXHUwMDNlcG9ydF9tZFtpXSA9IG1kO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeGxueF90c25fZXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHR1MzIgcnhfY2hhbl9udW1bVFNOX01BWF9SWF9RVUVVRV07XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqdHhjZmdfbnA7XG4rXHR1MzIgbnVtX3R4LCBudW1fcngsIG51bV9wcmlvO1xuK1x0c3RydWN0IGRldmljZV9ub2RlICppcF9ucDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcDtcbitcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbitcdHUxNiB0eF9wcmVzZW50ID0gMDtcbitcdGludCByZXQ7XG4rXHRpbnQgaTtcbitcbitcdHJldCA9IGVwX2NvdW50X2RtYV9xdWV1ZXMoZGV2LCBcdTAwMjZudW1fdHgsIFx1MDAyNm51bV9yeCwgXHUwMDI2dHhfcHJlc2VudCwgcnhfY2hhbl9udW0pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlwX25wID0gb2ZfZ2V0X3BhcmVudChkZXYtXHUwMDNlb2Zfbm9kZSk7XG4rXHRpZiAoIWlwX25wKVxuK1x0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsIFwibWlzc2luZyBwYXJlbnQgSVAgbm9kZVxcblwiKTtcbitcbitcdHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGlwX25wLCBcInhsbngsbnVtLXByaW9yaXRpZXNcIiwgXHUwMDI2bnVtX3ByaW8pO1xuK1x0b2Zfbm9kZV9wdXQoaXBfbnApO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwibWlzc2luZyB4bG54LG51bS1wcmlvcml0aWVzXFxuXCIpO1xuK1xuK1x0aWYgKG51bV90eCAhPSBudW1fcHJpbylcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCAtRUlOVkFMLFxuK1x0XHRcdFx0ICAgICBcIlRYIGNoYW5uZWwgY291bnQgJXUgbXVzdCBlcXVhbCBudW0tcHJpb3JpdGllcyAldVxcblwiLFxuK1x0XHRcdFx0ICAgICBudW1fdHgsIG51bV9wcmlvKTtcbitcbitcdG5kZXYgPSBhbGxvY19uZXRkZXZfbXFzKHNpemVvZigqZXApLCBcImVwJWRcIiwgTkVUX05BTUVfRU5VTSxcbitcdFx0XHRcdGV0aGVyX3NldHVwLCBudW1fdHgsIG51bV9yeCk7XG4rXHRpZiAoIW5kZXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0U0VUX05FVERFVl9ERVYobmRldiwgZGV2KTtcbitcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmVwX25ldGRldl9vcHM7XG4rXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2ZXBfZXRodG9vbF9vcHM7XG4rXHRuZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRztcbitcbitcdGVwID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRlcC1cdTAwM2VuZGV2ID0gbmRldjtcbitcdGVwLVx1MDAzZWRldiA9IGRldjtcbitcdGVwLVx1MDAzZW51bV90eF9xdWV1ZXMgPSBudW1fdHg7XG4rXHRlcC1cdTAwM2VudW1fcnhfcXVldWVzID0gbnVtX3J4O1xuK1x0ZXAtXHUwMDNlbWF4X2ZybV9zaXplID0gVFNOX01BWF9WTEFOX0ZSQU1FX1NJWkU7XG4rXHRtZW1jcHkoZXAtXHUwMDNlcnhfY2hhbl9udW0sIHJ4X2NoYW5fbnVtLCBudW1fcnggKiBzaXplb2YoKnJ4X2NoYW5fbnVtKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBUU05fTUFYX1RYX1FVRVVFOyBpKyspXG4rXHRcdGVwLVx1MDAzZXR4X2RtYV9jaGFuX21hcFtpXSA9IFRTTl9ETUFfQ0hfSU5WQUxJRDtcbitcbitcdHR4Y2ZnX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZW9mX25vZGUsIFwidHgtcXVldWVzLWNvbmZpZ1wiKTtcbitcdGlmICghdHhjZmdfbnApIHtcbitcdFx0cmV0ID0gZGV2X2Vycl9wcm9iZShkZXYsIC1FSU5WQUwsXG4rXHRcdFx0XHQgICAgXCJtaXNzaW5nIHR4LXF1ZXVlcy1jb25maWcgbm9kZVxcblwiKTtcbitcdFx0Z290byBlcnJfZnJlZV9uZGV2O1xuK1x0fVxuK1x0cmV0ID0gZXBfcGFyc2VfdHhfcXVldWVfY29uZmlnKGVwLCB0eGNmZ19ucCwgdHhfcHJlc2VudCk7XG4rXHRvZl9ub2RlX3B1dCh0eGNmZ19ucCk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4rXG4rXHQvKlxuK1x0ICogUmVxdWVzdCBvbmUgRE1BIGNoYW5uZWwgYXQgcHJvYmUgdGltZSB0byByZXNldCB0aGUgY29udHJvbGxlciBhbmQgdG9cbitcdCAqIGdhdGUgb24gdGhlIE1DRE1BIHByb3ZpZGVyIGJlaW5nIGJvdW5kLiBUaGlzIGtlZXBzIC1FUFJPQkVfREVGRVIgaW5cbitcdCAqIHRoZSBwcm9iZSBwYXRoLCBzbyB0aGUgbmV0ZGV2IGlzIG9ubHkgcmVnaXN0ZXJlZCBvbmNlIHRoZSBwcm92aWRlciBpc1xuK1x0ICogYXZhaWxhYmxlIGFuZCBuZG9fb3BlbiBuZXZlciBzZWVzIGEgZGVmZXJyYWwuXG4rXHQgKi9cbitcdHJldCA9IGVwX3Jlc2V0X2RtYV9jb250cm9sbGVyKGVwKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmRldjtcbitcbitcdHJldCA9IG9mX2dldF9tYWNfYWRkcmVzcyhkZXYtXHUwMDNlb2Zfbm9kZSwgbWFjX2FkZHIpO1xuK1x0aWYgKHJldCA9PSAtRVBST0JFX0RFRkVSKSB7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmRldjtcbitcdH0gZWxzZSBpZiAoIXJldCBcdTAwMjZcdTAwMjYgaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWRkcikpIHtcbitcdFx0ZXRoX2h3X2FkZHJfc2V0KG5kZXYsIG1hY19hZGRyKTtcbitcdH0gZWxzZSB7XG4rXHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbitcdFx0ZGV2X2luZm8oZGV2LCBcIm5vIHZhbGlkIE1BQyBpbiBEVCwgdXNpbmcgcmFuZG9tIGFkZHJlc3MgJXBNXFxuXCIsXG4rXHRcdFx0IG5kZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0fVxuK1xuK1x0cmV0ID0gZXBfYWxsb2NfcG9ydF9tZChlcCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIHBlci1wb3J0IG1ldGFkYXRhXFxuXCIpO1xuK1x0XHRnb3RvIGVycl9mcmVlX25kZXY7XG4rXHR9XG4rXG4rXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBlcCk7XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldCBkZXZpY2VcXG5cIik7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbWQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfZnJlZV9tZDpcbitcdGVwX2ZyZWVfcG9ydF9tZChlcCk7XG4rZXJyX2ZyZWVfbmRldjpcbitcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgeGxueF90c25fZXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4re1xuK1x0c3RydWN0IHhsbnhfdHNuX2VwICplcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuK1xuK1x0aWYgKCFlcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0dW5yZWdpc3Rlcl9uZXRkZXYoZXAtXHUwMDNlbmRldik7XG4rXHRlcF9mcmVlX3BvcnRfbWQoZXApO1xuK1x0ZnJlZV9uZXRkZXYoZXAtXHUwMDNlbmRldik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhsbnhfdHNuX2VwX29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJ4bG54LHRzbi1lcC1tYWNcIiB9LFxuK1x0eyB9XG4rfTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4bG54X3Rzbl9lcF9vZl9tYXRjaCk7XG4rXG4rc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4bG54X3Rzbl9lcF9kcml2ZXIgPSB7XG4rXHQucHJvYmVcdD0geGxueF90c25fZXBfcHJvYmUsXG4rXHQucmVtb3ZlXHQ9IHhsbnhfdHNuX2VwX3JlbW92ZSxcbitcdC5kcml2ZXJcdD0ge1xuK1x0XHQubmFtZVx0XHQ9IERSSVZFUl9OQU1FLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGVcdD0geGxueF90c25fZXBfb2ZfbWF0Y2gsXG4rXHR9LFxuK307XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi94aWxpbnhfdHNuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24veGlsaW54X3Rzbl9tYWluLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kMzNhMDBkZDZkMTVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL3hpbGlueF90c25fbWFpbi5jXG5AQCAtMCwwICsxLDEwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rLypcbisgKiBUaW1lIFNlbnNpdGl2ZSBOZXR3b3JraW5nIChUU04pIEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlci5cbisgKlxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX3BsYXRmb3JtLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInhpbGlueF90c24uaFwiXG4rXG4rI2RlZmluZSBUU05fTlVNX0NMT0NLU1x0XHQ2XG4rXG4rLyoqXG4rICogc3RydWN0IHhsbnhfdHNuX2lwIC0gd3JhcHBlci1wcml2YXRlIElQIHN0YXRlXG4rICogQGNsa3M6IGJ1bGstbWFuYWdlZCBJUCBjbG9ja3NcbisgKi9cbitzdHJ1Y3QgeGxueF90c25faXAge1xuK1x0c3RydWN0IGNsa19idWxrX2RhdGEgY2xrc1tUU05fTlVNX0NMT0NLU107XG4rfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRzbl9jbGtfbmFtZXNbVFNOX05VTV9DTE9DS1NdID0ge1xuK1x0XCJndHhcIixcbitcdFwiZ3R4OTBcIixcbitcdFwiaG9zdF9yeGZpZm9cIixcbitcdFwiaG9zdF90eGZpZm9cIixcbitcdFwicmVmXCIsXG4rXHRcInNfYXhpXCIsXG4rfTtcbitcbitzdGF0aWMgdm9pZCB0c25fY2xrX2J1bGtfZGlzYWJsZSh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCB4bG54X3Rzbl9pcCAqdyA9IGRhdGE7XG4rXG4rXHRjbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShUU05fTlVNX0NMT0NLUywgdy1cdTAwM2VjbGtzKTtcbit9XG4rXG4rc3RhdGljIGludCB0c25faXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCB4bG54X3Rzbl9pcCAqdztcbitcdGludCByZXQ7XG4rXG4rXHR3ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp3KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXcpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIFRTTl9OVU1fQ0xPQ0tTOyBpKyspXG4rXHRcdHctXHUwMDNlY2xrc1tpXS5pZCA9IHRzbl9jbGtfbmFtZXNbaV07XG4rXG4rXHRyZXQgPSBkZXZtX2Nsa19idWxrX2dldChkZXYsIFRTTl9OVU1fQ0xPQ0tTLCB3LVx1MDAzZWNsa3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsIFwiZmFpbGVkIHRvIGdldCBjbG9ja3NcXG5cIik7XG4rXG4rXHRyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShUU05fTlVNX0NMT0NLUywgdy1cdTAwM2VjbGtzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCBcImZhaWxlZCB0byBlbmFibGUgY2xvY2tzXFxuXCIpO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgdHNuX2Nsa19idWxrX2Rpc2FibGUsIHcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBkZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRzbl9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwieGxueCx0c24tZW5kcG9pbnQtZXRoZXJuZXQtbWFjLTMuMFwiIH0sXG4rXHR7IH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRzbl9vZl9tYXRjaCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHNuX2RyaXZlciA9IHtcbitcdC5wcm9iZSA9IHRzbl9pcF9wcm9iZSxcbitcdC5kcml2ZXIgPSB7XG4rXHRcdC5uYW1lID0gXCJ4aWxpbngtdHNuXCIsXG4rXHRcdC5vZl9tYXRjaF90YWJsZSA9IHRzbl9vZl9tYXRjaCxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IHRzbl9kcml2ZXJzW10gPSB7XG4rXHRcdTAwMjZ0c25fZHJpdmVyLFxuK1x0XHUwMDI2eGxueF90c25fZXBfZHJpdmVyLFxuK307XG4rXG4rc3RhdGljIGludCBfX2luaXQgeGxueF90c25faW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiBwbGF0Zm9ybV9yZWdpc3Rlcl9kcml2ZXJzKHRzbl9kcml2ZXJzLCBBUlJBWV9TSVpFKHRzbl9kcml2ZXJzKSk7XG4rfVxuK21vZHVsZV9pbml0KHhsbnhfdHNuX2luaXQpO1xuK1xuK3N0YXRpYyB2b2lkIF9fZXhpdCB4bG54X3Rzbl9leGl0KHZvaWQpXG4re1xuK1x0cGxhdGZvcm1fdW5yZWdpc3Rlcl9kcml2ZXJzKHRzbl9kcml2ZXJzLCBBUlJBWV9TSVpFKHRzbl9kcml2ZXJzKSk7XG4rfVxuK21vZHVsZV9leGl0KHhsbnhfdHNuX2V4aXQpO1xuK1xuK01PRFVMRV9BVVRIT1IoXCJTcmluaXZhcyBOZWVsaSBcdTAwM2NzcmluaXZhcy5uZWVsaUBhbWQuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIkFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyB3cmFwcGVyIGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjM2LjA0MDk2ODU5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4OTMzNDk5MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBc3Nlc3NtZW50OiBYaWxpbnggVFNOIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoLCBpbnRyb2R1Y2luZyB0aGUgWGlsaW54IFRTTiBFdGhlcm5ldCBkcml2ZXIsIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJIHNlZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgKGAueWFtbGAgYW5kIGBNQUlOVEFJTkVSU2ApLCBLY29uZmlnIGFuZCBNYWtlZmlsZSBhZGRpdGlvbnMgaW5kaWNhdGluZyBhIG5ldyBgdHNuL2Agc3ViZGlyZWN0b3J5LCBhbmQgdGhlIGNvcmUgZHJpdmVyIGZpbGVzIChgLmNgIGFuZCBgLmhgKS4gVGhpcyBzdWdnZXN0cyBhIG5ldyBmdW5jdGlvbmFsIGJsb2NrLCB3aGljaCBpcyBwcm9taXNpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvciBPcGVuRmlybXdhcmUvRGV2aWNldHJlZSAoXCJ4bG54LHRzbi1lbmRwb2ludC1ldGhlcm5ldC1tYWMtMy4wXCIgYW5kIFwieGxueCx0c24tZXAtbWFjXCIpLiBJdCdzICpkZWZpbml0ZWx5KiBpbnRlcmVzdGluZywgYnV0IG15IGFsYXJtIGJlbGxzIGFyZSBnb2luZyBvZmYgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGBPRl9BRERSRVNTYCBhbmQgYFhJTElOWF9ETUFgLiBUaGF0J3MgdGhlIGtleS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHJlYWNoYWJpbGl0eSB3aXRoaW4gc3RhbmRhcmQgc3l6a2FsbGVyIGVudmlyb25tZW50cy4gQ2FuIEkgdHJpZ2dlciB0aGUgYHhsbnhfdHNuX2VwX2RyaXZlcmAgb3IgYHRzbl9kcml2ZXJgIGluIFFFTVUgKGFtZDY0KSBpbiBHQ0U/IERvZXMgUUVNVSBlbXVsYXRlIFhpbGlueCBUU04gTUFDIG9yIFhpbGlueCBETUE/IE9yIGlzIHRoaXMsIGFzIEkgc3VzcGVjdCwgaGFyZHdhcmUtZGVwZW5kZW50LCBwb3NzaWJseSBhbiBGUEdBL1p5bnFNUCBTb0Mtc3BlY2lmaWMgY29tcG9uZW50PyBJZiBpdCdzIHRoZSBsYXR0ZXIsIHdlJ3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBzaWduaWZpY2FudCBodXJkbGUuXG5cbkkgbmVlZCB0byBleHBsb3JlIGhvdyBwbGF0Zm9ybSBkZXZpY2VzLCBlc3BlY2lhbGx5IHRob3NlIERULWJhc2VkLCBiZWhhdmUgaW4geDg2XzY0IGVudmlyb25tZW50cy4gQ2FuIERldmljZSBUcmVlIG92ZXJsYXlzIGluc3RhbnRpYXRlIHRoaXM/IFdpbGwgSSBuZWVkIHRvIGVtdWxhdGUgdGhlIHBsYXRmb3JtIG9yIHVzZSBhIGRlZGljYXRlZCBoYXJkd2FyZSBzZXR1cD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBvdGhlciBYaWxpbnggRXRoZXJuZXQgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSBPRi0gb3IgRFQtYmFzZWQsIGFyZSBoYW5kbGVkLiBIYXMgYW55b25lIHN1Y2Nlc3NmdWxseSBmdXp6ZWQgc2ltaWxhciBkcml2ZXJzP1xuXG5JIG5lZWQgdG8gYXBwbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBJcyB0aGlzIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZT8gSSBuZWVkIHRvIGtub3cgaWYgdGhlIGhhcmR3YXJlIGlzbid0IGVtdWxhdGVkIG9yIGlmIHRoZSBoYXJkd2FyZSBpcyBuZWNlc3NhcnkuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIFwidmVuZG9yLXNwZWNpZmljLi4ucmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIG1ha2VzIG1lIHdvcnJpZWQuIEkgYW0gY29uY2VybmVkIHRoaXMgaXMgc2ltaWxhciB0byB0aGF0LiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUsIHRoaXMgaXNuJ3QgYW4gXCJ1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aFwiLCBpLmUuIHRoYXQgaXQgaXNuJ3Qgb25seSBjYWxsZWQgZHVyaW5nIHBoeXNpY2FsIGhvdC11bnBsdWcuXG5cbk15IG5leHQgc3RlcHMgaW52b2x2ZSBncmVwcGluZyB0aGUga2VybmVsIHNvdXJjZSBmb3IgYFhJTElOWF9ETUFgLCBgT0ZfQUREUkVTU2AsIGFuZCBvdGhlciBYaWxpbnggRXRoZXJuZXQgZHJpdmVyIGltcGxlbWVudGF0aW9ucywgYW5kIHRoZW4gY2hlY2tpbmcgd2hhdCdzIGZlYXNpYmxlIGdpdmVuIHRoZSB0eXBpY2FsIHN5emthbGxlciBsaW1pdGF0aW9ucy4gSXMgaXQgYSAqZ28qIG9yIGEgKm5vLWdvKj9cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwMjMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo0MS45MzQzMjE1NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MDI0NTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWElMSU5YX0RNQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RtYS9LY29uZmlnPTY3ND1jb25maWcgWEdFTkVfRE1BXFxuLS1cXG5kcml2ZXJzL2RtYS9LY29uZmlnLTY4Mi1cXG5kcml2ZXJzL2RtYS9LY29uZmlnOjY4Mzpjb25maWcgWElMSU5YX0RNQVxcbmRyaXZlcnMvZG1hL0tjb25maWctNjg0LVxcdHRyaXN0YXRlIFxcXCJYaWxpbnggQVhJIERNQVMgRW5naW5lXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo0My41ODQ1NzI3MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzIwNDM4NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIGEgRE1BIENvbmZpZ3VyYXRpb24gQ29uY2VybioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIERNQSBjb25maWd1cmF0aW9uLiBJJ20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBkcml2ZXJzL2RtYS9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCdzIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDY4My4gVGhhdCBhcmVhIGxpa2VseSBob2xkcyBzb21lIGNydWNpYWwgZGVmaW5pdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgRE1BIGlzc3VlIEknbSBkZWFsaW5nIHdpdGguIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCBvciBjb25maWd1cmVkIHRoZXJlLiBJIGJldCBpdCB3aWxsIHByb3ZpZGUgdGhlIGtleSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjM0MzQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo0NS4zMDUwMTUwMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kbWEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0XFx0aGVscFxcbiA2ODE6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFQTSBYLUdlbmUgU29DIERNQSBlbmdpbmUuXFxuIDY4MjpcXHRcXG4gNjgzOlxcdGNvbmZpZyBYSUxJTlhfRE1BXFxuIDY4NDpcXHRcXHR0cmlzdGF0ZSBcXFwiWGlsaW54IEFYSSBETUFTIEVuZ2luZVxcXCJcXG4gNjg1OlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuIDY4NjpcXHRcXHRzZWxlY3QgRE1BX0VOR0lORVxcbiA2ODc6XFx0XFx0aGVscFxcbiA2ODg6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgWGlsaW54IEFYSSBWRE1BIFNvZnQgSVAuXFxuIDY4OTpcXHRcXG4gNjkwOlxcdFxcdCAgQVhJIFZETUEgZW5naW5lIHByb3ZpZGVzIGhpZ2gtYmFuZHdpZHRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzXFxuIDY5MTpcXHRcXHQgIGJldHdlZW4gbWVtb3J5IGFuZCBBWEk0LVN0cmVhbSB2aWRlbyB0eXBlIHRhcmdldFxcbiA2OTI6XFx0XFx0ICBwZXJpcGhlcmFscyBpbmNsdWRpbmcgcGVyaXBoZXJhbHMgd2hpY2ggc3VwcG9ydCBBWEk0LVxcbiA2OTM6XFx0XFx0ICBTdHJlYW0gVmlkZW8gUHJvdG9jb2wuICBJdCBoYXMgdHdvIHN0cmVhbSBpbnRlcmZhY2VzL1xcbiA2OTQ6XFx0XFx0ICBjaGFubmVscywgTWVtb3J5IE1hcHBlZCB0byBTdHJlYW0gKE1NMlMpIGFuZCBTdHJlYW0gdG9cXG4gNjk1OlxcdFxcdCAgTWVtb3J5IE1hcHBlZCAoUzJNTSkgZm9yIHRoZSBkYXRhIHRyYW5zZmVycy5cXG4gNjk2OlxcdFxcdCAgQVhJIENETUEgZW5naW5lIHByb3ZpZGVzIGhpZ2gtYmFuZHdpZHRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzXFxuIDY5NzpcXHRcXHQgIGJldHdlZW4gYSBtZW1vcnktbWFwcGVkIHNvdXJjZSBhZGRyZXNzIGFuZCBhIG1lbW9yeS1tYXBwZWRcXG4gNjk4OlxcdFxcdCAgZGVzdGluYXRpb24gYWRkcmVzcy5cXG4gNjk5OlxcdFxcdCAgQVhJIERNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggb25lIGRpbWVuc2lvbmFsIGRpcmVjdFxcbiA3MDA6XFx0XFx0ICBtZW1vcnkgYWNjZXNzIGJldHdlZW4gbWVtb3J5IGFuZCBBWEk0LVN0cmVhbSB0YXJnZXQgcGVyaXBoZXJhbHMuXFxuIDcwMTpcXHRcXHQgIEFYSSBNQ0RNQSBlbmdpbmUgcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggZGlyZWN0IG1lbW9yeSBhY2Nlc3NcXG4gNzAyOlxcdFxcdCAgYmV0d2VlbiBtZW1vcnkgYW5kIEFYSTQtU3RyZWFtIHRhcmdldCBwZXJpcGhlcmFscy4gSXQgcHJvdmlkZXNcXG4gNzAzOlxcdFxcdCAgdGhlIHNjYXR0ZXIgZ2F0aGVyIGludGVyZmFjZSB3aXRoIG11bHRpcGxlIGNoYW5uZWxzIGluZGVwZW5kZW50XFxuIDcwNDpcXHRcXHQgIGNvbmZpZ3VyYXRpb24gc3VwcG9ydC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6MTc6NDUuMzA1MTQwNTM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1NjY2MjgxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhlIHN0YXR1cyBvZiBgQ09ORklHX09GX0FERFJFU1NgLiBDYW4gd2UgcmVhbGlzdGljYWxseSBlbmFibGUgYENPTkZJR19PRl9BRERSRVNTYCBvbiBhbiB4ODZfNjQgYXJjaGl0ZWN0dXJlPyBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24uIFRvIGFuc3dlciB0aGF0IGRlZmluaXRpdmVseSwgSSBuZWVkIHRvIGtub3cgd2hlcmUgYE9GX0FERFJFU1NgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgaXRzIG9yaWdpbnMgYW5kIGRlcGVuZGVuY2llcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBhcHBsaWNhYmlsaXR5IGluIHRoaXMgY29udGV4dC4gTGV0J3MgZ2V0IHRvIHRoZSByb290IG9mIGl0cyBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAyMiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6MTc6NDcuMDYxODA2NDE3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTExMjg1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9GX0FERFJFU1NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTgzPWNvbmZpZyBPRl9EWU5BTUlDXFxuLS1cXG5kcml2ZXJzL29mL0tjb25maWctOTAtXFxuZHJpdmVycy9vZi9LY29uZmlnOjkxOmNvbmZpZyBPRl9BRERSRVNTXFxuZHJpdmVycy9vZi9LY29uZmlnLTkyLVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjI6MTc6NDguNzcyOTM5NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUwMzI4NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL29mL0tjb25maWdgIGZpbGUuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgYXJvdW5kIGxpbmUgOTEsIG9yIGF0IGxlYXN0IGluIHRoYXQgdmljaW5pdHkuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHNvbWV0aGluZyByZWxhdGVkIHRvIGRldmljZSB0cmVlIGNvbmZpZ3VyYXRpb24gb3IgcG90ZW50aWFsbHkgYSBzcGVjaWZpYyBkcml2ZXIncyBidWlsZCBvcHRpb25zIG1pZ2h0IGJlIGRlZmluZWQgdGhlcmUuIEl0J3MgYSBodW5jaCBiYXNlZCBvbiBjb21tb24gcGF0dGVybnMgaW4gZW1iZWRkZWQgc3lzdGVtcyBkZXZlbG9wbWVudCwgYnV0IEkgbmVlZCB0byBjb25maXJtIGl0LiBMZXQncyBzZWUgd2hhdCBsaWVzIHdpdGhpbiB0aG9zZSBsaW5lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyNzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo1MC41MjMyNzEwNzNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9vZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcbiAgODE6XFx0IyBIYXJkbHkgYW55IHBsYXRmb3JtcyBuZWVkIHRoaXMuICBJdCBpcyBzYWZlIHRvIHNlbGVjdCwgYnV0IG9ubHkgZG8gc28gaWYgeW91XFxuICA4MjpcXHQjIG5lZWQgaXQuXFxuICA4MzpcXHRjb25maWcgT0ZfRFlOQU1JQ1xcbiAgODQ6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgZHluYW1pYyBkZXZpY2UgdHJlZXNcXFwiIGlmIE9GX1VOSVRURVNUXFxuICA4NTpcXHRcXHRzZWxlY3QgT0ZfS09CSlxcbiAgODY6XFx0XFx0aGVscFxcbiAgODc6XFx0XFx0ICBPbiBzb21lIHBsYXRmb3JtcywgdGhlIGRldmljZSB0cmVlIGNhbiBiZSBtYW5pcHVsYXRlZCBhdCBydW50aW1lLlxcbiAgODg6XFx0XFx0ICBXaGlsZSB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IG9uIHN1Y2ggcGxhdGZvcm1zLCB5b3VcXG4gIDg5OlxcdFxcdCAgY2FuIGVuYWJsZSBpdCBtYW51YWxseSB0byBpbXByb3ZlIGRldmljZSB0cmVlIHVuaXQgdGVzdCBjb3ZlcmFnZS5cXG4gIDkwOlxcdFxcbiAgOTE6XFx0Y29uZmlnIE9GX0FERFJFU1NcXG4gIDkyOlxcdFxcdGRlZl9ib29sIHlcXG4gIDkzOlxcdFxcdGRlcGVuZHMgb24gIVNQQVJDIFxcdTAwMjZcXHUwMDI2IChIQVNfSU9NRU0gfHwgVU1MKVxcbiAgOTQ6XFx0XFxuICA5NTpcXHRjb25maWcgT0ZfSVJRXFxuICA5NjpcXHRcXHRkZWZfYm9vbCB5XFxuICA5NzpcXHRcXHRkZXBlbmRzIG9uICFTUEFSQyBcXHUwMDI2XFx1MDAyNiBJUlFfRE9NQUlOXFxuICA5ODpcXHRcXG4gIDk5OlxcdGNvbmZpZyBPRl9SRVNFUlZFRF9NRU1cXG4gMTAwOlxcdFxcdGRlZl9ib29sIE9GX0VBUkxZX0ZMQVRUUkVFXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGNvbmZpZyBPRl9SRVNPTFZFXFxuIDEwMzpcXHRcXHRib29sXFxuIDEwNDpcXHRcXG4gMTA1OlxcdGNvbmZpZyBPRl9PVkVSTEFZXFxuIDEwNjpcXHRcXHRib29sIFxcXCJEZXZpY2UgVHJlZSBvdmVybGF5c1xcXCJcXG4gMTA3OlxcdFxcdHNlbGVjdCBPRl9EWU5BTUlDXFxuIDEwODpcXHRcXHRzZWxlY3QgT0ZfRkxBVFRSRUVcXG4gMTA5OlxcdFxcdHNlbGVjdCBPRl9SRVNPTFZFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjUwLjUyMzM0MDczM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MjI5NzU2MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBOZWdhdGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGB4bG54X3RzbmAgY29tcG9uZW50IGlzIHNvbWV0aGluZyB3ZSBjYW4gZWZmZWN0aXZlbHkgZnV6ei4gRmlyc3QsIGlzIGl0IGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljIHRvIGhhcmR3YXJlPyAgWWVzLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgYW4gQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgb24gYW4gRlBHQSBvciBTb0MuIFNvLCBpdCBkZWZpbml0ZWx5IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlOiBhbiBGUEdBIGFuZCByZWxhdGVkIElQIGJsb2NrcywgaW5jbHVkaW5nIFhpbGlueCdzIE1DRE1BLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlIGRyaXZlciBkb2VzLiBGcm9tIHRoZSBjb2RlLCBpdCBwcm9iZXMgZm9yIGNsb2NrcyBhbmQgcG9wdWxhdGVzIHN1YmRldmljZXMgYW5kIGFsc28gcmVxdWVzdHMgYW5kIGNvbmZpZ3VyZXMgRE1BIGNoYW5uZWxzLCBpbnRlcmFjdGluZyB3aXRoIHRoZSBYaWxpbnggVkRNQS9NQ0RNQS5cblxuTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGNhbiB0aGlzIGhhcmR3YXJlIGJlIGVtdWxhdGVkIGluIG91ciBzdGFuZGFyZCBzeXprYWxsZXIgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgUUVNVSBvciBHQ0UgVk1zIG9uIGFtZDY0PyBOby4gVGhlcmUncyBubyBlbXVsYXRpb24gb2YgdGhpcyBYaWxpbngtc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgdGhlIFRTTiBGUEdBIE1BQyBvciBNQ0RNQSwgaW4gdGhvc2UgZW52aXJvbm1lbnRzLlxuXG5MZXQncyBjb25zdWx0IHRoZSBzeXprYWxsZXIgY3JpdGVyaWEgcmVnYXJkaW5nIHdoZW4gKm5vdCogdG8gZnV6ei4gIEl0J3MgY2xlYXIgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiB0aGF0IHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSBmYWxsIHVuZGVyIHRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5IGFuZCB0aGF0IHN1Y2ggZHJpdmVycyBzaG91bGRuJ3QgYmUgZnV6emVkLiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQhXG5cblNvLCBkb2VzIHRoaXMgZHJpdmVyIGludGVyYWN0IHdpdGggYW55IHZpcnR1YWwgYnVzZXM/IE5vLiBJdCdzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBwcm92aWRlZCBieSBYaWxpbnguIEl0J3Mgbm90IHJlYWNoYWJsZSB2aWEgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBvciBzb2NrZXRzLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgdGhlIHNvbGUgZXh0ZW50IG9mIHRoZSBjaGFuZ2UuIFRoZSBkb2N1bWVudGF0aW9uIGNoYW5nZXMgbG9vayBsaWtlIGRvY3VtZW50YXRpb24sIEtjb25maWcsIGFuZCBNYWtlZmlsZSB1cGRhdGVzIGFsb25nc2lkZSB0aGUgbmV3IGRyaXZlciBmaWxlczogYHhsbnhfdHNuLmhgLCBgeGxueF90c25fZXAuY2AsIGB4bG54X3Rzbl9tYWluLmNgLiBFdmVyeXRoaW5nIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuL2AgZGlyZWN0b3J5LCBpbmNsdWRpbmcgRGV2aWNlIFRyZWUgYmluZGluZ3MuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBkcml2ZXIgaXMgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGhhcmR3YXJlIHVuYXZhaWxhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBpdCdzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgdmVuZG9yLXNwZWNpZmljIGFuZCByZXF1aXJlcyBhbiBGUEdBL1NvQy4gIFRodXMsIHRoaXMgY29kZSBpcyBub3Qgd29ydGggZnV6emluZy4gSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgZmFsc2VgIGFuZCBwcm92aWRlIHRoZSByZWFzb25pbmcuIEkgd2lsbCBzZXQgdGhlIGZpZWxkcyByZXF1aXJlZCBieSBgc2V0LXJlc3VsdHNgIGFzOlxuLSBgV29ydGhGdXp6aW5nYDogZmFsc2Vcbi0gYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRldmljZSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gKFRpbWUtU2Vuc2l0aXZlIE5ldHdvcmtpbmcpIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChgZHJpdmVycy9uZXQvZXRoZXJuZXQveGlsaW54L3Rzbi9gKS4gVGhpcyBkcml2ZXIgdGFyZ2V0cyB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXG4tIGBGb2N1c1N5bWJvbHNgOiBbXSAoZW1wdHkgbGlzdClcbi0gYEVuYWJsZUNvbmZpZ3NgOiBbXSAoZW1wdHkgbGlzdClcblxuTm93LCBsZXQncyBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MjksIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIyOjE3OjU3Ljc1MzEwMDQ3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgcGxhdGZvcm0gZHJpdmVyIGFuZCBEZXZpY2UgVHJlZSBiaW5kaW5ncyBmb3IgdGhlIEFNRC9YaWxpbnggVFNOIEVuZHBvaW50IEV0aGVybmV0IE1BQyBJUCBjb3JlIChkcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngvdHNuLykuIFRoaXMgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB2ZW5kb3Itc3BlY2lmaWMgRlBHQS9Tb0MgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpIG9uIGFtZDY0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBwbGF0Zm9ybSBkcml2ZXIgYW5kIERldmljZSBUcmVlIGJpbmRpbmdzIGZvciB0aGUgQU1EL1hpbGlueCBUU04gRW5kcG9pbnQgRXRoZXJuZXQgTUFDIElQIGNvcmUgKGRyaXZlcnMvbmV0L2V0aGVybmV0L3hpbGlueC90c24vKS4gVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHZlbmRvci1zcGVjaWZpYyBGUEdBL1NvQyBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSkgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMjoxNzo1Ny43NTMxMzQ4NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowsq8lj[1] Phase: Running StartedAt: 2026-09-08 22:18:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsq8lj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 22:18:11 +0000 UTC FinishedAt: 2026-09-08 22:18:16 +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,}