Name: series-workflow7vpsw Phase: Failed StartedAt: 2026-09-09 15:36:33 +0000 UTC FinishedAt: 2026-09-09 15:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vpsw[0] Phase: Succeeded StartedAt: 2026-09-09 15:36:33 +0000 UTC FinishedAt: 2026-09-09 15:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vpsw[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 15:36:33 +0000 UTC FinishedAt: 2026-09-09 15:38:44 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcy9TeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyAoc3RtbWFjKSBkcml2ZXIsIHNwZWNpZmljYWxseSBUQyBtcXByaW8gYW5kIHRhcHJpbyBvZmZsb2FkIGhhbmRsaW5nIGluIHN0bW1hY190Yy5jLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBTb0Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5NDZmZDNkZGNmMGFkMDIwY2Y1NTZlMGIzNjdjZDdiZTBlYzZhNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggMDRkYWZlYzAyMWI0Zi4uOTMxNGJjYjg1YzIyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtNDk0LDcgJiM0Mzs0OTQsNyBAQCBzdHJ1Y3Qgc3RtbWFjX29wcyB7XG4gI2RlZmluZSBzdG1tYWNfc2V0X2FycF9vZmZsb2FkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBtYWMsIHNldF9hcnBfb2ZmbG9hZCwgX19hcmdzKVxuICNkZWZpbmUgc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbi1cdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgbWFjLCBmcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MsIF9fYXJncylcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKVxuIFxuIC8qIFBUUCBhbmQgSFcgVGltZXIgaGVscGVycyAqL1xuIHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbmluZGV4IDE0Y2FiZTc2ZTUzZWMuLjdkNzNiMGMxNmY1MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbkBAIC05NzAsNyAmIzQzOzk3MCw3IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBxb3B0LVx1MDAzZW1xcHJpby5leHRhY2s7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lLCBjdXJyZW50X3RpbWUsIHFvcHRfdGltZTtcbiBcdGt0aW1lX3QgY3VycmVudF90aW1lX25zO1xuLVx0aW50IGksIHJldCA9IDA7XG4mIzQzO1x0aW50IGVyciwgaSwgcmV0ID0gMDtcbiBcdHU2NCBjdHI7XG4gXG4gXHRpZiAocW9wdC1cdTAwM2ViYXNlX3RpbWUgXHUwMDNjIDApXG5AQCAtMTEyMCw5ICYjNDM7MTEyMCw5IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWVzdF9sb2NrKTtcbiBcdH1cbiBcbi1cdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgcHJpdi1cdTAwM2VkZXYsIGV4dGFjaywgMCk7XG4mIzQzO1x0ZXJyID0gc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBwcml2LVx1MDAzZWRldiwgZXh0YWNrLCAwKTtcbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIHFvcHQtXHUwMDNlY21kID09IFRBUFJJT19DTURfREVTVFJPWSA/IGVyciA6IHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGNfdGFwcmlvX3N0YXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbkBAIC0xMjM3LDU4ICYjNDM7MTIzNyw5NyBAQCBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXRfbmRldl90Y3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG50YyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfdGNfdHhxICp0Y190b190eHEpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4mIzQzO1x0aWYgKCFudGMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnRjKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTE2IGNvdW50LCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdFx0Y291bnQgPSB0Y190b190eHFbaV0uY291bnQ7XG4mIzQzO1x0XHRvZmZzZXQgPSB0Y190b190eHFbaV0ub2Zmc2V0O1xuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCBpLCBjb3VudCwgb2Zmc2V0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN0bW1hY19yZXNldF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4gXHRuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcbi1cdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcbiB9XG4gXG4gc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCBuZGV2X251bV90eF9xdWV1ZXMsIG51bV90eF9xdWV1ZXMgPSAwO1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfdGNfdHhxIG5kZXZfdGNfdG9fdHhxW1RDX01BWF9RVUVVRV07XG4mIzQzO1x0c3RydWN0IG5ldGRldl90Y190eHEgdGNfdG9fdHhxW1RDX01BWF9RVUVVRV0gPSB7fTtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4gXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbi1cdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4tXHR1MzIgbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKCFudW1fdGMpIHtcbi1cdFx0c3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbiYjNDM7XHR1OCBuZGV2X3ByaW9fdGNfbWFwW1RDX0JJVE1BU0sgJiM0MzsgMV07XG4mIzQzO1x0aW50IGksIGVyciwgbmRldl9udGM7XG4gXG4tXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKVxuJiM0MztcdFx0cmV0dXJuIHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcbiBcbi1cdGZvciAodTMyIHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4tXHRcdG9mZnNldCA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbi1cdFx0Y291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbi1cdFx0bnVtX3N0YWNrX3R4X3F1ZXVlcyAmIzQzOz0gY291bnQ7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBBUlJBWV9TSVpFKHRjX3RvX3R4cSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0ZXJyID0gbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCB0YywgY291bnQsIG9mZnNldCk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1x0Lyogc2F2ZSBjdXJyZW50IHRjIHZhbHVlcyBmb3IgcmVzZXQgKi9cbiYjNDM7XHRuZGV2X250YyA9IG5ldGRldl9nZXRfbnVtX3RjKG5kZXYpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobmRldi1cdTAwM2V0Y190b190eHEpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5kZXZfdGNfdG9fdHhxW2ldLmNvbWJpbmVkID1cbiYjNDM7XHRcdFx0UkVBRF9PTkNFKG5kZXYtXHUwMDNldGNfdG9fdHhxW2ldLmNvbWJpbmVkKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5kZXZfcHJpb190Y19tYXBbaV0gPSBSRUFEX09OQ0UobmRldi1cdTAwM2VwcmlvX3RjX21hcFtpXSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGNfdG9fdHhxW2ldID0gKHN0cnVjdCBuZXRkZXZfdGNfdHhxKSB7XG4mIzQzO1x0XHRcdC5jb3VudCA9IHFvcHQtXHUwMDNlY291bnRbaV0sXG4mIzQzO1x0XHRcdC5vZmZzZXQgPSBxb3B0LVx1MDAzZW9mZnNldFtpXSxcbiYjNDM7XHRcdH07XG4mIzQzO1x0XHRudW1fdHhfcXVldWVzICYjNDM7PSBxb3B0LVx1MDAzZWNvdW50W2ldO1xuIFx0fVxuIFxuLVx0ZXJyID0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBudW1fc3RhY2tfdHhfcXVldWVzKTtcbiYjNDM7XHRlcnIgPSBzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIHFvcHQtXHUwMDNlbnVtX3RjLCB0Y190b190eHEpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X3RjO1xuJiM0MztcbiYjNDM7XHRuZGV2X251bV90eF9xdWV1ZXMgPSBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbiYjNDM7XHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV90eF9xdWV1ZXMpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X3RjO1xuIFxuIFx0ZXJyID0gc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssXG4gXHRcdFx0XHRcdCAgICAgIG1xcHJpby1cdTAwM2VwcmVlbXB0aWJsZV90Y3MpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X251bV90eF9xdWV1ZXM7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVzZXRfdGM6XG4tXHRzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XG4mIzQzO2Vycm9yX3Jlc2V0X251bV90eF9xdWV1ZXM6XG4mIzQzO1x0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBuZGV2X251bV90eF9xdWV1ZXMpO1xuJiM0MztlcnJvcl9yZXNldF90YzpcbiYjNDM7XHRzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIG5kZXZfbnRjLCBuZGV2X3RjX3RvX3R4cSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuZGV2X3ByaW9fdGNfbWFwKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3ByaW9fdGNfbWFwKG5kZXYsIGksIG5kZXZfcHJpb190Y19tYXBbaV0pO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcy9TeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyAoc3RtbWFjKSBkcml2ZXIsIHNwZWNpZmljYWxseSBUQyBtcXByaW8gYW5kIHRhcHJpbyBvZmZsb2FkIGhhbmRsaW5nIGluIHN0bW1hY190Yy5jLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBTb0Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5NDZmZDNkZGNmMGFkMDIwY2Y1NTZlMGIzNjdjZDdiZTBlYzZhNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCmluZGV4IDA0ZGFmZWMwMjFiNGYuLjkzMTRiY2I4NWMyMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKQEAgLTQ5NCw3ICYjNDM7NDk0LDcgQEAgc3RydWN0IHN0bW1hY19vcHMgewogI2RlZmluZSBzdG1tYWNfc2V0X2FycF9vZmZsb2FkKF9fcHJpdiwgX19hcmdzLi4uKSBcCiAJc3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBtYWMsIHNldF9hcnBfb2ZmbG9hZCwgX19hcmdzKQogI2RlZmluZSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKF9fcHJpdiwgX19hcmdzLi4uKSBcCi0Jc3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKQomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKQogCiAvKiBQVFAgYW5kIEhXIFRpbWVyIGhlbHBlcnMgKi8KIHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwppbmRleCAxNGNhYmU3NmU1M2VjLi43ZDczYjBjMTZmNTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwpAQCAtOTcwLDcgJiM0Mzs5NzAsNyBAQCBzdGF0aWMgaW50IHRjX3RhcHJpb19jb25maWd1cmUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IHFvcHQtJmd0O21xcHJpby5leHRhY2s7CiAJc3RydWN0IHRpbWVzcGVjNjQgdGltZSwgY3VycmVudF90aW1lLCBxb3B0X3RpbWU7CiAJa3RpbWVfdCBjdXJyZW50X3RpbWVfbnM7Ci0JaW50IGksIHJldCA9IDA7CiYjNDM7CWludCBlcnIsIGksIHJldCA9IDA7CiAJdTY0IGN0cjsKIAogCWlmIChxb3B0LSZndDtiYXNlX3RpbWUgJmx0OyAwKQpAQCAtMTEyMCw5ICYjNDM7MTEyMCw5IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2VzdF9sb2NrKTsKIAl9CiAKLQlzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIHByaXYtJmd0O2RldiwgZXh0YWNrLCAwKTsKJiM0MzsJZXJyID0gc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBwcml2LSZndDtkZXYsIGV4dGFjaywgMCk7CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gcW9wdC0mZ3Q7Y21kID09IFRBUFJJT19DTURfREVTVFJPWSA/IGVyciA6IHJldDsKIH0KIAogc3RhdGljIHZvaWQgdGNfdGFwcmlvX3N0YXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKQEAgLTEyMzcsNTggJiM0MzsxMjM3LDk3IEBAIHN0YXRpYyBpbnQgdGNfcXVlcnlfY2FwcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJfQogfQogCi1zdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXRfbmRldl90Y3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG50YywKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGRldl90Y190eHEgKnRjX3RvX3R4cSkKJiM0Mzt7CiYjNDM7CWludCBpLCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJaWYgKCFudGMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnRjKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudGM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MTYgY291bnQsIG9mZnNldDsKJiM0MzsKJiM0MzsJCWNvdW50ID0gdGNfdG9fdHhxW2ldLmNvdW50OwomIzQzOwkJb2Zmc2V0ID0gdGNfdG9fdHhxW2ldLm9mZnNldDsKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgY291bnQsIG9mZnNldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAluZXRkZXZfcmVzZXRfdGMobmRldik7CiAJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlKTsKLQlzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywgMCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywgMCk7CiB9CiAKIHN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKIHsKJiM0MzsJdW5zaWduZWQgaW50IG5kZXZfbnVtX3R4X3F1ZXVlcywgbnVtX3R4X3F1ZXVlcyA9IDA7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdGNfdHhxIG5kZXZfdGNfdG9fdHhxW1RDX01BWF9RVUVVRV07CiYjNDM7CXN0cnVjdCBuZXRkZXZfdGNfdHhxIHRjX3RvX3R4cVtUQ19NQVhfUVVFVUVdID0ge307CiAJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLSZndDtleHRhY2s7CiAJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7Ci0JdTMyIG9mZnNldCwgY291bnQsIG51bV9zdGFja190eF9xdWV1ZXMgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi0mZ3Q7ZGV2OwotCXUzMiBudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7Ci0JaW50IGVycjsKLQotCWlmICghbnVtX3RjKSB7Ci0JCXN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTsKLQkJcmV0dXJuIDA7Ci0JfQomIzQzOwl1OCBuZGV2X3ByaW9fdGNfbWFwW1RDX0JJVE1BU0sgJiM0MzsgMV07CiYjNDM7CWludCBpLCBlcnIsIG5kZXZfbnRjOwogCi0JZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnVtX3RjKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwlpZiAoIXFvcHQtJmd0O251bV90YykKJiM0MzsJCXJldHVybiBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7CiAKLQlmb3IgKHUzMiB0YyA9IDA7IHRjICZsdDsgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKLQkJb2Zmc2V0ID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKLQkJY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107Ci0JCW51bV9zdGFja190eF9xdWV1ZXMgJiM0Mzs9IGNvdW50OwomIzQzOwlpZiAocW9wdC0mZ3Q7bnVtX3RjICZndDsgQVJSQVlfU0laRSh0Y190b190eHEpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZXJyID0gbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCB0YywgY291bnQsIG9mZnNldCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9yZXNldF90YzsKJiM0MzsJLyogc2F2ZSBjdXJyZW50IHRjIHZhbHVlcyBmb3IgcmVzZXQgKi8KJiM0MzsJbmRldl9udGMgPSBuZXRkZXZfZ2V0X251bV90YyhuZGV2KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUobmRldi0mZ3Q7dGNfdG9fdHhxKTsgaSYjNDM7JiM0MzspCiYjNDM7CQluZGV2X3RjX3RvX3R4cVtpXS5jb21iaW5lZCA9CiYjNDM7CQkJUkVBRF9PTkNFKG5kZXYtJmd0O3RjX3RvX3R4cVtpXS5jb21iaW5lZCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5kZXZfcHJpb190Y19tYXBbaV0gPSBSRUFEX09OQ0UobmRldi0mZ3Q7cHJpb190Y19tYXBbaV0pOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGNfdG9fdHhxW2ldID0gKHN0cnVjdCBuZXRkZXZfdGNfdHhxKSB7CiYjNDM7CQkJLmNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJLm9mZnNldCA9IHFvcHQtJmd0O29mZnNldFtpXSwKJiM0MzsJCX07CiYjNDM7CQludW1fdHhfcXVldWVzICYjNDM7PSBxb3B0LSZndDtjb3VudFtpXTsKIAl9CiAKLQllcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV9zdGFja190eF9xdWV1ZXMpOwomIzQzOwllcnIgPSBzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIHFvcHQtJmd0O251bV90YywgdGNfdG9fdHhxKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfcmVzZXRfdGM7CiYjNDM7CiYjNDM7CW5kZXZfbnVtX3R4X3F1ZXVlcyA9IG5kZXYtJmd0O3JlYWxfbnVtX3R4X3F1ZXVlczsKJiM0MzsJZXJyID0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBudW1fdHhfcXVldWVzKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXNldF90YzsKJiM0MzsJCWdvdG8gZXJyb3JfcmVzZXRfdGM7CiAKIAllcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywKIAkJCQkJICAgICAgbXFwcmlvLSZndDtwcmVlbXB0aWJsZV90Y3MpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX3Jlc2V0X3RjOwomIzQzOwkJZ290byBlcnJvcl9yZXNldF9udW1fdHhfcXVldWVzOwogCiAJcmV0dXJuIDA7CiAKLWVycl9yZXNldF90YzoKLQlzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7CiYjNDM7ZXJyb3JfcmVzZXRfbnVtX3R4X3F1ZXVlczoKJiM0MzsJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBuZGV2X251bV90eF9xdWV1ZXMpOwomIzQzO2Vycm9yX3Jlc2V0X3RjOgomIzQzOwlzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIG5kZXZfbnRjLCBuZGV2X3RjX3RvX3R4cSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfcHJpb190Y19tYXAobmRldiwgaSwgbmRldl9wcmlvX3RjX21hcFtpXSk7CiAKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gSSBzZWUgdGhhdCB0aGUgbW9kaWZpY2F0aW9ucyB0b3VjaCB0d28gZmlsZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNgLiBSaWdodCBhd2F5LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaW5naW5nOyAmIzM0O3N0bW1hYyYjMzQ7IOKAkyB0aGF0JiMzOTtzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciwgcmlnaHQ/CgpOb3csIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgaGFyZHdhcmUgc29tZXRoaW5nIEkgY2FuIGVhc2lseSB0ZXN0IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gT3IgaXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUsIGEgcGxhdGZvcm0gZGV2aWNlLCBvciBhIFBDSSBkZXZpY2U/IEkgbmVlZCB0byBrbm93IGhvdyBlYXNpbHkgSSBjYW4gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudCB0byBydW4gc29tZSBxdWljayBzbW9rZSB0ZXN0cy4KCkxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuLCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBzdG1tYWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgaW5zdGFudGlhdGVkIGFuZCB1c2VkLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGdyZXBwZXIgdG8gbG9vayBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gc3RhcnQsIHRvIGNoZWNrIGZvciBQQ0kgSURzIG9yIHBsYXRmb3JtIGRldmljZXMuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQsIEkgY2FuIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTE4PWlmIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjIwOmNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mjk6Y29uZmlnIFNUTU1BQ19QTEFURk9STVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzcxPWVuZGlmICMgU1RNTUFDX1BMQVRGT1JNXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MzczOmNvbmZpZyBTVE1NQUNfTElCUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3NC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBDSSBidXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgc3RtbWFjYCBFbXVsYXRpb24gaW4gU3RhbmRhcmQgUUVNVS9HQ0UgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGlzIGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUvR0NFLCBvciBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDIG9yIFNUTWljcm9lbGVjdHJvbmljcyBFdGhlcm5ldCkuIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGV2ZW4gcmVhY2ggYW55IGNvZGUgcmVsYXRlZCB0byBgc3RtbWFjYCB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLgoKRmlyc3QsIGEgcXVpY2sgY2hlY2s6IGRvZXMgc3RhbmRhcmQgUUVNVSBhbWQ2NCBldmVuIGVtdWxhdGUgYHN0bW1hY2Agb3IgYGR3bWFjYD8gRnJvbSBteSBwYXN0IHdvcmssIEkgcmVjYWxsIHRoYXQgc29tZSBvZiB0aGVzZSBtb3JlIHNwZWNpYWxpemVkIE5JQyBkcml2ZXJzIGFyZSBvZnRlbiB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlbiYjMzk7dCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwLgoKTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGNvbmZpcm1zIG15IHN1c3BpY2lvbjogc2VjdGlvbiAyIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGxpa2UgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVIGRyaXZlcnMgKGluY2x1ZGluZyBleGFtcGxlcyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWApIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMuIFRoZXNlIGFyZSAqbm90KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBBbmQgc2VjdGlvbiAxIHN0YXRlczogJiMzNDtJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQuJiMzNDsKClNvLCB3aGF0ICppcyogZW11bGF0ZWQgaW4gUUVNVT8gSSBrbm93IHRoYXQsIGluIHN0YW5kYXJkIFFFTVUgYW1kNjQsIHdlIHR5cGljYWxseSBzZWU6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYHZpcnRpby1uZXRgLCBgcnRsODEzOWAsIGBuZTJrX3BjaWAsIGBwY25ldGAsIGB2bXhuZXQzYCwgYW5kIGB1c2ItbmV0YC91c2IgZ2FkZ2V0cy4gQnV0IG5vIGBzdG1tYWNgLgoKT2theSwgYmFjayB0byBgc3RtbWFjYC4gQXMgSSByZWNhbGwsIGl0JiMzOTtzIHVzZWQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDcywgYW5kIGl0JiMzOTtzIG1vc3RseSB1c2VkIGluIEFSTSBTb0NzIChBbGx3aW5uZXIsIFJvY2tjaGlwLCBTVE0zMiwgQW1sb2dpYywgTlhQLCBJbnRlbCBRdWFyay9FbGtoYXJ0IExha2UvVGlnZXIgTGFrZSBQQ0kgYHN0bW1hY2ApLiBXYWl0LCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgYGR3bWFjYCBjb3JlIG9yIHRoZSBgc3RtbWFjYCBkcml2ZXI/CgpJIGNhbiYjMzk7dCByZWNhbGwgYGR3bWFjYCBiZWluZyBzdGFuZGFyZCBmb3IgeDg2XzY0LCBldmVuIGZvciBzb21lIEFSTSBib2FyZHMgKGxpa2Ugb3JhbmdlcGktcGMgYW5kIGFsbHdpbm5lciBkd21hYz8gbWF5YmU/KS4gSSBoYXZlIGEgc3Ryb25nIGZlZWxpbmcgaXQmIzM5O3Mgbm90IGV2ZW4gYSBzdGFuZGFyZCBlbXVsYXRlZCBkZXZpY2UuIEdpdmVuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGNhc2UuIEluIHN5emthbGxlciBvbiBRRU1VL0dDRSB4ODZfNjQsIHRoZSBzdGFuZGFyZCBuZXR3b3JrIGRldmljZXMgYXJlIGB2aXJ0aW8tbmV0YCwgYGUxMDAwYCwgZHVtbXkvbG9vcGJhY2svdHVuL3RhcCwgcmF3IHNvY2tldHMsIGBtYWM4MDIxMV9od3NpbWAsIGV0Yy4gUGh5c2ljYWwgZXRoZXJuZXQgZHJpdmVycyBsaWtlIGBtbHg1YCwgYHRnM2AsIGBibnh0YCwgYGljZWAsIGBpNDBlYCwgYHI4MTY5YCwgYHN0bW1hY2AsIHJlcXVpcmUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIHBsYXRmb3JtIGRldmljZXMgdGhhdCBkb24mIzM5O3QgZXhpc3QgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFZNcy4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGZ1bmN0aW9ucyBsaWtlIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIG9yIGFueXRoaW5nIGluIGBzdG1tYWNfdGMuY2AgY2FuIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgYHN0bW1hY2AgZGV2aWNlIGJlaW5nIHByb2JlZCBhbmQgaW5zdGFudGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gLiBJZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYHN0bW1hY2AgKHdoaWNoIEkgaGlnaGx5IHN1c3BlY3QpLCB0aGVuIEkmIzM5O20gb3V0IG9mIGx1Y2sgd2l0aGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX3NldHVwX2R3bWFjNTEwX21xcHJpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyNjQ9c3RhdGljIGludCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjc1OnN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNzYtXHRcdFx0XHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xMzU0PWNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzYxLVx0LnF1ZXJ5X2NhcHMgPSB0Y19xdWVyeV9jYXBzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTM2MjpcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzYzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBkd21hYzUxMF90Y19vcHNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkd21hYzUxMF90Y19vcHNgIGlzIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gVGltZSB0byBnbyBkaWdnaW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzLCBlc3NlbnRpYWxseSBtYXBwaW5nIG91dCB0aGUgY29kZSBwYXRocyB0aGF0IGRlcGVuZCBvbiBpdC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUsIGFuZCBhbnkgcG90ZW50aWFsIGltcGFjdHMgaWYgSSB3ZXJlIHRvIG1vZGlmeSBpdC4gSSB3YW50IHRvIHNlZSB0aGlzIHRoaW5nIGluIGFjdGlvbiwgc28gSSBuZWVkIHRvIGZpbmQgaXRzIHVzZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkd21hYzUxMF90Y19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xOTktXHRcdC5tb2RlID0gXHUwMDI2ZHdtYWM0X3JpbmdfbW9kZV9vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjAwOlx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjAxLVx0XHQubW1jID0gXHUwMDI2ZHdtYWNfbW1jX29wcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjIwLVx0XHQubW9kZSA9IFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIyMTpcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIyMi1cdFx0Lm1tYyA9IFx1MDAyNmR3bWFjX21tY19vcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI0MS1cdFx0Lm1vZGUgPSBcdTAwMjZkd21hYzRfcmluZ19tb2RlX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNDI6XHRcdC50YyA9IFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNDMtXHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjMtXHRcdC5tb2RlID0gTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNjQ6XHRcdC50YyA9IFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjUtXHRcdC5tbWMgPSBcdTAwMjZkd3hnbWFjX21tY19vcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI4NS1cdFx0Lm1vZGUgPSBOVUxMLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4NjpcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI4Ny1cdFx0Lm1tYyA9IFx1MDAyNmR3eGdtYWNfbW1jX29wcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NjkxPWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjY5MjpleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xMzQzPWNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNF90Y19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjEzNTQ6Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM1NS1cdC5pbml0ID0gdGNfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg0CgkJCQkJCQlvdXRwdXQ6IDExMgoJCQkJCQkJdGhvdWdodHM6IDU5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgc3RtbWFjIG5ldGRldiBjaGFuZ2VzIGZvciBmdXp6aW5nIGFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGludG8gdGhpcyBwcm9wb3NlZCBjaGFuZ2UsIHNwZWNpZmljYWxseSBob3cgdGhlIGBzdG1tYWNgIG5ldGRldiBpbnRlcmFjdHMgd2l0aCBUcmFmZmljIENvbnRyb2wgKHRjKS4gRnJvbSB3aGF0IEkmIzM5O3ZlIHRyYWNlZCwgdGhlIGBzdG1tYWNfc2V0dXBfdGNgIGZ1bmN0aW9uLCB3aGljaCBpcyBlc3NlbnRpYWxseSB0aGUgYG5kb19zZXR1cF90Y2AgZm9yIGBzdG1tYWNgIGRldmljZXMsIGNhbGxzIGludG8gYHN0bW1hY190Y19zZXR1cGAuIFRoaXMsIGluIHR1cm4sIGxlYWRzIHRvIGBzdG1tYWNfdGNfb3BzLnNldHVwX21xcHJpb2AgYW5kIHVsdGltYXRlbHkgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2Agd2hlbiBtcXByaW8gb3IgdGFwcmlvIGFyZSBjb25maWd1cmVkLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgY2FuIHN5emthbGxlciBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSwgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciB0aGUgdHlwaWNhbCBRRU1VL2FtZDY0IHNldHVwPyBUaGUgYW5zd2VyLCB1bmZvcnR1bmF0ZWx5LCBpcyBuby4gVGhlIGBzdG1tYWNgIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoZXNlIGFyZSB0eXBpY2FsbHkgZW1iZWRkZWQgd2l0aGluIHNwZWNpZmljIFNvQ3MgKEFSTSwgTUlQUywgZXRjLikgb3Igc3BlY2lmaWMgSW50ZWwgUENJIGNoaXBzZXRzIChsaWtlIEVsa2hhcnQgTGFrZSkuIFRoZXkgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBJUCBibG9ja3MgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNcy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjcml0ZXJpYSBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhpcyBzaXR1YXRpb24uIFRoaXMgaXMgc2ltaWxhciB0byB2ZW5kb3JzIHNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VLgoKTG9va2luZyBhdCB0aGUgZmlsZXMgdGhhdCBhcmUgbW9kaWZpZWQsIGl0JiMzOTtzIGNsZWFyOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jYC4gQm90aCBvZiB0aGVzZSBmaWxlcyBhcmUgZW50aXJlbHkgd2l0aGluIHRoZSBgc3RtbWFjYCBkaXJlY3RvcnksIHdoaWNoIGlzIHRoZSB2ZW5kb3IgZHJpdmVyIGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgYW5kIFN5bm9wc3lzIERXTUFDIGV0aGVybmV0IGRldmljZXMuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGNvcmUgbmV0d29ya2luZyBjb2RlIG9yIGFueSBnZW5lcmljIHN1YnN5c3RlbSBjb2RlLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHRpZWQgdG8gdGhpcyBzcGVjaWZpYywgbm9uLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCBmdXp6aW5nIHdvdWxkIGFjdHVhbGx5IHRvdWNoIHRoZSBjaGFuZ2VzLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGBzdG1tYWNgIEV0aGVybmV0IGRyaXZlciAoU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMpLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBvciBwbGF0Zm9ybS9QQ0kgZGV2aWNlcy4gVGhpcyB0eXBlIG9mIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgYW5kIHRodXMgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mzc6NTAuNjYyMTQ1ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU4OTI2NzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MvU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgKHN0bW1hYykgZHJpdmVyLCBzcGVjaWZpY2FsbHkgVEMgbXFwcmlvIGFuZCB0YXByaW8gb2ZmbG9hZCBoYW5kbGluZyBpbiBzdG1tYWNfdGMuYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgU29DIG9yIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjM3OjUwLjY2MjE1MTE5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTQ2Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDk0NmZkM2RkY2YwYWQwMjBjZjU1NmUwYjM2N2NkN2JlMGVjNmE0NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbmluZGV4IDA0ZGFmZWMwMjFiNGYuLjkzMTRiY2I4NWMyMjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXFxuQEAgLTQ5NCw3ICs0OTQsNyBAQCBzdHJ1Y3Qgc3RtbWFjX29wcyB7XFxuICNkZWZpbmUgc3RtbWFjX3NldF9hcnBfb2ZmbG9hZChfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbiBcXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIG1hYywgc2V0X2FycF9vZmZsb2FkLCBfX2FyZ3MpXFxuICNkZWZpbmUgc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbi1cXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIG1hYywgZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzLCBfX2FyZ3MpXFxuK1xcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIG1hYywgZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzLCBfX2FyZ3MpXFxuIFxcbiAvKiBQVFAgYW5kIEhXIFRpbWVyIGhlbHBlcnMgKi9cXG4gc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcXG5pbmRleCAxNGNhYmU3NmU1M2VjLi43ZDczYjBjMTZmNTBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcXG5AQCAtOTcwLDcgKzk3MCw3IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IHFvcHQtXFx1MDAzZW1xcHJpby5leHRhY2s7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUsIGN1cnJlbnRfdGltZSwgcW9wdF90aW1lO1xcbiBcXHRrdGltZV90IGN1cnJlbnRfdGltZV9ucztcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCBlcnIsIGksIHJldCA9IDA7XFxuIFxcdHU2NCBjdHI7XFxuIFxcbiBcXHRpZiAocW9wdC1cXHUwMDNlYmFzZV90aW1lIFxcdTAwM2MgMClcXG5AQCAtMTEyMCw5ICsxMTIwLDkgQEAgc3RhdGljIGludCB0Y190YXByaW9fY29uZmlndXJlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vlc3RfbG9jayk7XFxuIFxcdH1cXG4gXFxuLVxcdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgcHJpdi1cXHUwMDNlZGV2LCBleHRhY2ssIDApO1xcbitcXHRlcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIHByaXYtXFx1MDAzZWRldiwgZXh0YWNrLCAwKTtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiBxb3B0LVxcdTAwM2VjbWQgPT0gVEFQUklPX0NNRF9ERVNUUk9ZID8gZXJyIDogcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0Y190YXByaW9fc3RhdHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbkBAIC0xMjM3LDU4ICsxMjM3LDk3IEBAIHN0YXRpYyBpbnQgdGNfcXVlcnlfY2FwcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitzdGF0aWMgaW50IHN0bW1hY19zZXRfbmRldl90Y3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG50YyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfdGNfdHhxICp0Y190b190eHEpXFxuK3tcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcXG4rXFx0aWYgKCFudGMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnRjKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudGM7IGkrKykge1xcbitcXHRcXHR1MTYgY291bnQsIG9mZnNldDtcXG4rXFxuK1xcdFxcdGNvdW50ID0gdGNfdG9fdHhxW2ldLmNvdW50O1xcbitcXHRcXHRvZmZzZXQgPSB0Y190b190eHFbaV0ub2Zmc2V0O1xcbitcXHRcXHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIGksIGNvdW50LCBvZmZzZXQpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFxuIFxcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcXG4gXFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcXG4tXFx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xcbitcXG4rXFx0cmV0dXJuIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgbmRldl9udW1fdHhfcXVldWVzLCBudW1fdHhfcXVldWVzID0gMDtcXG4rXFx0c3RydWN0IG5ldGRldl90Y190eHEgbmRldl90Y190b190eHFbVENfTUFYX1FVRVVFXTtcXG4rXFx0c3RydWN0IG5ldGRldl90Y190eHEgdGNfdG9fdHhxW1RDX01BWF9RVUVVRV0gPSB7fTtcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuIFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuLVxcdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwcml2LVxcdTAwM2VkZXY7XFxuLVxcdHUzMiBudW1fdGMgPSBxb3B0LVxcdTAwM2VudW1fdGM7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRpZiAoIW51bV90Yykge1xcbi1cXHRcXHRzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuK1xcdHU4IG5kZXZfcHJpb190Y19tYXBbVENfQklUTUFTSyArIDFdO1xcbitcXHRpbnQgaSwgZXJyLCBuZGV2X250YztcXG4gXFxuLVxcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIG51bV90Yyk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdGlmICghcW9wdC1cXHUwMDNlbnVtX3RjKVxcbitcXHRcXHRyZXR1cm4gc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xcbiBcXG4tXFx0Zm9yICh1MzIgdGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbi1cXHRcXHRvZmZzZXQgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbi1cXHRcXHRjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4tXFx0XFx0bnVtX3N0YWNrX3R4X3F1ZXVlcyArPSBjb3VudDtcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIEFSUkFZX1NJWkUodGNfdG9fdHhxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIHRjLCBjb3VudCwgb2Zmc2V0KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuK1xcdC8qIHNhdmUgY3VycmVudCB0YyB2YWx1ZXMgZm9yIHJlc2V0ICovXFxuK1xcdG5kZXZfbnRjID0gbmV0ZGV2X2dldF9udW1fdGMobmRldik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5kZXYtXFx1MDAzZXRjX3RvX3R4cSk7IGkrKylcXG4rXFx0XFx0bmRldl90Y190b190eHFbaV0uY29tYmluZWQgPVxcbitcXHRcXHRcXHRSRUFEX09OQ0UobmRldi1cXHUwMDNldGNfdG9fdHhxW2ldLmNvbWJpbmVkKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobmRldl9wcmlvX3RjX21hcCk7IGkrKylcXG4rXFx0XFx0bmRldl9wcmlvX3RjX21hcFtpXSA9IFJFQURfT05DRShuZGV2LVxcdTAwM2VwcmlvX3RjX21hcFtpXSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyBpKyspIHtcXG4rXFx0XFx0dGNfdG9fdHhxW2ldID0gKHN0cnVjdCBuZXRkZXZfdGNfdHhxKSB7XFxuK1xcdFxcdFxcdC5jb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W2ldLFxcbitcXHRcXHRcXHQub2Zmc2V0ID0gcW9wdC1cXHUwMDNlb2Zmc2V0W2ldLFxcbitcXHRcXHR9O1xcbitcXHRcXHRudW1fdHhfcXVldWVzICs9IHFvcHQtXFx1MDAzZWNvdW50W2ldO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV9zdGFja190eF9xdWV1ZXMpO1xcbitcXHRlcnIgPSBzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIHFvcHQtXFx1MDAzZW51bV90YywgdGNfdG9fdHhxKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9yZXNldF90YztcXG4rXFxuK1xcdG5kZXZfbnVtX3R4X3F1ZXVlcyA9IG5kZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcXG4rXFx0ZXJyID0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBudW1fdHhfcXVldWVzKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuK1xcdFxcdGdvdG8gZXJyb3JfcmVzZXRfdGM7XFxuIFxcbiBcXHRlcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbXFwcmlvLVxcdTAwM2VwcmVlbXB0aWJsZV90Y3MpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGVycl9yZXNldF90YztcXG4rXFx0XFx0Z290byBlcnJvcl9yZXNldF9udW1fdHhfcXVldWVzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfcmVzZXRfdGM6XFxuLVxcdHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcXG4rZXJyb3JfcmVzZXRfbnVtX3R4X3F1ZXVlczpcXG4rXFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBuZGV2X251bV90eF9xdWV1ZXMpO1xcbitlcnJvcl9yZXNldF90YzpcXG4rXFx0c3RtbWFjX3NldF9uZGV2X3RjcyhuZGV2LCBuZGV2X250YywgbmRldl90Y190b190eHEpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShuZGV2X3ByaW9fdGNfbWFwKTsgaSsrKVxcbitcXHRcXHRuZXRkZXZfc2V0X3ByaW9fdGNfbWFwKG5kZXYsIGksIG5kZXZfcHJpb190Y19tYXBbaV0pO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozNzo1MS4yMDA0MjQ4NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzMDUwOTc2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5NDZmZDNkZGNmMGFkMDIwY2Y1NTZlMGIzNjdjZDdiZTBlYzZhNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5pbmRleCAwNGRhZmVjMDIxYjRmLi45MzE0YmNiODVjMjIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbkBAIC00OTQsNyArNDk0LDcgQEAgc3RydWN0IHN0bW1hY19vcHMge1xuICNkZWZpbmUgc3RtbWFjX3NldF9hcnBfb2ZmbG9hZChfX3ByaXYsIF9fYXJncy4uLikgXFxcbiBcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgbWFjLCBzZXRfYXJwX29mZmxvYWQsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4tXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIG1hYywgZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzLCBfX2FyZ3MpXG4rXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKVxuIFxuIC8qIFBUUCBhbmQgSFcgVGltZXIgaGVscGVycyAqL1xuIHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbmluZGV4IDE0Y2FiZTc2ZTUzZWMuLjdkNzNiMGMxNmY1MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbkBAIC05NzAsNyArOTcwLDcgQEAgc3RhdGljIGludCB0Y190YXByaW9fY29uZmlndXJlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IHFvcHQtXHUwMDNlbXFwcmlvLmV4dGFjaztcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUsIGN1cnJlbnRfdGltZSwgcW9wdF90aW1lO1xuIFx0a3RpbWVfdCBjdXJyZW50X3RpbWVfbnM7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCBlcnIsIGksIHJldCA9IDA7XG4gXHR1NjQgY3RyO1xuIFxuIFx0aWYgKHFvcHQtXHUwMDNlYmFzZV90aW1lIFx1MDAzYyAwKVxuQEAgLTExMjAsOSArMTEyMCw5IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWVzdF9sb2NrKTtcbiBcdH1cbiBcbi1cdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgcHJpdi1cdTAwM2VkZXYsIGV4dGFjaywgMCk7XG4rXHRlcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIHByaXYtXHUwMDNlZGV2LCBleHRhY2ssIDApO1xuIFxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBxb3B0LVx1MDAzZWNtZCA9PSBUQVBSSU9fQ01EX0RFU1RST1kgPyBlcnIgOiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRjX3RhcHJpb19zdGF0cyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5AQCAtMTIzNyw1OCArMTIzNyw5NyBAQCBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnQgc3RtbWFjX3NldF9uZGV2X3RjcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggbnRjLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X3RjX3R4cSAqdGNfdG9fdHhxKVxuK3tcbitcdGludCBpLCBlcnI7XG4rXG4rXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4rXHRpZiAoIW50YylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudGMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50YzsgaSsrKSB7XG4rXHRcdHUxNiBjb3VudCwgb2Zmc2V0O1xuK1xuK1x0XHRjb3VudCA9IHRjX3RvX3R4cVtpXS5jb3VudDtcbitcdFx0b2Zmc2V0ID0gdGNfdG9fdHhxW2ldLm9mZnNldDtcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCBpLCBjb3VudCwgb2Zmc2V0KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHN0bW1hY19yZXNldF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbiBcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbiBcdG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xuLVx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xuK1xuK1x0cmV0dXJuIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcbiB9XG4gXG4gc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4ge1xuK1x0dW5zaWduZWQgaW50IG5kZXZfbnVtX3R4X3F1ZXVlcywgbnVtX3R4X3F1ZXVlcyA9IDA7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RjX3R4cSBuZGV2X3RjX3RvX3R4cVtUQ19NQVhfUVVFVUVdO1xuK1x0c3RydWN0IG5ldGRldl90Y190eHEgdGNfdG9fdHhxW1RDX01BWF9RVUVVRV0gPSB7fTtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4gXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbi1cdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4tXHR1MzIgbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKCFudW1fdGMpIHtcbi1cdFx0c3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbitcdHU4IG5kZXZfcHJpb190Y19tYXBbVENfQklUTUFTSyArIDFdO1xuK1x0aW50IGksIGVyciwgbmRldl9udGM7XG4gXG4tXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdGlmICghcW9wdC1cdTAwM2VudW1fdGMpXG4rXHRcdHJldHVybiBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XG4gXG4tXHRmb3IgKHUzMiB0YyA9IDA7IHRjIFx1MDAzYyBudW1fdGM7IHRjKyspIHtcbi1cdFx0b2Zmc2V0ID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuLVx0XHRjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuLVx0XHRudW1fc3RhY2tfdHhfcXVldWVzICs9IGNvdW50O1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBBUlJBWV9TSVpFKHRjX3RvX3R4cSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIHRjLCBjb3VudCwgb2Zmc2V0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9yZXNldF90YztcbitcdC8qIHNhdmUgY3VycmVudCB0YyB2YWx1ZXMgZm9yIHJlc2V0ICovXG4rXHRuZGV2X250YyA9IG5ldGRldl9nZXRfbnVtX3RjKG5kZXYpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuZGV2LVx1MDAzZXRjX3RvX3R4cSk7IGkrKylcbitcdFx0bmRldl90Y190b190eHFbaV0uY29tYmluZWQgPVxuK1x0XHRcdFJFQURfT05DRShuZGV2LVx1MDAzZXRjX3RvX3R4cVtpXS5jb21iaW5lZCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpKyspXG4rXHRcdG5kZXZfcHJpb190Y19tYXBbaV0gPSBSRUFEX09OQ0UobmRldi1cdTAwM2VwcmlvX3RjX21hcFtpXSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSsrKSB7XG4rXHRcdHRjX3RvX3R4cVtpXSA9IChzdHJ1Y3QgbmV0ZGV2X3RjX3R4cSkge1xuK1x0XHRcdC5jb3VudCA9IHFvcHQtXHUwMDNlY291bnRbaV0sXG4rXHRcdFx0Lm9mZnNldCA9IHFvcHQtXHUwMDNlb2Zmc2V0W2ldLFxuK1x0XHR9O1xuK1x0XHRudW1fdHhfcXVldWVzICs9IHFvcHQtXHUwMDNlY291bnRbaV07XG4gXHR9XG4gXG4tXHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV9zdGFja190eF9xdWV1ZXMpO1xuK1x0ZXJyID0gc3RtbWFjX3NldF9uZGV2X3RjcyhuZGV2LCBxb3B0LVx1MDAzZW51bV90YywgdGNfdG9fdHhxKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfcmVzZXRfdGM7XG4rXG4rXHRuZGV2X251bV90eF9xdWV1ZXMgPSBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbitcdGVyciA9IG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgbnVtX3R4X3F1ZXVlcyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycl9yZXNldF90YztcbitcdFx0Z290byBlcnJvcl9yZXNldF90YztcbiBcbiBcdGVyciA9IHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgICBtcXByaW8tXHUwMDNlcHJlZW1wdGlibGVfdGNzKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX3Jlc2V0X3RjO1xuK1x0XHRnb3RvIGVycm9yX3Jlc2V0X251bV90eF9xdWV1ZXM7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVzZXRfdGM6XG4tXHRzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XG4rZXJyb3JfcmVzZXRfbnVtX3R4X3F1ZXVlczpcbitcdG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgbmRldl9udW1fdHhfcXVldWVzKTtcbitlcnJvcl9yZXNldF90YzpcbitcdHN0bW1hY19zZXRfbmRldl90Y3MobmRldiwgbmRldl9udGMsIG5kZXZfdGNfdG9fdHhxKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobmRldl9wcmlvX3RjX21hcCk7IGkrKylcbitcdFx0bmV0ZGV2X3NldF9wcmlvX3RjX21hcChuZGV2LCBpLCBuZGV2X3ByaW9fdGNfbWFwW2ldKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mzc6NTEuMjAwNDI4NDI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0NzM2NTMxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBleGFjdGx5IHdoYXQncyBiZWluZyBjaGFuZ2VkLiBJIHNlZSB0aGF0IHRoZSBtb2RpZmljYXRpb25zIHRvdWNoIHR3byBmaWxlczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaGAgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY2AuIFJpZ2h0IGF3YXksIG15IGludGVybmFsIHJhZGFyIGlzIHBpbmdpbmc7IFwic3RtbWFjXCIg4oCTIHRoYXQncyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIsIHJpZ2h0P1xuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgaGFyZHdhcmUgc29tZXRoaW5nIEkgY2FuIGVhc2lseSB0ZXN0IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gT3IgaXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUsIGEgcGxhdGZvcm0gZGV2aWNlLCBvciBhIFBDSSBkZXZpY2U/IEkgbmVlZCB0byBrbm93IGhvdyBlYXNpbHkgSSBjYW4gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudCB0byBydW4gc29tZSBxdWljayBzbW9rZSB0ZXN0cy5cblxuTGV0J3Mgbm90IGp1bXAgdGhlIGd1biwgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgc3RtbWFjYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZHJpdmVyIGlzIGluc3RhbnRpYXRlZCBhbmQgdXNlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbGwgcHJvYmFibHkgdXNlIGdyZXBwZXIgdG8gbG9vayBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gc3RhcnQsIHRvIGNoZWNrIGZvciBQQ0kgSURzIG9yIHBsYXRmb3JtIGRldmljZXMuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQsIEkgY2FuIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjM4OjEyLjY3NDA4NDA0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIwMTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MTg9aWYgU1RNTUFDX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDpjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOTpjb25maWcgU1RNTUFDX1BMQVRGT1JNXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zNzE9ZW5kaWYgIyBTVE1NQUNfUExBVEZPUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM3Mzpjb25maWcgU1RNTUFDX0xJQlBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzc0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODoxMi43MjQyOTA2NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzQxODk2NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYHN0bW1hY2AgRW11bGF0aW9uIGluIFN0YW5kYXJkIFFFTVUvR0NFIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGlzIGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUvR0NFLCBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBoYXJkd2FyZSAobGlrZSB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgb3IgU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0KS4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZXZlbiByZWFjaCBhbnkgY29kZSByZWxhdGVkIHRvIGBzdG1tYWNgIHdpdGhpbiB0aGUgY29uZmluZXMgb2YgYSB0eXBpY2FsIGZ1enppbmcgc2V0dXAuXG5cbkZpcnN0LCBhIHF1aWNrIGNoZWNrOiBkb2VzIHN0YW5kYXJkIFFFTVUgYW1kNjQgZXZlbiBlbXVsYXRlIGBzdG1tYWNgIG9yIGBkd21hY2A/IEZyb20gbXkgcGFzdCB3b3JrLCBJIHJlY2FsbCB0aGF0IHNvbWUgb2YgdGhlc2UgbW9yZSBzcGVjaWFsaXplZCBOSUMgZHJpdmVycyBhcmUgb2Z0ZW4gdmVuZG9yLXNwZWNpZmljLCB3aGljaCBtZWFucyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwLlxuXG5Mb29raW5nIGF0IHRoZSBpbnN0cnVjdGlvbnMgY29uZmlybXMgbXkgc3VzcGljaW9uOiBzZWN0aW9uIDIgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgbGlrZSBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFUgZHJpdmVycyAoaW5jbHVkaW5nIGV4YW1wbGVzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YCkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhlc2UgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFuZCBzZWN0aW9uIDEgc3RhdGVzOiBcIklmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZC5cIlxuXG5Tbywgd2hhdCAqaXMqIGVtdWxhdGVkIGluIFFFTVU/IEkga25vdyB0aGF0LCBpbiBzdGFuZGFyZCBRRU1VIGFtZDY0LCB3ZSB0eXBpY2FsbHkgc2VlOiBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGB2aXJ0aW8tbmV0YCwgYHJ0bDgxMzlgLCBgbmUya19wY2lgLCBgcGNuZXRgLCBgdm14bmV0M2AsIGFuZCBgdXNiLW5ldGAvdXNiIGdhZGdldHMuIEJ1dCBubyBgc3RtbWFjYC5cblxuT2theSwgYmFjayB0byBgc3RtbWFjYC4gQXMgSSByZWNhbGwsIGl0J3MgdXNlZCBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUNzLCBhbmQgaXQncyBtb3N0bHkgdXNlZCBpbiBBUk0gU29DcyAoQWxsd2lubmVyLCBSb2NrY2hpcCwgU1RNMzIsIEFtbG9naWMsIE5YUCwgSW50ZWwgUXVhcmsvRWxraGFydCBMYWtlL1RpZ2VyIExha2UgUENJIGBzdG1tYWNgKS4gV2FpdCwgZG9lcyBRRU1VIGVtdWxhdGUgdGhlIGBkd21hY2AgY29yZSBvciB0aGUgYHN0bW1hY2AgZHJpdmVyP1xuXG5JIGNhbid0IHJlY2FsbCBgZHdtYWNgIGJlaW5nIHN0YW5kYXJkIGZvciB4ODZfNjQsIGV2ZW4gZm9yIHNvbWUgQVJNIGJvYXJkcyAobGlrZSBvcmFuZ2VwaS1wYyBhbmQgYWxsd2lubmVyIGR3bWFjPyBtYXliZT8pLiBJIGhhdmUgYSBzdHJvbmcgZmVlbGluZyBpdCdzIG5vdCBldmVuIGEgc3RhbmRhcmQgZW11bGF0ZWQgZGV2aWNlLiBHaXZlbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgdGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGNhc2UuIEluIHN5emthbGxlciBvbiBRRU1VL0dDRSB4ODZfNjQsIHRoZSBzdGFuZGFyZCBuZXR3b3JrIGRldmljZXMgYXJlIGB2aXJ0aW8tbmV0YCwgYGUxMDAwYCwgZHVtbXkvbG9vcGJhY2svdHVuL3RhcCwgcmF3IHNvY2tldHMsIGBtYWM4MDIxMV9od3NpbWAsIGV0Yy4gUGh5c2ljYWwgZXRoZXJuZXQgZHJpdmVycyBsaWtlIGBtbHg1YCwgYHRnM2AsIGBibnh0YCwgYGljZWAsIGBpNDBlYCwgYHI4MTY5YCwgYHN0bW1hY2AsIHJlcXVpcmUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIHBsYXRmb3JtIGRldmljZXMgdGhhdCBkb24ndCBleGlzdCBpbiBzdGFuZGFyZCBzeXprYWxsZXIgVk1zLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBmdW5jdGlvbnMgbGlrZSBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYCBvciBhbnl0aGluZyBpbiBgc3RtbWFjX3RjLmNgIGNhbiBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIGBzdG1tYWNgIGRldmljZSBiZWluZyBwcm9iZWQgYW5kIGluc3RhbnRpYXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gLiBJZiBpdCdzIGRlcGVuZGVudCBvbiBgc3RtbWFjYCAod2hpY2ggSSBoaWdobHkgc3VzcGVjdCksIHRoZW4gSSdtIG91dCBvZiBsdWNrIHdpdGhpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODoyMC4wNjYxODg5NDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNzk4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyNjQ9c3RhdGljIGludCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjc1OnN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjc2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTM1ND1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzUxMF90Y19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzYxLVxcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMzYyOlxcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM2My19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODoyMC4xMTQzNzM1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MzEzODc4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBkd21hYzUxMF90Y19vcHNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGR3bWFjNTEwX3RjX29wc2AgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBUaW1lIHRvIGdvIGRpZ2dpbmcuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyBjYWxscywgZXNzZW50aWFsbHkgbWFwcGluZyBvdXQgdGhlIGNvZGUgcGF0aHMgdGhhdCBkZXBlbmQgb24gaXQuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLCBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3RzIGlmIEkgd2VyZSB0byBtb2RpZnkgaXQuIEkgd2FudCB0byBzZWUgdGhpcyB0aGluZyBpbiBhY3Rpb24sIHNvIEkgbmVlZCB0byBmaW5kIGl0cyB1c2Ugd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjM4OjIzLjU0NTc2MzI1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1OTAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkd21hYzUxMF90Y19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xOTktXFx0XFx0Lm1vZGUgPSBcXHUwMDI2ZHdtYWM0X3JpbmdfbW9kZV9vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIwMDpcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMDEtXFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIyMC1cXHRcXHQubW9kZSA9IFxcdTAwMjZkd21hYzRfcmluZ19tb2RlX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjIxOlxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIyMi1cXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQxLVxcdFxcdC5tb2RlID0gXFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNDI6XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQzLVxcdFxcdC5tbWMgPSBcXHUwMDI2ZHdtYWNfbW1jX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjMtXFx0XFx0Lm1vZGUgPSBOVUxMLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNjQ6XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjY1LVxcdFxcdC5tbWMgPSBcXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI4NS1cXHRcXHQubW9kZSA9IE5VTEwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4NjpcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yODctXFx0XFx0Lm1tYyA9IFxcdTAwMjZkd3hnbWFjX21tY19vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NjkxPWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo2OTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNjkzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTM0Mz1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMzU0OmNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzU1LVxcdC5pbml0ID0gdGNfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mzg6MjMuNTkyOTI2NzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2NTg0NDIzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIHN0bW1hYyBuZXRkZXYgY2hhbmdlcyBmb3IgZnV6emluZyBhcHBsaWNhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgaW50byB0aGlzIHByb3Bvc2VkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHN0bW1hY2AgbmV0ZGV2IGludGVyYWN0cyB3aXRoIFRyYWZmaWMgQ29udHJvbCAodGMpLiBGcm9tIHdoYXQgSSd2ZSB0cmFjZWQsIHRoZSBgc3RtbWFjX3NldHVwX3RjYCBmdW5jdGlvbiwgd2hpY2ggaXMgZXNzZW50aWFsbHkgdGhlIGBuZG9fc2V0dXBfdGNgIGZvciBgc3RtbWFjYCBkZXZpY2VzLCBjYWxscyBpbnRvIGBzdG1tYWNfdGNfc2V0dXBgLiBUaGlzLCBpbiB0dXJuLCBsZWFkcyB0byBgc3RtbWFjX3RjX29wcy5zZXR1cF9tcXByaW9gIGFuZCB1bHRpbWF0ZWx5IGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIHdoZW4gbXFwcmlvIG9yIHRhcHJpbyBhcmUgY29uZmlndXJlZC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgY2FuIHN5emthbGxlciBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSwgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciB0aGUgdHlwaWNhbCBRRU1VL2FtZDY0IHNldHVwPyBUaGUgYW5zd2VyLCB1bmZvcnR1bmF0ZWx5LCBpcyBuby4gVGhlIGBzdG1tYWNgIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoZXNlIGFyZSB0eXBpY2FsbHkgZW1iZWRkZWQgd2l0aGluIHNwZWNpZmljIFNvQ3MgKEFSTSwgTUlQUywgZXRjLikgb3Igc3BlY2lmaWMgSW50ZWwgUENJIGNoaXBzZXRzIChsaWtlIEVsa2hhcnQgTGFrZSkuIFRoZXkgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBJUCBibG9ja3MgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNcy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjcml0ZXJpYSBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhpcyBzaXR1YXRpb24uIFRoaXMgaXMgc2ltaWxhciB0byB2ZW5kb3JzIHNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VLlxuXG5Mb29raW5nIGF0IHRoZSBmaWxlcyB0aGF0IGFyZSBtb2RpZmllZCwgaXQncyBjbGVhcjogYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaGAgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY2AuIEJvdGggb2YgdGhlc2UgZmlsZXMgYXJlIGVudGlyZWx5IHdpdGhpbiB0aGUgYHN0bW1hY2AgZGlyZWN0b3J5LCB3aGljaCBpcyB0aGUgdmVuZG9yIGRyaXZlciBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIGFuZCBTeW5vcHN5cyBEV01BQyBldGhlcm5ldCBkZXZpY2VzLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBjb3JlIG5ldHdvcmtpbmcgY29kZSBvciBhbnkgZ2VuZXJpYyBzdWJzeXN0ZW0gY29kZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHRpZWQgdG8gdGhpcyBzcGVjaWZpYywgbm9uLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCBmdXp6aW5nIHdvdWxkIGFjdHVhbGx5IHRvdWNoIHRoZSBjaGFuZ2VzLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGBzdG1tYWNgIEV0aGVybmV0IGRyaXZlciAoU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMpLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBvciBwbGF0Zm9ybS9QQ0kgZGV2aWNlcy4gVGhpcyB0eXBlIG9mIGhhcmR3YXJlIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBhbmQgdGh1cyB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmUgZW1wdHkuIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg0LCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODozNC4yNTEzNzA5MzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODozNC4yNTE0MDM0NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7vpsw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 15:36:33 +0000 UTC FinishedAt: 2026-09-09 15:38:34 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcy9TeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyAoc3RtbWFjKSBkcml2ZXIsIHNwZWNpZmljYWxseSBUQyBtcXByaW8gYW5kIHRhcHJpbyBvZmZsb2FkIGhhbmRsaW5nIGluIHN0bW1hY190Yy5jLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBTb0Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ5NDZmZDNkZGNmMGFkMDIwY2Y1NTZlMGIzNjdjZDdiZTBlYzZhNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuaW5kZXggMDRkYWZlYzAyMWI0Zi4uOTMxNGJjYjg1YzIyMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5AQCAtNDk0LDcgJiM0Mzs0OTQsNyBAQCBzdHJ1Y3Qgc3RtbWFjX29wcyB7XG4gI2RlZmluZSBzdG1tYWNfc2V0X2FycF9vZmZsb2FkKF9fcHJpdiwgX19hcmdzLi4uKSBcXFxuIFx0c3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBtYWMsIHNldF9hcnBfb2ZmbG9hZCwgX19hcmdzKVxuICNkZWZpbmUgc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcbi1cdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgbWFjLCBmcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MsIF9fYXJncylcbiYjNDM7XHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKVxuIFxuIC8qIFBUUCBhbmQgSFcgVGltZXIgaGVscGVycyAqL1xuIHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbmluZGV4IDE0Y2FiZTc2ZTUzZWMuLjdkNzNiMGMxNmY1MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbkBAIC05NzAsNyAmIzQzOzk3MCw3IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBxb3B0LVx1MDAzZW1xcHJpby5leHRhY2s7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCB0aW1lLCBjdXJyZW50X3RpbWUsIHFvcHRfdGltZTtcbiBcdGt0aW1lX3QgY3VycmVudF90aW1lX25zO1xuLVx0aW50IGksIHJldCA9IDA7XG4mIzQzO1x0aW50IGVyciwgaSwgcmV0ID0gMDtcbiBcdHU2NCBjdHI7XG4gXG4gXHRpZiAocW9wdC1cdTAwM2ViYXNlX3RpbWUgXHUwMDNjIDApXG5AQCAtMTEyMCw5ICYjNDM7MTEyMCw5IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWVzdF9sb2NrKTtcbiBcdH1cbiBcbi1cdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgcHJpdi1cdTAwM2VkZXYsIGV4dGFjaywgMCk7XG4mIzQzO1x0ZXJyID0gc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBwcml2LVx1MDAzZWRldiwgZXh0YWNrLCAwKTtcbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIHFvcHQtXHUwMDNlY21kID09IFRBUFJJT19DTURfREVTVFJPWSA/IGVyciA6IHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGNfdGFwcmlvX3N0YXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbkBAIC0xMjM3LDU4ICYjNDM7MTIzNyw5NyBAQCBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXRfbmRldl90Y3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG50YyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfdGNfdHhxICp0Y190b190eHEpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgZXJyO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4mIzQzO1x0aWYgKCFudGMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnRjKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnRjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTE2IGNvdW50LCBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdFx0Y291bnQgPSB0Y190b190eHFbaV0uY291bnQ7XG4mIzQzO1x0XHRvZmZzZXQgPSB0Y190b190eHFbaV0ub2Zmc2V0O1xuJiM0MztcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCBpLCBjb3VudCwgb2Zmc2V0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHN0bW1hY19yZXNldF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4gXHRuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcbi1cdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcbiB9XG4gXG4gc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCBuZGV2X251bV90eF9xdWV1ZXMsIG51bV90eF9xdWV1ZXMgPSAwO1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfdGNfdHhxIG5kZXZfdGNfdG9fdHhxW1RDX01BWF9RVUVVRV07XG4mIzQzO1x0c3RydWN0IG5ldGRldl90Y190eHEgdGNfdG9fdHhxW1RDX01BWF9RVUVVRV0gPSB7fTtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4gXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbi1cdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4tXHR1MzIgbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKCFudW1fdGMpIHtcbi1cdFx0c3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbiYjNDM7XHR1OCBuZGV2X3ByaW9fdGNfbWFwW1RDX0JJVE1BU0sgJiM0MzsgMV07XG4mIzQzO1x0aW50IGksIGVyciwgbmRldl9udGM7XG4gXG4tXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAoIXFvcHQtXHUwMDNlbnVtX3RjKVxuJiM0MztcdFx0cmV0dXJuIHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcbiBcbi1cdGZvciAodTMyIHRjID0gMDsgdGMgXHUwMDNjIG51bV90YzsgdGMmIzQzOyYjNDM7KSB7XG4tXHRcdG9mZnNldCA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbi1cdFx0Y291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbi1cdFx0bnVtX3N0YWNrX3R4X3F1ZXVlcyAmIzQzOz0gY291bnQ7XG4mIzQzO1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBBUlJBWV9TSVpFKHRjX3RvX3R4cSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdFx0ZXJyID0gbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCB0YywgY291bnQsIG9mZnNldCk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1x0Lyogc2F2ZSBjdXJyZW50IHRjIHZhbHVlcyBmb3IgcmVzZXQgKi9cbiYjNDM7XHRuZGV2X250YyA9IG5ldGRldl9nZXRfbnVtX3RjKG5kZXYpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobmRldi1cdTAwM2V0Y190b190eHEpOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5kZXZfdGNfdG9fdHhxW2ldLmNvbWJpbmVkID1cbiYjNDM7XHRcdFx0UkVBRF9PTkNFKG5kZXYtXHUwMDNldGNfdG9fdHhxW2ldLmNvbWJpbmVkKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5kZXZfcHJpb190Y19tYXBbaV0gPSBSRUFEX09OQ0UobmRldi1cdTAwM2VwcmlvX3RjX21hcFtpXSk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGNfdG9fdHhxW2ldID0gKHN0cnVjdCBuZXRkZXZfdGNfdHhxKSB7XG4mIzQzO1x0XHRcdC5jb3VudCA9IHFvcHQtXHUwMDNlY291bnRbaV0sXG4mIzQzO1x0XHRcdC5vZmZzZXQgPSBxb3B0LVx1MDAzZW9mZnNldFtpXSxcbiYjNDM7XHRcdH07XG4mIzQzO1x0XHRudW1fdHhfcXVldWVzICYjNDM7PSBxb3B0LVx1MDAzZWNvdW50W2ldO1xuIFx0fVxuIFxuLVx0ZXJyID0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBudW1fc3RhY2tfdHhfcXVldWVzKTtcbiYjNDM7XHRlcnIgPSBzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIHFvcHQtXHUwMDNlbnVtX3RjLCB0Y190b190eHEpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X3RjO1xuJiM0MztcbiYjNDM7XHRuZGV2X251bV90eF9xdWV1ZXMgPSBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbiYjNDM7XHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV90eF9xdWV1ZXMpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X3RjO1xuIFxuIFx0ZXJyID0gc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssXG4gXHRcdFx0XHRcdCAgICAgIG1xcHJpby1cdTAwM2VwcmVlbXB0aWJsZV90Y3MpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBlcnJfcmVzZXRfdGM7XG4mIzQzO1x0XHRnb3RvIGVycm9yX3Jlc2V0X251bV90eF9xdWV1ZXM7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVzZXRfdGM6XG4tXHRzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XG4mIzQzO2Vycm9yX3Jlc2V0X251bV90eF9xdWV1ZXM6XG4mIzQzO1x0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBuZGV2X251bV90eF9xdWV1ZXMpO1xuJiM0MztlcnJvcl9yZXNldF90YzpcbiYjNDM7XHRzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIG5kZXZfbnRjLCBuZGV2X3RjX3RvX3R4cSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuZGV2X3ByaW9fdGNfbWFwKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRuZXRkZXZfc2V0X3ByaW9fdGNfbWFwKG5kZXYsIGksIG5kZXZfcHJpb190Y19tYXBbaV0pO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNUTWljcm9lbGVjdHJvbmljcy9TeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyAoc3RtbWFjKSBkcml2ZXIsIHNwZWNpZmljYWxseSBUQyBtcXByaW8gYW5kIHRhcHJpbyBvZmZsb2FkIGhhbmRsaW5nIGluIHN0bW1hY190Yy5jLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBTb0Mgb3IgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ5NDZmZDNkZGNmMGFkMDIwY2Y1NTZlMGIzNjdjZDdiZTBlYzZhNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oCmluZGV4IDA0ZGFmZWMwMjFiNGYuLjkzMTRiY2I4NWMyMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgKQEAgLTQ5NCw3ICYjNDM7NDk0LDcgQEAgc3RydWN0IHN0bW1hY19vcHMgewogI2RlZmluZSBzdG1tYWNfc2V0X2FycF9vZmZsb2FkKF9fcHJpdiwgX19hcmdzLi4uKSBcCiAJc3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBtYWMsIHNldF9hcnBfb2ZmbG9hZCwgX19hcmdzKQogI2RlZmluZSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKF9fcHJpdiwgX19hcmdzLi4uKSBcCi0Jc3RtbWFjX2RvX3ZvaWRfY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKQomIzQzOwlzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKQogCiAvKiBQVFAgYW5kIEhXIFRpbWVyIGhlbHBlcnMgKi8KIHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwppbmRleCAxNGNhYmU3NmU1M2VjLi43ZDczYjBjMTZmNTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYwpAQCAtOTcwLDcgJiM0Mzs5NzAsNyBAQCBzdGF0aWMgaW50IHRjX3RhcHJpb19jb25maWd1cmUoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LAogCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IHFvcHQtJmd0O21xcHJpby5leHRhY2s7CiAJc3RydWN0IHRpbWVzcGVjNjQgdGltZSwgY3VycmVudF90aW1lLCBxb3B0X3RpbWU7CiAJa3RpbWVfdCBjdXJyZW50X3RpbWVfbnM7Ci0JaW50IGksIHJldCA9IDA7CiYjNDM7CWludCBlcnIsIGksIHJldCA9IDA7CiAJdTY0IGN0cjsKIAogCWlmIChxb3B0LSZndDtiYXNlX3RpbWUgJmx0OyAwKQpAQCAtMTEyMCw5ICYjNDM7MTEyMCw5IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2VzdF9sb2NrKTsKIAl9CiAKLQlzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIHByaXYtJmd0O2RldiwgZXh0YWNrLCAwKTsKJiM0MzsJZXJyID0gc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBwcml2LSZndDtkZXYsIGV4dGFjaywgMCk7CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gcW9wdC0mZ3Q7Y21kID09IFRBUFJJT19DTURfREVTVFJPWSA/IGVyciA6IHJldDsKIH0KIAogc3RhdGljIHZvaWQgdGNfdGFwcmlvX3N0YXRzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKQEAgLTEyMzcsNTggJiM0MzsxMjM3LDk3IEBAIHN0YXRpYyBpbnQgdGNfcXVlcnlfY2FwcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsCiAJfQogfQogCi1zdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MztzdGF0aWMgaW50IHN0bW1hY19zZXRfbmRldl90Y3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG50YywKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGRldl90Y190eHEgKnRjX3RvX3R4cSkKJiM0Mzt7CiYjNDM7CWludCBpLCBlcnI7CiYjNDM7CiYjNDM7CW5ldGRldl9yZXNldF90YyhuZGV2KTsKJiM0MzsJaWYgKCFudGMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnRjKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudGM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MTYgY291bnQsIG9mZnNldDsKJiM0MzsKJiM0MzsJCWNvdW50ID0gdGNfdG9fdHhxW2ldLmNvdW50OwomIzQzOwkJb2Zmc2V0ID0gdGNfdG9fdHhxW2ldLm9mZnNldDsKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmRldiwgaSwgY291bnQsIG9mZnNldCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAluZXRkZXZfcmVzZXRfdGMobmRldik7CiAJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LSZndDtwbGF0LSZndDt0eF9xdWV1ZXNfdG9fdXNlKTsKLQlzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywgMCk7CiYjNDM7CiYjNDM7CXJldHVybiBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywgMCk7CiB9CiAKIHN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKIHsKJiM0MzsJdW5zaWduZWQgaW50IG5kZXZfbnVtX3R4X3F1ZXVlcywgbnVtX3R4X3F1ZXVlcyA9IDA7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdGNfdHhxIG5kZXZfdGNfdG9fdHhxW1RDX01BWF9RVUVVRV07CiYjNDM7CXN0cnVjdCBuZXRkZXZfdGNfdHhxIHRjX3RvX3R4cVtUQ19NQVhfUVVFVUVdID0ge307CiAJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLSZndDtleHRhY2s7CiAJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7Ci0JdTMyIG9mZnNldCwgY291bnQsIG51bV9zdGFja190eF9xdWV1ZXMgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi0mZ3Q7ZGV2OwotCXUzMiBudW1fdGMgPSBxb3B0LSZndDtudW1fdGM7Ci0JaW50IGVycjsKLQotCWlmICghbnVtX3RjKSB7Ci0JCXN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTsKLQkJcmV0dXJuIDA7Ci0JfQomIzQzOwl1OCBuZGV2X3ByaW9fdGNfbWFwW1RDX0JJVE1BU0sgJiM0MzsgMV07CiYjNDM7CWludCBpLCBlcnIsIG5kZXZfbnRjOwogCi0JZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnVtX3RjKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwlpZiAoIXFvcHQtJmd0O251bV90YykKJiM0MzsJCXJldHVybiBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7CiAKLQlmb3IgKHUzMiB0YyA9IDA7IHRjICZsdDsgbnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKLQkJb2Zmc2V0ID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKLQkJY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107Ci0JCW51bV9zdGFja190eF9xdWV1ZXMgJiM0Mzs9IGNvdW50OwomIzQzOwlpZiAocW9wdC0mZ3Q7bnVtX3RjICZndDsgQVJSQVlfU0laRSh0Y190b190eHEpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJZXJyID0gbmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCB0YywgY291bnQsIG9mZnNldCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGVycl9yZXNldF90YzsKJiM0MzsJLyogc2F2ZSBjdXJyZW50IHRjIHZhbHVlcyBmb3IgcmVzZXQgKi8KJiM0MzsJbmRldl9udGMgPSBuZXRkZXZfZ2V0X251bV90YyhuZGV2KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUobmRldi0mZ3Q7dGNfdG9fdHhxKTsgaSYjNDM7JiM0MzspCiYjNDM7CQluZGV2X3RjX3RvX3R4cVtpXS5jb21iaW5lZCA9CiYjNDM7CQkJUkVBRF9PTkNFKG5kZXYtJmd0O3RjX3RvX3R4cVtpXS5jb21iaW5lZCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5kZXZfcHJpb190Y19tYXBbaV0gPSBSRUFEX09OQ0UobmRldi0mZ3Q7cHJpb190Y19tYXBbaV0pOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdGNfdG9fdHhxW2ldID0gKHN0cnVjdCBuZXRkZXZfdGNfdHhxKSB7CiYjNDM7CQkJLmNvdW50ID0gcW9wdC0mZ3Q7Y291bnRbaV0sCiYjNDM7CQkJLm9mZnNldCA9IHFvcHQtJmd0O29mZnNldFtpXSwKJiM0MzsJCX07CiYjNDM7CQludW1fdHhfcXVldWVzICYjNDM7PSBxb3B0LSZndDtjb3VudFtpXTsKIAl9CiAKLQllcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV9zdGFja190eF9xdWV1ZXMpOwomIzQzOwllcnIgPSBzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIHFvcHQtJmd0O251bV90YywgdGNfdG9fdHhxKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfcmVzZXRfdGM7CiYjNDM7CiYjNDM7CW5kZXZfbnVtX3R4X3F1ZXVlcyA9IG5kZXYtJmd0O3JlYWxfbnVtX3R4X3F1ZXVlczsKJiM0MzsJZXJyID0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBudW1fdHhfcXVldWVzKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9yZXNldF90YzsKJiM0MzsJCWdvdG8gZXJyb3JfcmVzZXRfdGM7CiAKIAllcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjaywKIAkJCQkJICAgICAgbXFwcmlvLSZndDtwcmVlbXB0aWJsZV90Y3MpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX3Jlc2V0X3RjOwomIzQzOwkJZ290byBlcnJvcl9yZXNldF9udW1fdHhfcXVldWVzOwogCiAJcmV0dXJuIDA7CiAKLWVycl9yZXNldF90YzoKLQlzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7CiYjNDM7ZXJyb3JfcmVzZXRfbnVtX3R4X3F1ZXVlczoKJiM0MzsJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBuZGV2X251bV90eF9xdWV1ZXMpOwomIzQzO2Vycm9yX3Jlc2V0X3RjOgomIzQzOwlzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIG5kZXZfbnRjLCBuZGV2X3RjX3RvX3R4cSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfcHJpb190Y19tYXAobmRldiwgaSwgbmRldl9wcmlvX3RjX21hcFtpXSk7CiAKIAlyZXR1cm4gZXJyOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDc5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhpcyBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBleGFjdGx5IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gSSBzZWUgdGhhdCB0aGUgbW9kaWZpY2F0aW9ucyB0b3VjaCB0d28gZmlsZXM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhgIGFuZCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNgLiBSaWdodCBhd2F5LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaW5naW5nOyAmIzM0O3N0bW1hYyYjMzQ7IOKAkyB0aGF0JiMzOTtzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCAvIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIGRyaXZlciwgcmlnaHQ/CgpOb3csIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgaGFyZHdhcmUgc29tZXRoaW5nIEkgY2FuIGVhc2lseSB0ZXN0IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gT3IgaXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUsIGEgcGxhdGZvcm0gZGV2aWNlLCBvciBhIFBDSSBkZXZpY2U/IEkgbmVlZCB0byBrbm93IGhvdyBlYXNpbHkgSSBjYW4gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudCB0byBydW4gc29tZSBxdWljayBzbW9rZSB0ZXN0cy4KCkxldCYjMzk7cyBub3QganVtcCB0aGUgZ3VuLCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBzdG1tYWNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgaW5zdGFudGlhdGVkIGFuZCB1c2VkLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgcHJvYmFibHkgdXNlIGdyZXBwZXIgdG8gbG9vayBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gc3RhcnQsIHRvIGNoZWNrIGZvciBQQ0kgSURzIG9yIHBsYXRmb3JtIGRldmljZXMuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQsIEkgY2FuIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTE4PWlmIFNUTU1BQ19FVEhcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjIwOmNvbmZpZyBTVE1NQUNfU0VMRlRFU1RTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBTVE1NQUMgU2VsZnRlc3RzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mjk6Y29uZmlnIFNUTU1BQ19QTEFURk9STVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQbGF0Zm9ybSBidXMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzcxPWVuZGlmICMgU1RNTUFDX1BMQVRGT1JNXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MzczOmNvbmZpZyBTVE1NQUNfTElCUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3NC1cdHRyaXN0YXRlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zOTg9Y29uZmlnIERXTUFDX01PVE9SQ09NTVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo0MDc6Y29uZmlnIFNUTU1BQ19QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVx0dHJpc3RhdGUgXCYjMzQ7U1RNTUFDIFBDSSBidXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgc3RtbWFjYCBFbXVsYXRpb24gaW4gU3RhbmRhcmQgUUVNVS9HQ0UgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGlzIGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUvR0NFLCBvciBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gc3BlY2lmaWMgaGFyZHdhcmUgKGxpa2UgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgTUFDIG9yIFNUTWljcm9lbGVjdHJvbmljcyBFdGhlcm5ldCkuIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIEkgY2FuIGV2ZW4gcmVhY2ggYW55IGNvZGUgcmVsYXRlZCB0byBgc3RtbWFjYCB3aXRoaW4gdGhlIGNvbmZpbmVzIG9mIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLgoKRmlyc3QsIGEgcXVpY2sgY2hlY2s6IGRvZXMgc3RhbmRhcmQgUUVNVSBhbWQ2NCBldmVuIGVtdWxhdGUgYHN0bW1hY2Agb3IgYGR3bWFjYD8gRnJvbSBteSBwYXN0IHdvcmssIEkgcmVjYWxsIHRoYXQgc29tZSBvZiB0aGVzZSBtb3JlIHNwZWNpYWxpemVkIE5JQyBkcml2ZXJzIGFyZSBvZnRlbiB2ZW5kb3Itc3BlY2lmaWMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlbiYjMzk7dCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwLgoKTG9va2luZyBhdCB0aGUgaW5zdHJ1Y3Rpb25zIGNvbmZpcm1zIG15IHN1c3BpY2lvbjogc2VjdGlvbiAyIHNwZWNpZmljYWxseSBjYWxscyBvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGxpa2UgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBhbmQgR1BVIGRyaXZlcnMgKGluY2x1ZGluZyBleGFtcGxlcyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWApIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMuIFRoZXNlIGFyZSAqbm90KiBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBBbmQgc2VjdGlvbiAxIHN0YXRlczogJiMzNDtJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQuJiMzNDsKClNvLCB3aGF0ICppcyogZW11bGF0ZWQgaW4gUUVNVT8gSSBrbm93IHRoYXQsIGluIHN0YW5kYXJkIFFFTVUgYW1kNjQsIHdlIHR5cGljYWxseSBzZWU6IGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYHZpcnRpby1uZXRgLCBgcnRsODEzOWAsIGBuZTJrX3BjaWAsIGBwY25ldGAsIGB2bXhuZXQzYCwgYW5kIGB1c2ItbmV0YC91c2IgZ2FkZ2V0cy4gQnV0IG5vIGBzdG1tYWNgLgoKT2theSwgYmFjayB0byBgc3RtbWFjYC4gQXMgSSByZWNhbGwsIGl0JiMzOTtzIHVzZWQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDcywgYW5kIGl0JiMzOTtzIG1vc3RseSB1c2VkIGluIEFSTSBTb0NzIChBbGx3aW5uZXIsIFJvY2tjaGlwLCBTVE0zMiwgQW1sb2dpYywgTlhQLCBJbnRlbCBRdWFyay9FbGtoYXJ0IExha2UvVGlnZXIgTGFrZSBQQ0kgYHN0bW1hY2ApLiBXYWl0LCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgYGR3bWFjYCBjb3JlIG9yIHRoZSBgc3RtbWFjYCBkcml2ZXI/CgpJIGNhbiYjMzk7dCByZWNhbGwgYGR3bWFjYCBiZWluZyBzdGFuZGFyZCBmb3IgeDg2XzY0LCBldmVuIGZvciBzb21lIEFSTSBib2FyZHMgKGxpa2Ugb3JhbmdlcGktcGMgYW5kIGFsbHdpbm5lciBkd21hYz8gbWF5YmU/KS4gSSBoYXZlIGEgc3Ryb25nIGZlZWxpbmcgaXQmIzM5O3Mgbm90IGV2ZW4gYSBzdGFuZGFyZCBlbXVsYXRlZCBkZXZpY2UuIEdpdmVuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGNhc2UuIEluIHN5emthbGxlciBvbiBRRU1VL0dDRSB4ODZfNjQsIHRoZSBzdGFuZGFyZCBuZXR3b3JrIGRldmljZXMgYXJlIGB2aXJ0aW8tbmV0YCwgYGUxMDAwYCwgZHVtbXkvbG9vcGJhY2svdHVuL3RhcCwgcmF3IHNvY2tldHMsIGBtYWM4MDIxMV9od3NpbWAsIGV0Yy4gUGh5c2ljYWwgZXRoZXJuZXQgZHJpdmVycyBsaWtlIGBtbHg1YCwgYHRnM2AsIGBibnh0YCwgYGljZWAsIGBpNDBlYCwgYHI4MTY5YCwgYHN0bW1hY2AsIHJlcXVpcmUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIHBsYXRmb3JtIGRldmljZXMgdGhhdCBkb24mIzM5O3QgZXhpc3QgaW4gc3RhbmRhcmQgc3l6a2FsbGVyIFZNcy4KClRoZXJlZm9yZSwgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGZ1bmN0aW9ucyBsaWtlIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIG9yIGFueXRoaW5nIGluIGBzdG1tYWNfdGMuY2AgY2FuIGJlIHJlYWNoZWQgd2l0aG91dCB0aGUgYHN0bW1hY2AgZGV2aWNlIGJlaW5nIHByb2JlZCBhbmQgaW5zdGFudGlhdGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gLiBJZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYHN0bW1hY2AgKHdoaWNoIEkgaGlnaGx5IHN1c3BlY3QpLCB0aGVuIEkmIzM5O20gb3V0IG9mIGx1Y2sgd2l0aGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE1OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX3NldHVwX2R3bWFjNTEwX21xcHJpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyNjQ9c3RhdGljIGludCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjc1OnN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jLTEyNzYtXHRcdFx0XHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xMzU0PWNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzYxLVx0LnF1ZXJ5X2NhcHMgPSB0Y19xdWVyeV9jYXBzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM6MTM2MjpcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzYzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk5MwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBkd21hYzUxMF90Y19vcHNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBkd21hYzUxMF90Y19vcHNgIGlzIGFjdHVhbGx5IGJlaW5nIHV0aWxpemVkIHdpdGhpbiB0aGlzIHN5c3RlbS4gVGltZSB0byBnbyBkaWdnaW5nLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxzLCBlc3NlbnRpYWxseSBtYXBwaW5nIG91dCB0aGUgY29kZSBwYXRocyB0aGF0IGRlcGVuZCBvbiBpdC4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUsIGFuZCBhbnkgcG90ZW50aWFsIGltcGFjdHMgaWYgSSB3ZXJlIHRvIG1vZGlmeSBpdC4gSSB3YW50IHRvIHNlZSB0aGlzIHRoaW5nIGluIGFjdGlvbiwgc28gSSBuZWVkIHRvIGZpbmQgaXRzIHVzZSB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkd21hYzUxMF90Y19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xOTktXHRcdC5tb2RlID0gXHUwMDI2ZHdtYWM0X3JpbmdfbW9kZV9vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjAwOlx0XHQudGMgPSBcdTAwMjZkd21hYzUxMF90Y19vcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjAxLVx0XHQubW1jID0gXHUwMDI2ZHdtYWNfbW1jX29wcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjIwLVx0XHQubW9kZSA9IFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIyMTpcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIyMi1cdFx0Lm1tYyA9IFx1MDAyNmR3bWFjX21tY19vcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI0MS1cdFx0Lm1vZGUgPSBcdTAwMjZkd21hYzRfcmluZ19tb2RlX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNDI6XHRcdC50YyA9IFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNDMtXHRcdC5tbWMgPSBcdTAwMjZkd21hY19tbWNfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjMtXHRcdC5tb2RlID0gTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNjQ6XHRcdC50YyA9IFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjUtXHRcdC5tbWMgPSBcdTAwMjZkd3hnbWFjX21tY19vcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI4NS1cdFx0Lm1vZGUgPSBOVUxMLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4NjpcdFx0LnRjID0gXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI4Ny1cdFx0Lm1tYyA9IFx1MDAyNmR3eGdtYWNfbW1jX29wcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NjkxPWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjY5MjpleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oLTY5My1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYz0xMzQzPWNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNF90Y19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jOjEzNTQ6Y29uc3Qgc3RydWN0IHN0bW1hY190Y19vcHMgZHdtYWM1MTBfdGNfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM1NS1cdC5pbml0ID0gdGNfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg0CgkJCQkJCQlvdXRwdXQ6IDExMgoJCQkJCQkJdGhvdWdodHM6IDU5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgc3RtbWFjIG5ldGRldiBjaGFuZ2VzIGZvciBmdXp6aW5nIGFwcGxpY2FiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGludG8gdGhpcyBwcm9wb3NlZCBjaGFuZ2UsIHNwZWNpZmljYWxseSBob3cgdGhlIGBzdG1tYWNgIG5ldGRldiBpbnRlcmFjdHMgd2l0aCBUcmFmZmljIENvbnRyb2wgKHRjKS4gRnJvbSB3aGF0IEkmIzM5O3ZlIHRyYWNlZCwgdGhlIGBzdG1tYWNfc2V0dXBfdGNgIGZ1bmN0aW9uLCB3aGljaCBpcyBlc3NlbnRpYWxseSB0aGUgYG5kb19zZXR1cF90Y2AgZm9yIGBzdG1tYWNgIGRldmljZXMsIGNhbGxzIGludG8gYHN0bW1hY190Y19zZXR1cGAuIFRoaXMsIGluIHR1cm4sIGxlYWRzIHRvIGBzdG1tYWNfdGNfb3BzLnNldHVwX21xcHJpb2AgYW5kIHVsdGltYXRlbHkgYHRjX3NldHVwX2R3bWFjNTEwX21xcHJpb2Agd2hlbiBtcXByaW8gb3IgdGFwcmlvIGFyZSBjb25maWd1cmVkLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgY2FuIHN5emthbGxlciBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSwgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciB0aGUgdHlwaWNhbCBRRU1VL2FtZDY0IHNldHVwPyBUaGUgYW5zd2VyLCB1bmZvcnR1bmF0ZWx5LCBpcyBuby4gVGhlIGBzdG1tYWNgIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoZXNlIGFyZSB0eXBpY2FsbHkgZW1iZWRkZWQgd2l0aGluIHNwZWNpZmljIFNvQ3MgKEFSTSwgTUlQUywgZXRjLikgb3Igc3BlY2lmaWMgSW50ZWwgUENJIGNoaXBzZXRzIChsaWtlIEVsa2hhcnQgTGFrZSkuIFRoZXkgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBJUCBibG9ja3MgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNcy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjcml0ZXJpYSBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhpcyBzaXR1YXRpb24uIFRoaXMgaXMgc2ltaWxhciB0byB2ZW5kb3JzIHNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VLgoKTG9va2luZyBhdCB0aGUgZmlsZXMgdGhhdCBhcmUgbW9kaWZpZWQsIGl0JiMzOTtzIGNsZWFyOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oYCBhbmQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jYC4gQm90aCBvZiB0aGVzZSBmaWxlcyBhcmUgZW50aXJlbHkgd2l0aGluIHRoZSBgc3RtbWFjYCBkaXJlY3RvcnksIHdoaWNoIGlzIHRoZSB2ZW5kb3IgZHJpdmVyIGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgYW5kIFN5bm9wc3lzIERXTUFDIGV0aGVybmV0IGRldmljZXMuIFRoZXJlIGFyZSBubyBtb2RpZmljYXRpb25zIHRvIGNvcmUgbmV0d29ya2luZyBjb2RlIG9yIGFueSBnZW5lcmljIHN1YnN5c3RlbSBjb2RlLgoKVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHRpZWQgdG8gdGhpcyBzcGVjaWZpYywgbm9uLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCBmdXp6aW5nIHdvdWxkIGFjdHVhbGx5IHRvdWNoIHRoZSBjaGFuZ2VzLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGBzdG1tYWNgIEV0aGVybmV0IGRyaXZlciAoU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMpLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBvciBwbGF0Zm9ybS9QQ0kgZGV2aWNlcy4gVGhpcyB0eXBlIG9mIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgYW5kIHRodXMgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4gVGhlIGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LiBJIG5lZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mzc6NTAuNjYyMTQ1ODVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU4OTI2NzMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MvU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMgKHN0bW1hYykgZHJpdmVyLCBzcGVjaWZpY2FsbHkgVEMgbXFwcmlvIGFuZCB0YXByaW8gb2ZmbG9hZCBoYW5kbGluZyBpbiBzdG1tYWNfdGMuYy4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgU29DIG9yIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMgKFFFTVUvR0NFIG9uIGFtZDY0KSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjM3OjUwLjY2MjE1MTE5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM3NTQ2Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDk0NmZkM2RkY2YwYWQwMjBjZjU1NmUwYjM2N2NkN2JlMGVjNmE0NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaFxcbmluZGV4IDA0ZGFmZWMwMjFiNGYuLjkzMTRiY2I4NWMyMjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXFxuQEAgLTQ5NCw3ICs0OTQsNyBAQCBzdHJ1Y3Qgc3RtbWFjX29wcyB7XFxuICNkZWZpbmUgc3RtbWFjX3NldF9hcnBfb2ZmbG9hZChfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbiBcXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIG1hYywgc2V0X2FycF9vZmZsb2FkLCBfX2FyZ3MpXFxuICNkZWZpbmUgc3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhfX3ByaXYsIF9fYXJncy4uLikgXFxcXFxcbi1cXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIG1hYywgZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzLCBfX2FyZ3MpXFxuK1xcdHN0bW1hY19kb19jYWxsYmFjayhfX3ByaXYsIG1hYywgZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzLCBfX2FyZ3MpXFxuIFxcbiAvKiBQVFAgYW5kIEhXIFRpbWVyIGhlbHBlcnMgKi9cXG4gc3RydWN0IHN0bW1hY19od3RpbWVzdGFtcCB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcXG5pbmRleCAxNGNhYmU3NmU1M2VjLi43ZDczYjBjMTZmNTBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcXG5AQCAtOTcwLDcgKzk3MCw3IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IHFvcHQtXFx1MDAzZW1xcHJpby5leHRhY2s7XFxuIFxcdHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUsIGN1cnJlbnRfdGltZSwgcW9wdF90aW1lO1xcbiBcXHRrdGltZV90IGN1cnJlbnRfdGltZV9ucztcXG4tXFx0aW50IGksIHJldCA9IDA7XFxuK1xcdGludCBlcnIsIGksIHJldCA9IDA7XFxuIFxcdHU2NCBjdHI7XFxuIFxcbiBcXHRpZiAocW9wdC1cXHUwMDNlYmFzZV90aW1lIFxcdTAwM2MgMClcXG5AQCAtMTEyMCw5ICsxMTIwLDkgQEAgc3RhdGljIGludCB0Y190YXByaW9fY29uZmlndXJlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2Vlc3RfbG9jayk7XFxuIFxcdH1cXG4gXFxuLVxcdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgcHJpdi1cXHUwMDNlZGV2LCBleHRhY2ssIDApO1xcbitcXHRlcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIHByaXYtXFx1MDAzZWRldiwgZXh0YWNrLCAwKTtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiBxb3B0LVxcdTAwM2VjbWQgPT0gVEFQUklPX0NNRF9ERVNUUk9ZID8gZXJyIDogcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0Y190YXByaW9fc3RhdHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbkBAIC0xMjM3LDU4ICsxMjM3LDk3IEBAIHN0YXRpYyBpbnQgdGNfcXVlcnlfY2FwcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitzdGF0aWMgaW50IHN0bW1hY19zZXRfbmRldl90Y3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHU4IG50YyxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRkZXZfdGNfdHhxICp0Y190b190eHEpXFxuK3tcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcXG4rXFx0aWYgKCFudGMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZXJyID0gbmV0ZGV2X3NldF9udW1fdGMobmRldiwgbnRjKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudGM7IGkrKykge1xcbitcXHRcXHR1MTYgY291bnQsIG9mZnNldDtcXG4rXFxuK1xcdFxcdGNvdW50ID0gdGNfdG9fdHhxW2ldLmNvdW50O1xcbitcXHRcXHRvZmZzZXQgPSB0Y190b190eHFbaV0ub2Zmc2V0O1xcbitcXHRcXHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIGksIGNvdW50LCBvZmZzZXQpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFxuIFxcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcXG4gXFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcXG4tXFx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xcbitcXG4rXFx0cmV0dXJuIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4ge1xcbitcXHR1bnNpZ25lZCBpbnQgbmRldl9udW1fdHhfcXVldWVzLCBudW1fdHhfcXVldWVzID0gMDtcXG4rXFx0c3RydWN0IG5ldGRldl90Y190eHEgbmRldl90Y190b190eHFbVENfTUFYX1FVRVVFXTtcXG4rXFx0c3RydWN0IG5ldGRldl90Y190eHEgdGNfdG9fdHhxW1RDX01BWF9RVUVVRV0gPSB7fTtcXG4gXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuIFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdCA9IFxcdTAwMjZtcXByaW8tXFx1MDAzZXFvcHQ7XFxuLVxcdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwcml2LVxcdTAwM2VkZXY7XFxuLVxcdHUzMiBudW1fdGMgPSBxb3B0LVxcdTAwM2VudW1fdGM7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRpZiAoIW51bV90Yykge1xcbi1cXHRcXHRzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuK1xcdHU4IG5kZXZfcHJpb190Y19tYXBbVENfQklUTUFTSyArIDFdO1xcbitcXHRpbnQgaSwgZXJyLCBuZGV2X250YztcXG4gXFxuLVxcdGVyciA9IG5ldGRldl9zZXRfbnVtX3RjKG5kZXYsIG51bV90Yyk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdGlmICghcW9wdC1cXHUwMDNlbnVtX3RjKVxcbitcXHRcXHRyZXR1cm4gc3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xcbiBcXG4tXFx0Zm9yICh1MzIgdGMgPSAwOyB0YyBcXHUwMDNjIG51bV90YzsgdGMrKykge1xcbi1cXHRcXHRvZmZzZXQgPSBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdO1xcbi1cXHRcXHRjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4tXFx0XFx0bnVtX3N0YWNrX3R4X3F1ZXVlcyArPSBjb3VudDtcXG4rXFx0aWYgKHFvcHQtXFx1MDAzZW51bV90YyBcXHUwMDNlIEFSUkFZX1NJWkUodGNfdG9fdHhxKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRcXHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIHRjLCBjb3VudCwgb2Zmc2V0KTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuK1xcdC8qIHNhdmUgY3VycmVudCB0YyB2YWx1ZXMgZm9yIHJlc2V0ICovXFxuK1xcdG5kZXZfbnRjID0gbmV0ZGV2X2dldF9udW1fdGMobmRldik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5kZXYtXFx1MDAzZXRjX3RvX3R4cSk7IGkrKylcXG4rXFx0XFx0bmRldl90Y190b190eHFbaV0uY29tYmluZWQgPVxcbitcXHRcXHRcXHRSRUFEX09OQ0UobmRldi1cXHUwMDNldGNfdG9fdHhxW2ldLmNvbWJpbmVkKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobmRldl9wcmlvX3RjX21hcCk7IGkrKylcXG4rXFx0XFx0bmRldl9wcmlvX3RjX21hcFtpXSA9IFJFQURfT05DRShuZGV2LVxcdTAwM2VwcmlvX3RjX21hcFtpXSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyBpKyspIHtcXG4rXFx0XFx0dGNfdG9fdHhxW2ldID0gKHN0cnVjdCBuZXRkZXZfdGNfdHhxKSB7XFxuK1xcdFxcdFxcdC5jb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W2ldLFxcbitcXHRcXHRcXHQub2Zmc2V0ID0gcW9wdC1cXHUwMDNlb2Zmc2V0W2ldLFxcbitcXHRcXHR9O1xcbitcXHRcXHRudW1fdHhfcXVldWVzICs9IHFvcHQtXFx1MDAzZWNvdW50W2ldO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV9zdGFja190eF9xdWV1ZXMpO1xcbitcXHRlcnIgPSBzdG1tYWNfc2V0X25kZXZfdGNzKG5kZXYsIHFvcHQtXFx1MDAzZW51bV90YywgdGNfdG9fdHhxKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9yZXNldF90YztcXG4rXFxuK1xcdG5kZXZfbnVtX3R4X3F1ZXVlcyA9IG5kZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcXG4rXFx0ZXJyID0gbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBudW1fdHhfcXVldWVzKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfcmVzZXRfdGM7XFxuK1xcdFxcdGdvdG8gZXJyb3JfcmVzZXRfdGM7XFxuIFxcbiBcXHRlcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIG5kZXYsIGV4dGFjayxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbXFwcmlvLVxcdTAwM2VwcmVlbXB0aWJsZV90Y3MpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRnb3RvIGVycl9yZXNldF90YztcXG4rXFx0XFx0Z290byBlcnJvcl9yZXNldF9udW1fdHhfcXVldWVzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1lcnJfcmVzZXRfdGM6XFxuLVxcdHN0bW1hY19yZXNldF90Y19tcXByaW8obmRldiwgZXh0YWNrKTtcXG4rZXJyb3JfcmVzZXRfbnVtX3R4X3F1ZXVlczpcXG4rXFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZGV2LCBuZGV2X251bV90eF9xdWV1ZXMpO1xcbitlcnJvcl9yZXNldF90YzpcXG4rXFx0c3RtbWFjX3NldF9uZGV2X3RjcyhuZGV2LCBuZGV2X250YywgbmRldl90Y190b190eHEpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShuZGV2X3ByaW9fdGNfbWFwKTsgaSsrKVxcbitcXHRcXHRuZXRkZXZfc2V0X3ByaW9fdGNfbWFwKG5kZXYsIGksIG5kZXZfcHJpb190Y19tYXBbaV0pO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozNzo1MS4yMDA0MjQ4NjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQzMDUwOTc2ODEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ5NDZmZDNkZGNmMGFkMDIwY2Y1NTZlMGIzNjdjZDdiZTBlYzZhNDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE1OjM3OjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG5pbmRleCAwNGRhZmVjMDIxYjRmLi45MzE0YmNiODVjMjIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmhcbkBAIC00OTQsNyArNDk0LDcgQEAgc3RydWN0IHN0bW1hY19vcHMge1xuICNkZWZpbmUgc3RtbWFjX3NldF9hcnBfb2ZmbG9hZChfX3ByaXYsIF9fYXJncy4uLikgXFxcbiBcdHN0bW1hY19kb192b2lkX2NhbGxiYWNrKF9fcHJpdiwgbWFjLCBzZXRfYXJwX29mZmxvYWQsIF9fYXJncylcbiAjZGVmaW5lIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MoX19wcml2LCBfX2FyZ3MuLi4pIFxcXG4tXHRzdG1tYWNfZG9fdm9pZF9jYWxsYmFjayhfX3ByaXYsIG1hYywgZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzLCBfX2FyZ3MpXG4rXHRzdG1tYWNfZG9fY2FsbGJhY2soX19wcml2LCBtYWMsIGZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcywgX19hcmdzKVxuIFxuIC8qIFBUUCBhbmQgSFcgVGltZXIgaGVscGVycyAqL1xuIHN0cnVjdCBzdG1tYWNfaHd0aW1lc3RhbXAge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbmluZGV4IDE0Y2FiZTc2ZTUzZWMuLjdkNzNiMGMxNmY1MGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmNcbkBAIC05NzAsNyArOTcwLDcgQEAgc3RhdGljIGludCB0Y190YXByaW9fY29uZmlndXJlKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IHFvcHQtXHUwMDNlbXFwcmlvLmV4dGFjaztcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IHRpbWUsIGN1cnJlbnRfdGltZSwgcW9wdF90aW1lO1xuIFx0a3RpbWVfdCBjdXJyZW50X3RpbWVfbnM7XG4tXHRpbnQgaSwgcmV0ID0gMDtcbitcdGludCBlcnIsIGksIHJldCA9IDA7XG4gXHR1NjQgY3RyO1xuIFxuIFx0aWYgKHFvcHQtXHUwMDNlYmFzZV90aW1lIFx1MDAzYyAwKVxuQEAgLTExMjAsOSArMTEyMCw5IEBAIHN0YXRpYyBpbnQgdGNfdGFwcmlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWVzdF9sb2NrKTtcbiBcdH1cbiBcbi1cdHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgcHJpdi1cdTAwM2VkZXYsIGV4dGFjaywgMCk7XG4rXHRlcnIgPSBzdG1tYWNfZnBlX21hcF9wcmVlbXB0aW9uX2NsYXNzKHByaXYsIHByaXYtXHUwMDNlZGV2LCBleHRhY2ssIDApO1xuIFxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBxb3B0LVx1MDAzZWNtZCA9PSBUQVBSSU9fQ01EX0RFU1RST1kgPyBlcnIgOiByZXQ7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRjX3RhcHJpb19zdGF0cyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5AQCAtMTIzNyw1OCArMTIzNyw5NyBAQCBzdGF0aWMgaW50IHRjX3F1ZXJ5X2NhcHMoc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnQgc3RtbWFjX3NldF9uZGV2X3RjcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTggbnRjLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X3RjX3R4cSAqdGNfdG9fdHhxKVxuK3tcbitcdGludCBpLCBlcnI7XG4rXG4rXHRuZXRkZXZfcmVzZXRfdGMobmRldik7XG4rXHRpZiAoIW50YylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudGMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG50YzsgaSsrKSB7XG4rXHRcdHUxNiBjb3VudCwgb2Zmc2V0O1xuK1xuK1x0XHRjb3VudCA9IHRjX3RvX3R4cVtpXS5jb3VudDtcbitcdFx0b2Zmc2V0ID0gdGNfdG9fdHhxW2ldLm9mZnNldDtcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZGV2LCBpLCBjb3VudCwgb2Zmc2V0KTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHN0bW1hY19yZXNldF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbiBcdG5ldGRldl9yZXNldF90YyhuZGV2KTtcbiBcdG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xuLVx0c3RtbWFjX2ZwZV9tYXBfcHJlZW1wdGlvbl9jbGFzcyhwcml2LCBuZGV2LCBleHRhY2ssIDApO1xuK1xuK1x0cmV0dXJuIHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLCAwKTtcbiB9XG4gXG4gc3RhdGljIGludCB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuIFx0XHRcdFx0ICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXG4ge1xuK1x0dW5zaWduZWQgaW50IG5kZXZfbnVtX3R4X3F1ZXVlcywgbnVtX3R4X3F1ZXVlcyA9IDA7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RjX3R4cSBuZGV2X3RjX3RvX3R4cVtUQ19NQVhfUVVFVUVdO1xuK1x0c3RydWN0IG5ldGRldl90Y190eHEgdGNfdG9fdHhxW1RDX01BWF9RVUVVRV0gPSB7fTtcbiBcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby1cdTAwM2VleHRhY2s7XG4gXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbi1cdHUzMiBvZmZzZXQsIGNvdW50LCBudW1fc3RhY2tfdHhfcXVldWVzID0gMDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cdTAwM2VkZXY7XG4tXHR1MzIgbnVtX3RjID0gcW9wdC1cdTAwM2VudW1fdGM7XG4tXHRpbnQgZXJyO1xuLVxuLVx0aWYgKCFudW1fdGMpIHtcbi1cdFx0c3RtbWFjX3Jlc2V0X3RjX21xcHJpbyhuZGV2LCBleHRhY2spO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbitcdHU4IG5kZXZfcHJpb190Y19tYXBbVENfQklUTUFTSyArIDFdO1xuK1x0aW50IGksIGVyciwgbmRldl9udGM7XG4gXG4tXHRlcnIgPSBuZXRkZXZfc2V0X251bV90YyhuZGV2LCBudW1fdGMpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdGlmICghcW9wdC1cdTAwM2VudW1fdGMpXG4rXHRcdHJldHVybiBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XG4gXG4tXHRmb3IgKHUzMiB0YyA9IDA7IHRjIFx1MDAzYyBudW1fdGM7IHRjKyspIHtcbi1cdFx0b2Zmc2V0ID0gcW9wdC1cdTAwM2VvZmZzZXRbdGNdO1xuLVx0XHRjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuLVx0XHRudW1fc3RhY2tfdHhfcXVldWVzICs9IGNvdW50O1xuK1x0aWYgKHFvcHQtXHUwMDNlbnVtX3RjIFx1MDAzZSBBUlJBWV9TSVpFKHRjX3RvX3R4cSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0XHRlcnIgPSBuZXRkZXZfc2V0X3RjX3F1ZXVlKG5kZXYsIHRjLCBjb3VudCwgb2Zmc2V0KTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIGVycl9yZXNldF90YztcbitcdC8qIHNhdmUgY3VycmVudCB0YyB2YWx1ZXMgZm9yIHJlc2V0ICovXG4rXHRuZGV2X250YyA9IG5ldGRldl9nZXRfbnVtX3RjKG5kZXYpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuZGV2LVx1MDAzZXRjX3RvX3R4cSk7IGkrKylcbitcdFx0bmRldl90Y190b190eHFbaV0uY29tYmluZWQgPVxuK1x0XHRcdFJFQURfT05DRShuZGV2LVx1MDAzZXRjX3RvX3R4cVtpXS5jb21iaW5lZCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG5kZXZfcHJpb190Y19tYXApOyBpKyspXG4rXHRcdG5kZXZfcHJpb190Y19tYXBbaV0gPSBSRUFEX09OQ0UobmRldi1cdTAwM2VwcmlvX3RjX21hcFtpXSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgaSsrKSB7XG4rXHRcdHRjX3RvX3R4cVtpXSA9IChzdHJ1Y3QgbmV0ZGV2X3RjX3R4cSkge1xuK1x0XHRcdC5jb3VudCA9IHFvcHQtXHUwMDNlY291bnRbaV0sXG4rXHRcdFx0Lm9mZnNldCA9IHFvcHQtXHUwMDNlb2Zmc2V0W2ldLFxuK1x0XHR9O1xuK1x0XHRudW1fdHhfcXVldWVzICs9IHFvcHQtXHUwMDNlY291bnRbaV07XG4gXHR9XG4gXG4tXHRlcnIgPSBuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5kZXYsIG51bV9zdGFja190eF9xdWV1ZXMpO1xuK1x0ZXJyID0gc3RtbWFjX3NldF9uZGV2X3RjcyhuZGV2LCBxb3B0LVx1MDAzZW51bV90YywgdGNfdG9fdHhxKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfcmVzZXRfdGM7XG4rXG4rXHRuZGV2X251bV90eF9xdWV1ZXMgPSBuZGV2LVx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcztcbitcdGVyciA9IG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgbnVtX3R4X3F1ZXVlcyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIGVycl9yZXNldF90YztcbitcdFx0Z290byBlcnJvcl9yZXNldF90YztcbiBcbiBcdGVyciA9IHN0bW1hY19mcGVfbWFwX3ByZWVtcHRpb25fY2xhc3MocHJpdiwgbmRldiwgZXh0YWNrLFxuIFx0XHRcdFx0XHQgICAgICBtcXByaW8tXHUwMDNlcHJlZW1wdGlibGVfdGNzKTtcbiBcdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX3Jlc2V0X3RjO1xuK1x0XHRnb3RvIGVycm9yX3Jlc2V0X251bV90eF9xdWV1ZXM7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1lcnJfcmVzZXRfdGM6XG4tXHRzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKG5kZXYsIGV4dGFjayk7XG4rZXJyb3JfcmVzZXRfbnVtX3R4X3F1ZXVlczpcbitcdG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmRldiwgbmRldl9udW1fdHhfcXVldWVzKTtcbitlcnJvcl9yZXNldF90YzpcbitcdHN0bW1hY19zZXRfbmRldl90Y3MobmRldiwgbmRldl9udGMsIG5kZXZfdGNfdG9fdHhxKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobmRldl9wcmlvX3RjX21hcCk7IGkrKylcbitcdFx0bmV0ZGV2X3NldF9wcmlvX3RjX21hcChuZGV2LCBpLCBuZGV2X3ByaW9fdGNfbWFwW2ldKTtcbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mzc6NTEuMjAwNDI4NDI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE0NzM2NTMxMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBleGFjdGx5IHdoYXQncyBiZWluZyBjaGFuZ2VkLiBJIHNlZSB0aGF0IHRoZSBtb2RpZmljYXRpb25zIHRvdWNoIHR3byBmaWxlczogYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaGAgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY2AuIFJpZ2h0IGF3YXksIG15IGludGVybmFsIHJhZGFyIGlzIHBpbmdpbmc7IFwic3RtbWFjXCIg4oCTIHRoYXQncyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE11bHRpLUdpZ2FiaXQgRXRoZXJuZXQgLyBTeW5vcHN5cyBEZXNpZ25XYXJlIEV0aGVybmV0IE1BQyBkcml2ZXIsIHJpZ2h0P1xuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgaGFyZHdhcmUgc29tZXRoaW5nIEkgY2FuIGVhc2lseSB0ZXN0IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRT8gT3IgaXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUsIGEgcGxhdGZvcm0gZGV2aWNlLCBvciBhIFBDSSBkZXZpY2U/IEkgbmVlZCB0byBrbm93IGhvdyBlYXNpbHkgSSBjYW4gcmVwbGljYXRlIHRoZSBlbnZpcm9ubWVudCB0byBydW4gc29tZSBxdWljayBzbW9rZSB0ZXN0cy5cblxuTGV0J3Mgbm90IGp1bXAgdGhlIGd1biwgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb2RlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciBgc3RtbWFjYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZHJpdmVyIGlzIGluc3RhbnRpYXRlZCBhbmQgdXNlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbGwgcHJvYmFibHkgdXNlIGdyZXBwZXIgdG8gbG9vayBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gc3RhcnQsIHRvIGNoZWNrIGZvciBQQ0kgSURzIG9yIHBsYXRmb3JtIGRldmljZXMuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQsIEkgY2FuIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA3OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjM4OjEyLjY3NDA4NDA0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDIwMTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU1RNTUFDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MTg9aWYgU1RNTUFDX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyMDpjb25maWcgU1RNTUFDX1NFTEZURVNUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgU1RNTUFDIFNlbGZ0ZXN0c1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOTpjb25maWcgU1RNTUFDX1BMQVRGT1JNXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBsYXRmb3JtIGJ1cyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zNzE9ZW5kaWYgIyBTVE1NQUNfUExBVEZPUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM3Mzpjb25maWcgU1RNTUFDX0xJQlBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzc0LVxcdHRyaXN0YXRlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA4LVxcdHRyaXN0YXRlIFxcXCJTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODoxMi43MjQyOTA2NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzQxODk2NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYHN0bW1hY2AgRW11bGF0aW9uIGluIFN0YW5kYXJkIFFFTVUvR0NFIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgYHN0bW1hY2AgZHJpdmVyIGlzIGVtdWxhdGVkIGJ5IHN0YW5kYXJkIFFFTVUvR0NFLCBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBzcGVjaWZpYyBoYXJkd2FyZSAobGlrZSB0aGUgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgb3IgU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0KS4gSSBoYXZlIHRvIGZpZ3VyZSBvdXQgaWYgSSBjYW4gZXZlbiByZWFjaCBhbnkgY29kZSByZWxhdGVkIHRvIGBzdG1tYWNgIHdpdGhpbiB0aGUgY29uZmluZXMgb2YgYSB0eXBpY2FsIGZ1enppbmcgc2V0dXAuXG5cbkZpcnN0LCBhIHF1aWNrIGNoZWNrOiBkb2VzIHN0YW5kYXJkIFFFTVUgYW1kNjQgZXZlbiBlbXVsYXRlIGBzdG1tYWNgIG9yIGBkd21hY2A/IEZyb20gbXkgcGFzdCB3b3JrLCBJIHJlY2FsbCB0aGF0IHNvbWUgb2YgdGhlc2UgbW9yZSBzcGVjaWFsaXplZCBOSUMgZHJpdmVycyBhcmUgb2Z0ZW4gdmVuZG9yLXNwZWNpZmljLCB3aGljaCBtZWFucyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBRRU1VIHNldHVwLlxuXG5Mb29raW5nIGF0IHRoZSBpbnN0cnVjdGlvbnMgY29uZmlybXMgbXkgc3VzcGljaW9uOiBzZWN0aW9uIDIgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgbGlrZSBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIGFuZCBHUFUgZHJpdmVycyAoaW5jbHVkaW5nIGV4YW1wbGVzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YCkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhlc2UgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEFuZCBzZWN0aW9uIDEgc3RhdGVzOiBcIklmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZC5cIlxuXG5Tbywgd2hhdCAqaXMqIGVtdWxhdGVkIGluIFFFTVU/IEkga25vdyB0aGF0LCBpbiBzdGFuZGFyZCBRRU1VIGFtZDY0LCB3ZSB0eXBpY2FsbHkgc2VlOiBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGB2aXJ0aW8tbmV0YCwgYHJ0bDgxMzlgLCBgbmUya19wY2lgLCBgcGNuZXRgLCBgdm14bmV0M2AsIGFuZCBgdXNiLW5ldGAvdXNiIGdhZGdldHMuIEJ1dCBubyBgc3RtbWFjYC5cblxuT2theSwgYmFjayB0byBgc3RtbWFjYC4gQXMgSSByZWNhbGwsIGl0J3MgdXNlZCBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUNzLCBhbmQgaXQncyBtb3N0bHkgdXNlZCBpbiBBUk0gU29DcyAoQWxsd2lubmVyLCBSb2NrY2hpcCwgU1RNMzIsIEFtbG9naWMsIE5YUCwgSW50ZWwgUXVhcmsvRWxraGFydCBMYWtlL1RpZ2VyIExha2UgUENJIGBzdG1tYWNgKS4gV2FpdCwgZG9lcyBRRU1VIGVtdWxhdGUgdGhlIGBkd21hY2AgY29yZSBvciB0aGUgYHN0bW1hY2AgZHJpdmVyP1xuXG5JIGNhbid0IHJlY2FsbCBgZHdtYWNgIGJlaW5nIHN0YW5kYXJkIGZvciB4ODZfNjQsIGV2ZW4gZm9yIHNvbWUgQVJNIGJvYXJkcyAobGlrZSBvcmFuZ2VwaS1wYyBhbmQgYWxsd2lubmVyIGR3bWFjPyBtYXliZT8pLiBJIGhhdmUgYSBzdHJvbmcgZmVlbGluZyBpdCdzIG5vdCBldmVuIGEgc3RhbmRhcmQgZW11bGF0ZWQgZGV2aWNlLiBHaXZlbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgdGhhdCdzIGFsbW9zdCBjZXJ0YWlubHkgdGhlIGNhc2UuIEluIHN5emthbGxlciBvbiBRRU1VL0dDRSB4ODZfNjQsIHRoZSBzdGFuZGFyZCBuZXR3b3JrIGRldmljZXMgYXJlIGB2aXJ0aW8tbmV0YCwgYGUxMDAwYCwgZHVtbXkvbG9vcGJhY2svdHVuL3RhcCwgcmF3IHNvY2tldHMsIGBtYWM4MDIxMV9od3NpbWAsIGV0Yy4gUGh5c2ljYWwgZXRoZXJuZXQgZHJpdmVycyBsaWtlIGBtbHg1YCwgYHRnM2AsIGBibnh0YCwgYGljZWAsIGBpNDBlYCwgYHI4MTY5YCwgYHN0bW1hY2AsIHJlcXVpcmUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIHNwZWNpZmljIHBsYXRmb3JtIGRldmljZXMgdGhhdCBkb24ndCBleGlzdCBpbiBzdGFuZGFyZCBzeXprYWxsZXIgVk1zLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBmdW5jdGlvbnMgbGlrZSBgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvYCBvciBhbnl0aGluZyBpbiBgc3RtbWFjX3RjLmNgIGNhbiBiZSByZWFjaGVkIHdpdGhvdXQgdGhlIGBzdG1tYWNgIGRldmljZSBiZWluZyBwcm9iZWQgYW5kIGluc3RhbnRpYXRlZC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gLiBJZiBpdCdzIGRlcGVuZGVudCBvbiBgc3RtbWFjYCAod2hpY2ggSSBoaWdobHkgc3VzcGVjdCksIHRoZW4gSSdtIG91dCBvZiBsdWNrIHdpdGhpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE2MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODoyMC4wNjYxODg5NDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNzk4MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY190Yy5jPTEyNjQ9c3RhdGljIGludCBzdG1tYWNfcmVzZXRfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTI3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMjc1OnN0YXRpYyBpbnQgdGNfc2V0dXBfZHdtYWM1MTBfbXFwcmlvKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMjc2LVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTM1ND1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzUxMF90Y19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzYxLVxcdC5xdWVyeV9jYXBzID0gdGNfcXVlcnlfY2FwcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMzYyOlxcdC5zZXR1cF9tcXByaW8gPSB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW8sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM2My19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODoyMC4xMTQzNzM1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MzEzODc4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGBkd21hYzUxMF90Y19vcHNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGR3bWFjNTEwX3RjX29wc2AgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBUaW1lIHRvIGdvIGRpZ2dpbmcuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIGl0cyBjYWxscywgZXNzZW50aWFsbHkgbWFwcGluZyBvdXQgdGhlIGNvZGUgcGF0aHMgdGhhdCBkZXBlbmQgb24gaXQuIFRoaXMgaXMgZnVuZGFtZW50YWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLCBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3RzIGlmIEkgd2VyZSB0byBtb2RpZnkgaXQuIEkgd2FudCB0byBzZWUgdGhpcyB0aGluZyBpbiBhY3Rpb24sIHNvIEkgbmVlZCB0byBmaW5kIGl0cyB1c2Ugd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk5MywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE1OjM4OjIzLjU0NTc2MzI1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE1OTAyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkd21hYzUxMF90Y19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTExMT1zdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0xOTktXFx0XFx0Lm1vZGUgPSBcXHUwMDI2ZHdtYWM0X3JpbmdfbW9kZV9vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIwMDpcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMDEtXFx0XFx0Lm1tYyA9IFxcdTAwMjZkd21hY19tbWNfb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIyMC1cXHRcXHQubW9kZSA9IFxcdTAwMjZkd21hYzRfcmluZ19tb2RlX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjIxOlxcdFxcdC50YyA9IFxcdTAwMjZkd21hYzUxMF90Y19vcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIyMi1cXHRcXHQubW1jID0gXFx1MDAyNmR3bWFjX21tY19vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQxLVxcdFxcdC5tb2RlID0gXFx1MDAyNmR3bWFjNF9yaW5nX21vZGVfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNDI6XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjQzLVxcdFxcdC5tbWMgPSBcXHUwMDI2ZHdtYWNfbW1jX29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yNjMtXFx0XFx0Lm1vZGUgPSBOVUxMLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzoyNjQ6XFx0XFx0LnRjID0gXFx1MDAyNmR3bWFjNTEwX3RjX29wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjY1LVxcdFxcdC5tbWMgPSBcXHUwMDI2ZHd4Z21hY19tbWNfb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTI4NS1cXHRcXHQubW9kZSA9IE5VTEwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjI4NjpcXHRcXHQudGMgPSBcXHUwMDI2ZHdtYWM1MTBfdGNfb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yODctXFx0XFx0Lm1tYyA9IFxcdTAwMjZkd3hnbWFjX21tY19vcHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg9NjkxPWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaDo2OTI6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNjkzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmM9MTM0Mz1jb25zdCBzdHJ1Y3Qgc3RtbWFjX3RjX29wcyBkd21hYzRfdGNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3RjLmMtMTM1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYzoxMzU0OmNvbnN0IHN0cnVjdCBzdG1tYWNfdGNfb3BzIGR3bWFjNTEwX3RjX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuYy0xMzU1LVxcdC5pbml0ID0gdGNfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTU6Mzg6MjMuNTkyOTI2NzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2NTg0NDIzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIHN0bW1hYyBuZXRkZXYgY2hhbmdlcyBmb3IgZnV6emluZyBhcHBsaWNhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgaW50byB0aGlzIHByb3Bvc2VkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgYHN0bW1hY2AgbmV0ZGV2IGludGVyYWN0cyB3aXRoIFRyYWZmaWMgQ29udHJvbCAodGMpLiBGcm9tIHdoYXQgSSd2ZSB0cmFjZWQsIHRoZSBgc3RtbWFjX3NldHVwX3RjYCBmdW5jdGlvbiwgd2hpY2ggaXMgZXNzZW50aWFsbHkgdGhlIGBuZG9fc2V0dXBfdGNgIGZvciBgc3RtbWFjYCBkZXZpY2VzLCBjYWxscyBpbnRvIGBzdG1tYWNfdGNfc2V0dXBgLiBUaGlzLCBpbiB0dXJuLCBsZWFkcyB0byBgc3RtbWFjX3RjX29wcy5zZXR1cF9tcXByaW9gIGFuZCB1bHRpbWF0ZWx5IGB0Y19zZXR1cF9kd21hYzUxMF9tcXByaW9gIHdoZW4gbXFwcmlvIG9yIHRhcHJpbyBhcmUgY29uZmlndXJlZC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgY2FuIHN5emthbGxlciBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZSwgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciB0aGUgdHlwaWNhbCBRRU1VL2FtZDY0IHNldHVwPyBUaGUgYW5zd2VyLCB1bmZvcnR1bmF0ZWx5LCBpcyBuby4gVGhlIGBzdG1tYWNgIGRyaXZlciBpcyBkZXNpZ25lZCBmb3IgU3lub3BzeXMgRGVzaWduV2FyZSBNQUMgRXRoZXJuZXQgY29udHJvbGxlcnMuIFRoZXNlIGFyZSB0eXBpY2FsbHkgZW1iZWRkZWQgd2l0aGluIHNwZWNpZmljIFNvQ3MgKEFSTSwgTUlQUywgZXRjLikgb3Igc3BlY2lmaWMgSW50ZWwgUENJIGNoaXBzZXRzIChsaWtlIEVsa2hhcnQgTGFrZSkuIFRoZXkgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBJUCBibG9ja3MgdGhhdCBhcmUgKm5vdCogZW11bGF0ZWQgaW4gdGhlIHN0YW5kYXJkIFFFTVUgb3IgR0NFIFZNcy4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBjcml0ZXJpYSBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhpcyBzaXR1YXRpb24uIFRoaXMgaXMgc2ltaWxhciB0byB2ZW5kb3JzIHNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHRoZSBzdGFuZGFyZCBRRU1VLlxuXG5Mb29raW5nIGF0IHRoZSBmaWxlcyB0aGF0IGFyZSBtb2RpZmllZCwgaXQncyBjbGVhcjogYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaGAgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfdGMuY2AuIEJvdGggb2YgdGhlc2UgZmlsZXMgYXJlIGVudGlyZWx5IHdpdGhpbiB0aGUgYHN0bW1hY2AgZGlyZWN0b3J5LCB3aGljaCBpcyB0aGUgdmVuZG9yIGRyaXZlciBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIGFuZCBTeW5vcHN5cyBEV01BQyBldGhlcm5ldCBkZXZpY2VzLiBUaGVyZSBhcmUgbm8gbW9kaWZpY2F0aW9ucyB0byBjb3JlIG5ldHdvcmtpbmcgY29kZSBvciBhbnkgZ2VuZXJpYyBzdWJzeXN0ZW0gY29kZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHRpZWQgdG8gdGhpcyBzcGVjaWZpYywgbm9uLWVtdWxhdGVkIGhhcmR3YXJlLCB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCBmdXp6aW5nIHdvdWxkIGFjdHVhbGx5IHRvdWNoIHRoZSBjaGFuZ2VzLiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAuIE15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGBzdG1tYWNgIEV0aGVybmV0IGRyaXZlciAoU3lub3BzeXMgRGVzaWduV2FyZSBFdGhlcm5ldCBNQUMpLCB3aGljaCByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBvciBwbGF0Zm9ybS9QQ0kgZGV2aWNlcy4gVGhpcyB0eXBlIG9mIGhhcmR3YXJlIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0Ugb24gYW1kNjQpLCBhbmQgdGh1cyB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgYmUgZW1wdHkuIEkgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg0LCJPdXRwdXRUb2tlbnMiOjExMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODozNC4yNTEzNzA5MzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzL1N5bm9wc3lzIERlc2lnbldhcmUgRXRoZXJuZXQgTUFDIChzdG1tYWMpIGRyaXZlciwgc3BlY2lmaWNhbGx5IFRDIG1xcHJpbyBhbmQgdGFwcmlvIG9mZmxvYWQgaGFuZGxpbmcgaW4gc3RtbWFjX3RjLmMuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFNvQyBvciBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzIChRRU1VL0dDRSBvbiBhbWQ2NCksIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNTozODozNC4yNTE0MDM0NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow7vpsw[1] Phase: Running StartedAt: 2026-09-09 15:38:44 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7vpsw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 15:38:44 +0000 UTC FinishedAt: 2026-09-09 15:38:49 +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,}