Name: series-workflow4bc9b Phase: Failed StartedAt: 2026-06-30 20:54:24 +0000 UTC FinishedAt: 2026-06-30 21:05:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bc9b[0] Phase: Succeeded StartedAt: 2026-06-30 20:54:24 +0000 UTC FinishedAt: 2026-06-30 21:05:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bc9b[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 20:54:24 +0000 UTC FinishedAt: 2026-06-30 21:05:01 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDIwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSE5TMyBuZXR3b3JrIGRyaXZlciB0byBzdXBwb3J0IHNldHRpbmcgYW5kIGdldHRpbmcgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dCB2aWEgZXRodG9vbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUgKG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMgZHVyaW5nIGZpcm13YXJlIGNvbW11bmljYXRpb24sIG1lYW5pbmcgdGhlIG5ldGRldiBpcyBuZXZlciByZWdpc3RlcmVkIGFuZCB0aGUgbW9kaWZpZWQgZXRodG9vbCBjYWxsYmFja3MgY2Fubm90IGJlIHJlYWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIwOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWJkMTJmMGE5MmIyMjRkYjU4MWJhMDNkMmQ2ZDk0MDg4M2VjNTcyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIwOjU5OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5pbmRleCBhODc5OGVlY2Q5ZmJkMC4uNDI4NmFmOTIzOWIwMTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5AQCAtNjAyLDYgJiM0Mzs2MDIsMTAgQEAgdHlwZWRlZiBpbnQgKCpyZWFkX2Z1bmMpKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSk7XG4gICogICBDb25maWcgd2FrZSBvbiBsYW5cbiAgKiBkYmdfZ2V0X3JlYWRfZnVuY1xuICAqICAgUmV0dXJuIHRoZSByZWFkIGZ1bmMgZm9yIGRlYnVnZnMgc2VxIGZpbGVcbiYjNDM7ICogc2V0X3BmY19wcmV2ZW50aW9uX3RvdXRcbiYjNDM7ICogICBTZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxuJiM0MzsgKiBnZXRfcGZjX3ByZXZlbnRpb25fdG91dFxuJiM0MzsgKiAgIEdldCBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0XG4gICovXG4gc3RydWN0IGhuYWUzX2FlX29wcyB7XG4gXHRpbnQgKCppbml0X2FlX2Rldikoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbkBAIC04MTAsNiAmIzQzOzgxNCw4IEBAIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqaHd0c3RhbXBfc2V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1x0aW50ICgqc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTE2IHRpbWVzKTtcbiYjNDM7XHRpbnQgKCpnZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgKnRpbWVzKTtcbiB9O1xuIFxuIHN0cnVjdCBobmFlM19kY2Jfb3BzIHtcbkBAIC04OTEsNiAmIzQzOzg5NywxNCBAQCBzdHJ1Y3QgaG5hZTNfcm9jZV9wcml2YXRlX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGF0ZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEge1xuJiM0MztcdHUzMiBkaXI7XG4mIzQzO1x0dTMyIGVuYWJsZTtcbiYjNDM7XHR1MzIgcGVyaW9kX21zO1xuJiM0MztcdHUzMiB0aW1lcztcbiYjNDM7XHR1MzIgcmVjb3ZlcnlfcGVyaW9kX21zO1xuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfQVBQX0xPT1BCQUNLICAgIEJJVCgwKVxuICNkZWZpbmUgSE5BRTNfU1VQUE9SVF9QSFlfTE9PUEJBQ0sgICAgQklUKDEpXG4gI2RlZmluZSBITkFFM19TVVBQT1JUX1NFUkRFU19TRVJJQUxfTE9PUEJBQ0tcdEJJVCgyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXG5pbmRleCAyYzJhMmYxZTBkN2E2Ni4uNmRkZTA3ZGRlMWU4ZWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXG5AQCAtMzE0LDYgJiM0MzszMTQsOSBAQCBlbnVtIGhjbGdlX29wY29kZV90eXBlIHtcbiBcbiBcdC8qIFF1ZXJ5IGxpbmsgZGlhZ25vc2lzIGluZm8gY29tbWFuZCAqL1xuIFx0SENMR0VfT1BDX1FVRVJZX0xJTktfRElBR05PU0lTXHQ9IDB4NzAyQSxcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlnIHBhdXNlIHN0b3JtIHBhcmFtIGNvbW1hbmQgKi9cbiYjNDM7XHRIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEgPSAweDcwMTksXG4gfTtcbiBcbiBlbnVtIGhjbGdlX2NvbW1fY21kX3JldHVybl9zdGF0dXMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmNcbmluZGV4IDQ0MmYxNTQ3NmFmMzJhLi5lNzMxOGYyMzYzMTU3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuY1xuQEAgLTE4OTUsNiAmIzQzOzE4OTUsMTIgQEAgc3RhdGljIGludCBobnMzX2dldF90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRjYXNlIEVUSFRPT0xfVFhfQ09QWUJSRUFLX0JVRl9TSVpFOlxuIFx0XHQqKHUzMiAqKWRhdGEgPSBoLVx1MDAzZWtpbmZvLnR4X3NwYXJlX2J1Zl9zaXplO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEVUSFRPT0xfUEZDX1BSRVZFTlRJT05fVE9VVDpcbiYjNDM7XHRcdGlmICghaC1cdTAwM2VhZV9hbGdvLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGZjX3ByZXZlbnRpb25fdG91dClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0YnJlYWs7XG5AQCAtMjAyMCw2ICYjNDM7MjAyNiwxMiBAQCBzdGF0aWMgaW50IGhuczNfc2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRuZXRkZXZfaW5mbyhuZXRkZXYsIFwmIzM0O3RoZSBhY3RpdmUgdHggc3BhcmUgYnVmIHNpemUgaXMgJXUsIGR1ZSB0byBwYWdlIG9yZGVyXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIHByaXYtXHUwMDNlcmluZy1cdTAwM2V0eF9zcGFyZS1cdTAwM2VsZW4pO1xuIFxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XG4mIzQzO1x0XHRpZiAoIWgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBoLVx1MDAzZWFlX2FsZ28tXHUwMDNlb3BzLVx1MDAzZXNldF9wZmNfcHJldmVudGlvbl90b3V0KGgsICoodTE2ICopZGF0YSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oXG5pbmRleCA0Y2U5MmRkZWZjZGVkMi4uMWMwMjlkYzMyYWI4ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaFxuQEAgLTg5MCw2ICYjNDM7ODkwLDE1IEBAIHN0cnVjdCBoY2xnZV9xdWVyeV93b2xfc3VwcG9ydGVkX2NtZCB7XG4gXHR1OCByc3ZbMjBdO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQge1xuJiM0MztcdF9fbGUzMiBkaXI7XG4mIzQzO1x0X19sZTMyIGVuYWJsZTtcbiYjNDM7XHRfX2xlMzIgcGVyaW9kX21zO1xuJiM0MztcdF9fbGUzMiB0aW1lcztcbiYjNDM7XHRfX2xlMzIgcmVjb3ZlcnlfcGVyaW9kX21zO1xuJiM0MztcdF9fbGUzMiByc3Y7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBoY2xnZV9odztcbiBpbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5pbmRleCBmYzg1ODdjODA4MTM3MS4uYTA4ZDhhMzVhZWY5ODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5AQCAtMzUyNCw2ICYjNDM7MzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEgKnBhcmEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICpwYXJhX2NtZDtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfZGVzYyBkZXNjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChoZGV2LVx1MDAzZWFlX2Rldi1cdTAwM2VkZXZfdmVyc2lvbiBcdTAwM2MgSE5BRTNfREVWSUNFX1ZFUlNJT05fVjMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGhjbGdlX2NtZF9zZXR1cF9iYXNpY19kZXNjKFx1MDAyNmRlc2MsIEhDTEdFX09QQ19DRkdfUEFVU0VfU1RPUk1fUEFSQSxcbiYjNDM7XHRcdFx0XHQgICBmYWxzZSk7XG4mIzQzO1x0cGFyYV9jbWQgPSAoc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqKWRlc2MuZGF0YTtcbiYjNDM7XHRwYXJhX2NtZC1cdTAwM2VkaXIgPSBjcHVfdG9fbGUzMihwYXJhLVx1MDAzZWRpcik7XG4mIzQzO1x0cGFyYV9jbWQtXHUwMDNlZW5hYmxlID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VlbmFibGUpO1xuJiM0MztcdHBhcmFfY21kLVx1MDAzZXBlcmlvZF9tcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlcGVyaW9kX21zKTtcbiYjNDM7XHRwYXJhX2NtZC1cdTAwM2V0aW1lcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNldGltZXMpO1xuJiM0MztcdHBhcmFfY21kLVx1MDAzZXJlY292ZXJ5X3BlcmlvZF9tcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfY21kX3NlbmQoXHUwMDI2aGRldi1cdTAwM2VodywgXHUwMDI2ZGVzYywgMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHNldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhICpwYXJhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqcGFyYV9jbWQ7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoaGRldi1cdTAwM2VhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRoY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYyhcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsIHRydWUpO1xuJiM0MztcdHBhcmFfY21kID0gKHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKilkZXNjLmRhdGE7XG4mIzQzO1x0cGFyYV9jbWQtXHUwMDNlZGlyID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VkaXIpO1xuJiM0MztcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFx1MDAyNmhkZXYtXHUwMDNlaHcsIFx1MDAyNmRlc2MsIDEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIGdldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFyYS1cdTAwM2VlbmFibGUgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cdTAwM2VlbmFibGUpO1xuJiM0MztcdHBhcmEtXHUwMDNlcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNlcGVyaW9kX21zKTtcbiYjNDM7XHRwYXJhLVx1MDAzZXRpbWVzID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNldGltZXMpO1xuJiM0MztcdHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGNsZ2VfZW5hYmxlX3BmY19zdG9ybV9wcmV2ZW50KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBkaXIsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmEgPSB7MH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFyYS5kaXIgPSBkaXI7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwYXJhLmVuYWJsZSA9IGVuYWJsZTtcbiYjNDM7XHRyZXR1cm4gaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHUxNiB0aW1lcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVx1MDAzZWJhY2s7XG4mIzQzO1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRpbWVzIFx1MDAzZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDt0aW1lcyAldSBzaG91bGQgYmUgbm8gbW9yZSB0aGFuICV1IVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dGltZXMsIEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFyYS5kaXIgPSBIQ0xHRV9ESVJfVFg7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwYXJhLmVuYWJsZSA9IHRpbWVzID8gMSA6IDA7XG4mIzQzO1x0cGFyYS50aW1lcyA9ICh1MzIpdGltZXM7XG4mIzQzO1x0cmV0ID0gaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQgPSB0aW1lcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGNsZ2VfZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaCwgdTE2ICp0aW1lcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVx1MDAzZWJhY2s7XG4mIzQzO1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFyYS5kaXIgPSBIQ0xHRV9ESVJfVFg7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqdGltZXMgPSBwYXJhLmVuYWJsZSA/ICh1MTYpcGFyYS50aW1lcyA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhjbGdlX3NldF9yZXNldF9wZW5kaW5nKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRcdFx0XHQgICAgZW51bSBobmFlM19yZXNldF90eXBlIHJlc2V0X3R5cGUpXG4ge1xuQEAgLTQzMTcsNiAmIzQzOzQ0MzMsMjYgQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gaGNsZ2VfcmVzZXRfcHJlcGFyZV93YWl0KGhkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRlbHNlIGlmIChyZXQpXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaGFuZGxlLCBoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIHNldCB0eCBwZmMgc3Rvcm0gcHJldmVudCwgcmV0ID0gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcmVidWlsZChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuIHtcbiBcdGludCByZXQ7XG5AQCAtOTI3OCw2ICYjNDM7OTQxNCwzMiBAQCBzdGF0aWMgaW50IGhjbGdlX2luaXRfd29sKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gaGNsZ2VfdXBkYXRlX3dvbChoZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGhjbGdlX2luaXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFswXS5uaWM7XG4mIzQzO1x0dTE2IHRpbWVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChoZGV2LCBIQ0xHRV9ESVJfUlgsIGZhbHNlKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGVsc2UgaWYgKHJldClcbiYjNDM7XHRcdGRldl93YXJuKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSByeCBwZmMgc3Rvcm0gcHJldmVudCwgcmV0ID0gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCByZXQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIFx1MDAyNnRpbWVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIGdldCB0eCBwZmMgcHJldmVudGlvbiB0aW1lb3V0LCByZXQgPSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IHJldCk7XG4mIzQzO1x0XHR0aW1lcyA9IEhDTEdFX0RFRkFVTFRfUEZDX1BSRVZFTlRJT05fVE9VVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkZXYtXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dCA9IHRpbWVzO1xuJiM0MztcdGhkZXYtXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0ID0gdGltZXM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaGNsZ2VfZ2V0X3dvbChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4ge1xuQEAgLTk1NDcsNiAmIzQzOzk3MDksOCBAQCBzdGF0aWMgaW50IGhjbGdlX2luaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiBcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0IFwmIzM0O2ZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxcblwmIzM0OywgcmV0KTtcbiBcbiYjNDM7XHRoY2xnZV9pbml0X3BmY19wcmV2ZW50aW9uX3RvdXQoaGRldik7XG4mIzQzO1xuIFx0cmV0ID0gaGNsZ2VfZGV2bGlua19pbml0KGhkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfcHRwX3VuaW5pdDtcbkBAIC05OTQ2LDYgJiM0MzsxMDExMCw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiBcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0IFwmIzM0O2ZhaWxlZCB0byB1cGRhdGUgd29sIGNvbmZpZywgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4gXG4mIzQzO1x0aGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KGhkZXYpO1xuJiM0MztcbiBcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtSZXNldCBkb25lLCAlcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmluaXNoZWQuXFxuXCYjMzQ7LFxuIFx0XHQgSENMR0VfRFJJVkVSX05BTUUpO1xuIFxuQEAgLTk5NzcsNiAmIzQzOzEwMTQzLDEwIEBAIHN0YXRpYyB2b2lkIGhjbGdlX3VuaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuIFx0aGNsZ2VfY29uZmlnX25pY19od19lcnJvcihoZGV2LCBmYWxzZSk7XG4gXHRoY2xnZV9jb25maWdfcm9jZWVfcmFzX2ludGVycnVwdChoZGV2LCBmYWxzZSk7XG4gXG4mIzQzO1x0LyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi9cbiYjNDM7XHRoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChcdTAwMjZoZGV2LVx1MDAzZXZwb3J0LVx1MDAzZW5pYyxcbiYjNDM7XHRcdFx0XHQgICAgICBoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdCk7XG4mIzQzO1xuIFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0KGhkZXYtXHUwMDNlYWVfZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3KTtcbiBcdGhjbGdlX21pc2NfaXJxX3VuaW5pdChoZGV2KTtcbiBcdGhjbGdlX2RldmxpbmtfdW5pbml0KGhkZXYpO1xuQEAgLTEwNTM5LDYgJiM0MzsxMDcwOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcbiBcdC5zZXRfd29sID0gaGNsZ2Vfc2V0X3dvbCxcbiBcdC5od3RzdGFtcF9nZXQgPSBoY2xnZV9wdHBfZ2V0X2NmZyxcbiBcdC5od3RzdGFtcF9zZXQgPSBoY2xnZV9wdHBfc2V0X2NmZyxcbiYjNDM7XHQuc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQgPSBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dCxcbiYjNDM7XHQuZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaG5hZTNfYWVfYWxnbyBhZV9hbGdvID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5pbmRleCA3NDE5NDgxNDIyYzMxMC4uMGNlZTg5NDdmNmI0NGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5AQCAtMzQ2LDYgJiM0MzszNDYsMTEgQEAgZW51bSBoY2xnZV9saW5rX2ZhaWxfY29kZSB7XG4gI2RlZmluZSBIQ0xHRV9MSU5LX1NUQVRVU19ET1dOIDBcbiAjZGVmaW5lIEhDTEdFX0xJTktfU1RBVFVTX1VQICAgMVxuIFxuJiM0MzsjZGVmaW5lIEhDTEdFX0RJUl9SWCAwXG4mIzQzOyNkZWZpbmUgSENMR0VfRElSX1RYIDFcbiYjNDM7I2RlZmluZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVFx0XHQyMDAwXG4mIzQzOyNkZWZpbmUgSENMR0VfREVGQVVMVF9QRkNfUFJFVkVOVElPTl9UT1VUXHQxMDAwXG4mIzQzO1xuICNkZWZpbmUgSENMR0VfUEdfTlVNXHRcdDRcbiAjZGVmaW5lIEhDTEdFX1NDSF9NT0RFX1NQXHQwXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9EV1JSXHQxXG5AQCAtODk4LDYgJiM0Mzs5MDMsOCBAQCBzdHJ1Y3QgaGNsZ2VfZGV2IHtcbiBcdHUxNiB2Zl9yc3Nfc2l6ZV9tYXg7XHRcdC8qIEhXIGRlZmluZWQgVkYgbWF4IFJTUyB0YXNrIHF1ZXVlICovXG4gXHR1MTYgcGZfcnNzX3NpemVfbWF4O1x0XHQvKiBIVyBkZWZpbmVkIFBGIG1heCBSU1MgdGFzayBxdWV1ZSAqL1xuIFx0dTMyIHR4X3NwYXJlX2J1Zl9zaXplO1x0XHQvKiBIVyBkZWZpbmVkIFRYIHNwYXJlIGJ1ZmZlciBzaXplICovXG4mIzQzO1x0dTE2IHBmY19wcmV2ZW50aW9uX3RvdXQ7XHQvKiBVc2VyIGNvbmZpZywgcmVzdG9yZWQgYWZ0ZXIgcmVzZXQgKi9cbiYjNDM7XHR1MTYgcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0OyAvKiBIVyBkZWZhdWx0LCB0byBhdm9pZCBzdGFsZSBzdGF0ZSAqL1xuIFxuIFx0dTE2IGZkaXJfcGZfZmlsdGVyX2NvdW50OyAvKiBOdW0gb2YgZ3VhcmFudGVlZCBmaWx0ZXJzIGZvciB0aGlzIFBGICovXG4gXHR1MTYgbnVtX2FsbG9jX3Zwb3J0O1x0XHQvKiBOdW0gdnBvcnRzIHRoaXMgZHJpdmVyIHN1cHBvcnRzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjA6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBITlMzIG5ldHdvcmsgZHJpdmVyIHRvIHN1cHBvcnQgc2V0dGluZyBhbmQgZ2V0dGluZyBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHZpYSBldGh0b29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSAob3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cykgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlciBwcm9iZSBmYWlscyBkdXJpbmcgZmlybXdhcmUgY29tbXVuaWNhdGlvbiwgbWVhbmluZyB0aGUgbmV0ZGV2IGlzIG5ldmVyIHJlZ2lzdGVyZWQgYW5kIHRoZSBtb2RpZmllZCBldGh0b29sIGNhbGxiYWNrcyBjYW5ub3QgYmUgcmVhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGViZDEyZjBhOTJiMjI0ZGI1ODFiYTAzZDJkNmQ5NDA4ODNlYzU3MjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAyMDo1OTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oCmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi40Mjg2YWY5MjM5YjAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oCkBAIC02MDIsNiAmIzQzOzYwMiwxMCBAQCB0eXBlZGVmIGludCAoKnJlYWRfZnVuYykoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKTsKICAqICAgQ29uZmlnIHdha2Ugb24gbGFuCiAgKiBkYmdfZ2V0X3JlYWRfZnVuYwogICogICBSZXR1cm4gdGhlIHJlYWQgZnVuYyBmb3IgZGVidWdmcyBzZXEgZmlsZQomIzQzOyAqIHNldF9wZmNfcHJldmVudGlvbl90b3V0CiYjNDM7ICogICBTZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dAomIzQzOyAqIGdldF9wZmNfcHJldmVudGlvbl90b3V0CiYjNDM7ICogICBHZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dAogICovCiBzdHJ1Y3QgaG5hZTNfYWVfb3BzIHsKIAlpbnQgKCppbml0X2FlX2Rldikoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTsKQEAgLTgxMCw2ICYjNDM7ODE0LDggQEAgc3RydWN0IGhuYWUzX2FlX29wcyB7CiAJaW50ICgqaHd0c3RhbXBfc2V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsCiAJCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZywKIAkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwlpbnQgKCpzZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgdGltZXMpOwomIzQzOwlpbnQgKCpnZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgKnRpbWVzKTsKIH07CiAKIHN0cnVjdCBobmFlM19kY2Jfb3BzIHsKQEAgLTg5MSw2ICYjNDM7ODk3LDE0IEBAIHN0cnVjdCBobmFlM19yb2NlX3ByaXZhdGVfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIH07CiAKJiM0MztzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEgewomIzQzOwl1MzIgZGlyOwomIzQzOwl1MzIgZW5hYmxlOwomIzQzOwl1MzIgcGVyaW9kX21zOwomIzQzOwl1MzIgdGltZXM7CiYjNDM7CXUzMiByZWNvdmVyeV9wZXJpb2RfbXM7CiYjNDM7fTsKJiM0MzsKICNkZWZpbmUgSE5BRTNfU1VQUE9SVF9BUFBfTE9PUEJBQ0sgICAgQklUKDApCiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfUEhZX0xPT1BCQUNLICAgIEJJVCgxKQogI2RlZmluZSBITkFFM19TVVBQT1JUX1NFUkRFU19TRVJJQUxfTE9PUEJBQ0sJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaAppbmRleCAyYzJhMmYxZTBkN2E2Ni4uNmRkZTA3ZGRlMWU4ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaApAQCAtMzE0LDYgJiM0MzszMTQsOSBAQCBlbnVtIGhjbGdlX29wY29kZV90eXBlIHsKIAogCS8qIFF1ZXJ5IGxpbmsgZGlhZ25vc2lzIGluZm8gY29tbWFuZCAqLwogCUhDTEdFX09QQ19RVUVSWV9MSU5LX0RJQUdOT1NJUwk9IDB4NzAyQSwKJiM0MzsKJiM0MzsJLyogQ29uZmlnIHBhdXNlIHN0b3JtIHBhcmFtIGNvbW1hbmQgKi8KJiM0MzsJSENMR0VfT1BDX0NGR19QQVVTRV9TVE9STV9QQVJBID0gMHg3MDE5LAogfTsKIAogZW51bSBoY2xnZV9jb21tX2NtZF9yZXR1cm5fc3RhdHVzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmMKaW5kZXggNDQyZjE1NDc2YWYzMmEuLmU3MzE4ZjIzNjMxNTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYwpAQCAtMTg5NSw2ICYjNDM7MTg5NSwxMiBAQCBzdGF0aWMgaW50IGhuczNfZ2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAljYXNlIEVUSFRPT0xfVFhfQ09QWUJSRUFLX0JVRl9TSVpFOgogCQkqKHUzMiAqKWRhdGEgPSBoLSZndDtraW5mby50eF9zcGFyZV9idWZfc2l6ZTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUOgomIzQzOwkJaWYgKCFoLSZndDthZV9hbGdvLSZndDtvcHMtJmd0O2dldF9wZmNfcHJldmVudGlvbl90b3V0KQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJCXJldCA9IGgtJmd0O2FlX2FsZ28tJmd0O29wcy0mZ3Q7Z2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWJyZWFrOwpAQCAtMjAyMCw2ICYjNDM7MjAyNiwxMiBAQCBzdGF0aWMgaW50IGhuczNfc2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCW5ldGRldl9pbmZvKG5ldGRldiwgJiMzNDt0aGUgYWN0aXZlIHR4IHNwYXJlIGJ1ZiBzaXplIGlzICV1LCBkdWUgdG8gcGFnZSBvcmRlclxuJiMzNDssCiAJCQkJICAgIHByaXYtJmd0O3JpbmctJmd0O3R4X3NwYXJlLSZndDtsZW4pOwogCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6CiYjNDM7CQlpZiAoIWgtJmd0O2FlX2FsZ28tJmd0O29wcy0mZ3Q7c2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkJcmV0ID0gaC0mZ3Q7YWVfYWxnby0mZ3Q7b3BzLSZndDtzZXRfcGZjX3ByZXZlbnRpb25fdG91dChoLCAqKHUxNiAqKWRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaAppbmRleCA0Y2U5MmRkZWZjZGVkMi4uMWMwMjlkYzMyYWI4ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmgKQEAgLTg5MCw2ICYjNDM7ODkwLDE1IEBAIHN0cnVjdCBoY2xnZV9xdWVyeV93b2xfc3VwcG9ydGVkX2NtZCB7CiAJdTggcnN2WzIwXTsKIH07CiAKJiM0MztzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kIHsKJiM0MzsJX19sZTMyIGRpcjsKJiM0MzsJX19sZTMyIGVuYWJsZTsKJiM0MzsJX19sZTMyIHBlcmlvZF9tczsKJiM0MzsJX19sZTMyIHRpbWVzOwomIzQzOwlfX2xlMzIgcmVjb3ZlcnlfcGVyaW9kX21zOwomIzQzOwlfX2xlMzIgcnN2OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgaGNsZ2VfaHc7CiBpbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYwppbmRleCBmYzg1ODdjODA4MTM3MS4uYTA4ZDhhMzVhZWY5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYwpAQCAtMzUyNCw2ICYjNDM7MzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kOwomIzQzOwlzdHJ1Y3QgaGNsZ2VfZGVzYyBkZXNjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoaGRldi0mZ3Q7YWVfZGV2LSZndDtkZXZfdmVyc2lvbiAmbHQ7IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwloY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYygmYW1wO2Rlc2MsIEhDTEdFX09QQ19DRkdfUEFVU0VfU1RPUk1fUEFSQSwKJiM0MzsJCQkJICAgZmFsc2UpOwomIzQzOwlwYXJhX2NtZCA9IChzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICopZGVzYy5kYXRhOwomIzQzOwlwYXJhX2NtZC0mZ3Q7ZGlyID0gY3B1X3RvX2xlMzIocGFyYS0mZ3Q7ZGlyKTsKJiM0MzsJcGFyYV9jbWQtJmd0O2VuYWJsZSA9IGNwdV90b19sZTMyKHBhcmEtJmd0O2VuYWJsZSk7CiYjNDM7CXBhcmFfY21kLSZndDtwZXJpb2RfbXMgPSBjcHVfdG9fbGUzMihwYXJhLSZndDtwZXJpb2RfbXMpOwomIzQzOwlwYXJhX2NtZC0mZ3Q7dGltZXMgPSBjcHVfdG9fbGUzMihwYXJhLSZndDt0aW1lcyk7CiYjNDM7CXBhcmFfY21kLSZndDtyZWNvdmVyeV9wZXJpb2RfbXMgPSBjcHVfdG9fbGUzMihwYXJhLSZndDtyZWNvdmVyeV9wZXJpb2RfbXMpOwomIzQzOwomIzQzOwlyZXQgPSBoY2xnZV9jbWRfc2VuZCgmYW1wO2hkZXYtJmd0O2h3LCAmYW1wO2Rlc2MsIDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2VycigmYW1wO2hkZXYtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgcGZjIHN0b3JtIHBhcmEsIHJldCA9ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kOwomIzQzOwlzdHJ1Y3QgaGNsZ2VfZGVzYyBkZXNjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoaGRldi0mZ3Q7YWVfZGV2LSZndDtkZXZfdmVyc2lvbiAmbHQ7IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwloY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYygmYW1wO2Rlc2MsIEhDTEdFX09QQ19DRkdfUEFVU0VfU1RPUk1fUEFSQSwgdHJ1ZSk7CiYjNDM7CXBhcmFfY21kID0gKHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKilkZXNjLmRhdGE7CiYjNDM7CXBhcmFfY21kLSZndDtkaXIgPSBjcHVfdG9fbGUzMihwYXJhLSZndDtkaXIpOwomIzQzOwlyZXQgPSBoY2xnZV9jbWRfc2VuZCgmYW1wO2hkZXYtJmd0O2h3LCAmYW1wO2Rlc2MsIDEpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIGdldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXJhLSZndDtlbmFibGUgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC0mZ3Q7ZW5hYmxlKTsKJiM0MzsJcGFyYS0mZ3Q7cGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtJmd0O3BlcmlvZF9tcyk7CiYjNDM7CXBhcmEtJmd0O3RpbWVzID0gbGUzMl90b19jcHUocGFyYV9jbWQtJmd0O3RpbWVzKTsKJiM0MzsJcGFyYS0mZ3Q7cmVjb3ZlcnlfcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtJmd0O3JlY292ZXJ5X3BlcmlvZF9tcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAomIzQzOwkJCQkJICBpbnQgZGlyLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhID0gezB9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwYXJhLmRpciA9IGRpcjsKJiM0MzsJcmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsICZhbXA7cGFyYSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwYXJhLmVuYWJsZSA9IGVuYWJsZTsKJiM0MzsJcmV0dXJuIGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCAmYW1wO3BhcmEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHUxNiB0aW1lcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7CiYjNDM7CXN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC0mZ3Q7YmFjazsKJiM0MzsJc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh0aW1lcyAmZ3Q7IEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7dGltZXMgJXUgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAldSFcbiYjMzQ7LAomIzQzOwkJCXRpbWVzLCBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXJhLmRpciA9IEhDTEdFX0RJUl9UWDsKJiM0MzsJcmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsICZhbXA7cGFyYSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwYXJhLmVuYWJsZSA9IHRpbWVzID8gMSA6IDA7CiYjNDM7CXBhcmEudGltZXMgPSAodTMyKXRpbWVzOwomIzQzOwlyZXQgPSBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgJmFtcDtwYXJhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWhkZXYtJmd0O3BmY19wcmV2ZW50aW9uX3RvdXQgPSB0aW1lczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGNsZ2VfZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaCwgdTE2ICp0aW1lcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7CiYjNDM7CXN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC0mZ3Q7YmFjazsKJiM0MzsJc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhcmEuZGlyID0gSENMR0VfRElSX1RYOwomIzQzOwlyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgJmFtcDtwYXJhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSp0aW1lcyA9IHBhcmEuZW5hYmxlID8gKHUxNilwYXJhLnRpbWVzIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaGNsZ2Vfc2V0X3Jlc2V0X3BlbmRpbmcoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKIAkJCQkgICAgZW51bSBobmFlM19yZXNldF90eXBlIHJlc2V0X3R5cGUpCiB7CkBAIC00MzE3LDYgJiM0Mzs0NDMzLDI2IEBAIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KQogCXJldHVybiBoY2xnZV9yZXNldF9wcmVwYXJlX3dhaXQoaGRldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBoY2xnZV9yZXN0b3JlX3BmY19zdG9ybV9wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhjbGdlX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9ICZhbXA7aGRldi0mZ3Q7dnBvcnRbMF0ubmljOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7CiYjNDM7CWlmIChyZXQgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQlyZXR1cm47CiYjNDM7CWVsc2UgaWYgKHJldCkKJiM0MzsJCWRldl93YXJuKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHJ4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxuJiMzNDssCiYjNDM7CQkJIHJldCk7CiYjNDM7CiYjNDM7CXJldCA9IGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KGhhbmRsZSwgaGRldi0mZ3Q7cGZjX3ByZXZlbnRpb25fdG91dCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfd2FybigmYW1wO2hkZXYtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtmYWlsZWQgdG8gc2V0IHR4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxuJiMzNDssCiYjNDM7CQkJIHJldCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBoY2xnZV9yZXNldF9yZWJ1aWxkKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpCiB7CiAJaW50IHJldDsKQEAgLTkyNzgsNiAmIzQzOzk0MTQsMzIgQEAgc3RhdGljIGludCBoY2xnZV9pbml0X3dvbChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KQogCXJldHVybiBoY2xnZV91cGRhdGVfd29sKGhkZXYpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaGNsZ2VfaW5pdF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSAmYW1wO2hkZXYtJmd0O3Zwb3J0WzBdLm5pYzsKJiM0MzsJdTE2IHRpbWVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7CiYjNDM7CWlmIChyZXQgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQlyZXR1cm47CiYjNDM7CWVsc2UgaWYgKHJldCkKJiM0MzsJCWRldl93YXJuKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHJ4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxuJiMzNDssCiYjNDM7CQkJIHJldCk7CiYjNDM7CiYjNDM7CXJldCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0KGhhbmRsZSwgJmFtcDt0aW1lcyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl93YXJuKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZhaWxlZCB0byBnZXQgdHggcGZjIHByZXZlbnRpb24gdGltZW91dCwgcmV0ID0gJWRcbiYjMzQ7LAomIzQzOwkJCSByZXQpOwomIzQzOwkJdGltZXMgPSBIQ0xHRV9ERUZBVUxUX1BGQ19QUkVWRU5USU9OX1RPVVQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGRldi0mZ3Q7cGZjX3ByZXZlbnRpb25fdG91dCA9IHRpbWVzOwomIzQzOwloZGV2LSZndDtwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQgPSB0aW1lczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBoY2xnZV9nZXRfd29sKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKIAkJCSAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewpAQCAtOTU0Nyw2ICYjNDM7OTcwOSw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KQogCQlkZXZfd2FybigmYW1wO3BkZXYtJmd0O2RldiwKIAkJCSAmIzM0O2ZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxuJiMzNDssIHJldCk7CiAKJiM0MzsJaGNsZ2VfaW5pdF9wZmNfcHJldmVudGlvbl90b3V0KGhkZXYpOwomIzQzOwogCXJldCA9IGhjbGdlX2RldmxpbmtfaW5pdChoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9wdHBfdW5pbml0OwpAQCAtOTk0Niw2ICYjNDM7MTAxMTAsOCBAQCBzdGF0aWMgaW50IGhjbGdlX3Jlc2V0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpCiAJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LAogCQkJICYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSB3b2wgY29uZmlnLCByZXQgPSAlZFxuJiMzNDssIHJldCk7CiAKJiM0MzsJaGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KGhkZXYpOwomIzQzOwogCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O1Jlc2V0IGRvbmUsICVzIGRyaXZlciBpbml0aWFsaXphdGlvbiBmaW5pc2hlZC5cbiYjMzQ7LAogCQkgSENMR0VfRFJJVkVSX05BTUUpOwogCkBAIC05OTc3LDYgJiM0MzsxMDE0MywxMCBAQCBzdGF0aWMgdm9pZCBoY2xnZV91bmluaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldikKIAloY2xnZV9jb25maWdfbmljX2h3X2Vycm9yKGhkZXYsIGZhbHNlKTsKIAloY2xnZV9jb25maWdfcm9jZWVfcmFzX2ludGVycnVwdChoZGV2LCBmYWxzZSk7CiAKJiM0MzsJLyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi8KJiM0MzsJaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoJmFtcDtoZGV2LSZndDt2cG9ydC0mZ3Q7bmljLAomIzQzOwkJCQkgICAgICBoZGV2LSZndDtwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQpOwomIzQzOwogCWhjbGdlX2NvbW1fY21kX3VuaW5pdChoZGV2LSZndDthZV9kZXYsICZhbXA7aGRldi0mZ3Q7aHcuaHcpOwogCWhjbGdlX21pc2NfaXJxX3VuaW5pdChoZGV2KTsKIAloY2xnZV9kZXZsaW5rX3VuaW5pdChoZGV2KTsKQEAgLTEwNTM5LDYgJiM0MzsxMDcwOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHsKIAkuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsCiAJLmh3dHN0YW1wX2dldCA9IGhjbGdlX3B0cF9nZXRfY2ZnLAogCS5od3RzdGFtcF9zZXQgPSBoY2xnZV9wdHBfc2V0X2NmZywKJiM0MzsJLnNldF9wZmNfcHJldmVudGlvbl90b3V0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQsCiYjNDM7CS5nZXRfcGZjX3ByZXZlbnRpb25fdG91dCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBobmFlM19hZV9hbGdvIGFlX2FsZ28gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaAppbmRleCA3NDE5NDgxNDIyYzMxMC4uMGNlZTg5NDdmNmI0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaApAQCAtMzQ2LDYgJiM0MzszNDYsMTEgQEAgZW51bSBoY2xnZV9saW5rX2ZhaWxfY29kZSB7CiAjZGVmaW5lIEhDTEdFX0xJTktfU1RBVFVTX0RPV04gMAogI2RlZmluZSBIQ0xHRV9MSU5LX1NUQVRVU19VUCAgIDEKIAomIzQzOyNkZWZpbmUgSENMR0VfRElSX1JYIDAKJiM0MzsjZGVmaW5lIEhDTEdFX0RJUl9UWCAxCiYjNDM7I2RlZmluZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVAkJMjAwMAomIzQzOyNkZWZpbmUgSENMR0VfREVGQVVMVF9QRkNfUFJFVkVOVElPTl9UT1VUCTEwMDAKJiM0MzsKICNkZWZpbmUgSENMR0VfUEdfTlVNCQk0CiAjZGVmaW5lIEhDTEdFX1NDSF9NT0RFX1NQCTAKICNkZWZpbmUgSENMR0VfU0NIX01PREVfRFdSUgkxCkBAIC04OTgsNiAmIzQzOzkwMyw4IEBAIHN0cnVjdCBoY2xnZV9kZXYgewogCXUxNiB2Zl9yc3Nfc2l6ZV9tYXg7CQkvKiBIVyBkZWZpbmVkIFZGIG1heCBSU1MgdGFzayBxdWV1ZSAqLwogCXUxNiBwZl9yc3Nfc2l6ZV9tYXg7CQkvKiBIVyBkZWZpbmVkIFBGIG1heCBSU1MgdGFzayBxdWV1ZSAqLwogCXUzMiB0eF9zcGFyZV9idWZfc2l6ZTsJCS8qIEhXIGRlZmluZWQgVFggc3BhcmUgYnVmZmVyIHNpemUgKi8KJiM0MzsJdTE2IHBmY19wcmV2ZW50aW9uX3RvdXQ7CS8qIFVzZXIgY29uZmlnLCByZXN0b3JlZCBhZnRlciByZXNldCAqLwomIzQzOwl1MTYgcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0OyAvKiBIVyBkZWZhdWx0LCB0byBhdm9pZCBzdGFsZSBzdGF0ZSAqLwogCiAJdTE2IGZkaXJfcGZfZmlsdGVyX2NvdW50OyAvKiBOdW0gb2YgZ3VhcmFudGVlZCBmaWx0ZXJzIGZvciB0aGlzIFBGICovCiAJdTE2IG51bV9hbGxvY192cG9ydDsJCS8qIE51bSB2cG9ydHMgdGhpcyBkcml2ZXIgc3VwcG9ydHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBGQyBTdG9ybSBQcmV2ZW50aW9uIFBhdGNoIGZvciB0aGUgSE5TMyBEcml2ZXIqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBjb21pbmcgaW4gdGhhdCBhZGRzIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZ2V0IHRoZSBQcmlvcml0eSBGbG93IENvbnRyb2wgKFBGQykgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHdpdGhpbiB0aGUgSE5TMyBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgaXQgcHJpbWFyaWx5IHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jYCB0byBhZGQgdGhlIG5lY2Vzc2FyeSBgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUYCBob29rcyBmb3IgYGhuczNfZ2V0X3R1bmFibGVgIGFuZCBgaG5zM19zZXRfdHVuYWJsZWAuIFRoZW4sIG9uIHRoZSBIQ0xHRSBQRiBzaWRlLCAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNgIGdldHMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdldCBhbmQgc2V0IGZ1bmN0aW9ucywgbmFtZWx5IGBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dGAgYW5kIGBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB3ZSBmdXp6IHRoaXM/IFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGhuczNgLCB3aGljaCBJIHJlbWVtYmVyIGlzIGEgUENJIGRyaXZlci4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGFjY2Vzc2liaWxpdHkgb2YgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXJzIGFyZSBvZnRlbiBkaWZmaWN1bHQgdG8gcmVhY2ggZGlyZWN0bHkgdW5sZXNzIHdlJiMzOTtyZSB1c2luZyBzb21ldGhpbmcgbGlrZSBRRU1VIHdpdGggc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIG9yIGxldmVyYWdpbmcgdG9vbHMgbGlrZSBzeXotdXNiL3N5ei1wY2kuCgpXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdyDigJMgYHN5ei1wY2lgISBCdXQgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgSGlzaWxpY29uIEhOUzM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaG5zM2AgaXMgaW5kZWVkIGEgUENJIGRyaXZlciB0byBjb25maXJtIG15IGZ1enppbmcgYXBwcm9hY2guIExldCYjMzk7cyBzZWUuLi4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNgIGlzIHBhcnQgb2YgdGhlIGBobnMzYCBkcml2ZXIsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIFBDSSBkcml2ZXIgaW5zdGFudGlhdGlvbi4gSSBzaG91bGQgc2VhcmNoIGZvciBgcGNpX2RyaXZlcmAgZGVjbGFyYXRpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzYCBkaXJlY3RvcnkgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzM1NT1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaG5zM19wbV9vcHMsIGhuczNfc3VzcGVuZCwgaG5zM19yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMzNTc6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhuczNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1OC1cdC5uYW1lICAgICA9IGhuczNfZHJpdmVyX25hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUENJIERyaXZlcioqCgpPa2F5LCBzbyBpdCYjMzk7cyBjb25maXJtZWQsIHRoaXMgaXMgYSBQQ0kgZHJpdmVyLiBUaGUgbmV4dCBxdWVzdGlvbiwgbmF0dXJhbGx5LCBpcyB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBzdXNjZXB0aWJsZSB0byBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBQQ0kgZGV2aWNlIGJlIGZ1enplZCB1c2luZyBgc3l6LXBjaWA/IEkga25vdyB0aGF0JiMzOTtzIHRoZSBjb21tb24gYXBwcm9hY2gsIGVzcGVjaWFsbHkgd2hlbiB0aGUgUENJIElEcyBhcmUga25vd24gYW5kIHN5emthbGxlciBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBQQ0kgZGV2aWNlcyBvZnRlbiAqY2FuKiBiZSBlbXVsYXRlZCBvciBmdXp6ZWQgdGhpcyB3YXkuCgpIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHVzdWFsIGh1cmRsZXMuIFNwZWNpZmljYWxseSwgY29uc2lkZXJpbmcgbXkgZXhwZXJpZW5jZSwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgcGFydGljdWxhcmx5IGNvbXBsZXggb25lcyBsaWtlIG5ldHdvcmsgY2FyZHMsIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gbWVhbmluZ2Z1bGx5IGZ1enogd2l0aG91dCBhIHJvYnVzdCBlbXVsYXRvci4gRXZlbiB0aG91Z2ggc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplciwgaXQmIzM5O3Mgb2Z0ZW4gbm90IGVub3VnaCBvbiBpdHMgb3duLgoKTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSBzb21ldGhpbmcgaW1wb3J0YW50IGFib3V0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgbWVudGlvbnMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgVGhpcyByYWlzZXMgYSByZWQgZmxhZy4gSXMgdGhlcmUgYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBvcHRpb24gc3BlY2lmaWNhbGx5IGZvciBIaXNpbGljb24gSE5TMz8gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyBvbmUsIGFuZCB0aGF04oCZcyBhIHByb2JsZW0uCgpDYW4gYHN5ei1wY2lgIGV2ZW4gKnJlYWNoKiB0aGlzIHRoaW5nPyBJdCBjYW4gY2VydGFpbmx5IHByb2JlIGl0LCBidXQgZ2V0dGluZyB0aGUgZGV2aWNlIHNldCB1cCB0byBhIHBvaW50IHdoZXJlIGBldGh0b29sYCBjb21tYW5kcyBjYW4gZXZlbiBiZSBzZW50IHRvIHRoZSBuZXRkZXYgcmVxdWlyZXMgYSAqc3VjY2Vzc2Z1bCogcHJvYmUuIEFuZCwgd2l0aCB0aGVzZSBraW5kcyBvZiBjb21wbGV4IG5ldHdvcmsgY2FyZHMsIHByb2JlIGZhaWx1cmVzIGFyZSB0aGUgbm9ybSB1bmxlc3MgdGhlIGhhcmR3YXJlIGlzIHBoeXNpY2FsbHkgcHJlc2VudCBvciBwZXJmZWN0bHkgZW11bGF0ZWQuIFByb2JlcyBmYWlsIGJlY2F1c2UgdGhleSBvZnRlbiBpbnZvbHZlIHJlYWRpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzLCB3YWl0aW5nIGZvciBzcGVjaWZpYyBiaXRzIHRvIGJlIHNldCwgYW5kIG90aGVyIGhhcmR3YXJlLWRlcGVuZGVudCBvcGVyYXRpb25zLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYGhjbGdlX21haW4uY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyBEb3duIHRoZSBQRiBEcml2ZXIgaW4gdGhlIEhDTEdFIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHByaW1hcnkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXIgaXMgd2l0aGluIHRoZSBIQ0xHRSBjb2RlLiBJbml0aWFsbHksIG15IGluc3RpbmN0cyBwaW5nZWQgYGhjbGdlX21haW4uY2AgYXMgYSBsaWtlbHkgY29udGVuZGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBkcml2ZXIgZnVuY3Rpb25hbGl0eS4gQnV0LCBJIGtub3cgdGhlc2UgdGhpbmdzIGNhbiBiZSBzdHJ1Y3R1cmVkIGluIGEgdmFyaWV0eSBvZiB3YXlzLCBzbyBJIHNob3VsZG4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucy4gSXQmIzM5O3MgYmVzdCB0byB2ZXJpZnkgdGhpcyBieSBjaGVja2luZyBvdGhlciBjYW5kaWRhdGVzLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gbG9vayBhdCBgaG5zM19lbmV0LmNgIGFzIHdlbGwuIFRoYXQgZmlsZSBuYW1lIGxvb2tzIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlIHRvIGJlIGEgbW9yZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBvZiBldGhlcm5ldCBmdW5jdGlvbnMuIEdpdmVuIHRoZSBITlMzIGFyY2hpdGVjdHVyZSwgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGF0IGl0cyBoYW5kbGluZyBzb21lIHBvcnRpb24gb2YgdGhlIFBGIGRyaXZlci4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBhbmQgY29uZmlybSB3aGljaCBmaWxlIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBQRi1yZWxhdGVkIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYm90aCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGFuZCBkYXRhIHBsYW5lIGludGVyYWN0aW9ucyBhbmQgcGluIGRvd24gdGhlIHRydWUgUEYgZHJpdmVyIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzEzMD1zdGF0aWMgdm9pZCBobnMzX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDU6LyogaG5zM19wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ2LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDgtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDk6ICogaG5zM19wcm9iZSBpbml0aWFsaXplcyBhIFBGIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTAtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgUEYgcHJpdmF0ZSBzdHJ1Y3R1cmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNTU6c3RhdGljIGludCBobnMzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzM1Nz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaG5zM19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1OS1cdC5pZF90YWJsZSA9IGhuczNfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMzNjA6XHQucHJvYmUgICAgPSBobnMzX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM2MS1cdC5yZW1vdmUgICA9IGhuczNfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTUzNzQ9c3RhdGljIGludCBobnMzX2NsaWVudF9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NDg0LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6NTQ4NTpcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7cHJvYmUgcmVnaXN0ZXIgbmV0ZGV2IGZhaWwhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU0ODYtXHRcdGdvdG8gb3V0X3JlZ19uZXRkZXZfZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA5CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgaG5zM19wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGBobnMzX3Byb2JlYCBpcyBhbGwgYWJvdXQuIE5vIGFzc3VtcHRpb25zLCBqdXN0IHB1cmUsIG9iamVjdGl2ZSBhbmFseXNpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgZ3Jhc3Agb24gaXRzIGZ1bmN0aW9uIGFuZCBwdXJwb3NlLCB3aXRob3V0IGFueSBwcmVjb25jZWl2ZWQgbm90aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRpc3NlY3QgYW5kIGFuYWx5emUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHRoaW5nICphY3R1YWxseSogZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNTU6XHRzdGF0aWMgaW50IGhuczNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4zMTU2Olx0e1xuMzE1NzpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2O1xuMzE1ODpcdFx0aW50IHJldDtcbjMxNTk6XHRcbjMxNjA6XHRcdGFlX2RldiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCphZV9kZXYpLCBHRlBfS0VSTkVMKTtcbjMxNjE6XHRcdGlmICghYWVfZGV2KVxuMzE2MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMxNjM6XHRcbjMxNjQ6XHRcdGFlX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbjMxNjU6XHRcdGFlX2Rldi1cdTAwM2VmbGFnID0gZW50LVx1MDAzZWRyaXZlcl9kYXRhO1xuMzE2NjpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFlX2Rldik7XG4zMTY3Olx0XG4zMTY4Olx0XHRyZXQgPSBobmFlM19yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcbjMxNjk6XHRcdGlmIChyZXQpXG4zMTcwOlx0XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbjMxNzE6XHRcbjMxNzI6XHRcdHJldHVybiByZXQ7XG4zMTczOlx0fVxuMzE3NDpcdFxuMzE3NTpcdC8qKlxuMzE3NjpcdCAqIGhuczNfY2xlYW5fdmZfY29uZmlnXG4zMTc3Olx0ICogQHBkZXY6IHBvaW50ZXIgdG8gYSBwY2lfZGV2IHN0cnVjdHVyZVxuMzE3ODpcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZFxuMzE3OTpcdCAqXG4zMTgwOlx0ICogQ2xlYW4gcmVzaWR1YWwgdmYgY29uZmlnIGFmdGVyIGRpc2FibGUgc3Jpb3ZcbjMxODE6XHQgKiovXG4zMTgyOlx0c3RhdGljIHZvaWQgaG5zM19jbGVhbl92Zl9jb25maWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuMzE4MzpcdHtcbjMxODQ6XHRcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjMxODU6XHRcbjMxODY6XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNsZWFuX3ZmX2NvbmZpZylcbjMxODc6XHRcdFx0YWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VjbGVhbl92Zl9jb25maWcoYWVfZGV2LCBudW1fdmZzKTtcbjMxODg6XHR9XG4zMTg5Olx0XG4zMTkwOlx0LyogaG5zM19yZW1vdmUgLSBEZXZpY2UgcmVtb3ZhbCByb3V0aW5lXG4zMTkxOlx0ICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG4zMTkyOlx0ICovXG4zMTkzOlx0c3RhdGljIHZvaWQgaG5zM19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4zMTk0Olx0e1xuMzE5NTpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMzE5NjpcdFxuMzE5NzpcdFx0aWYgKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSlcbjMxOTg6XHRcdFx0aG5zM19kaXNhYmxlX3NyaW92KHBkZXYpO1xuMzE5OTpcdFxuMzIwMDpcdFx0aG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcbjMyMDE6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbjMyMDI6XHR9XG4zMjAzOlx0XG4zMjA0Olx0LyoqXG4zMjA1Olx0ICogaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlXG4zMjA2Olx0ICogQHBkZXY6IHBvaW50ZXIgdG8gYSBwY2lfZGV2IHN0cnVjdHVyZVxuMzIwNzpcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIHRvIGFsbG9jYXRlXG4zMjA4Olx0ICpcbjMyMDk6XHQgKiBFbmFibGUgb3IgY2hhbmdlIHRoZSBudW1iZXIgb2YgVkZzLiBDYWxsZWQgd2hlbiB0aGUgdXNlciB1cGRhdGVzIHRoZSBudW1iZXJcbjMyMTA6XHQgKiBvZiBWRnMgaW4gc3lzZnMuXG4zMjExOlx0ICoqL1xuMzIxMjpcdHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcbjMyMTM6XHR7XG4zMjE0Olx0XHRpbnQgcmV0O1xuMzIxNTpcdFxuMzIxNjpcdFx0aWYgKCEoaG5zM19pc19waHlzX2Z1bmMocGRldikgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKSkge1xuMzIxNzpcdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2FuIG5vdCBjb25maWcgU1JJT1ZcXG5cJiMzNDspO1xuMzIxODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMTk6XHRcdH1cbjMyMjA6XHRcbjMyMjE6XHRcdGlmIChudW1fdmZzKSB7XG4zMjIyOlx0XHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7XG4zMjIzOlx0XHRcdGlmIChyZXQpXG4zMjI0Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7U1JJT1YgZW5hYmxlIGZhaWxlZCAlZFxcblwmIzM0OywgcmV0KTtcbjMyMjU6XHRcdFx0ZWxzZVxuMzIyNjpcdFx0XHRcdHJldHVybiBudW1fdmZzO1xuMzIyNzpcdFx0fSBlbHNlIGlmICghcGNpX3Zmc19hc3NpZ25lZChwZGV2KSkge1xuMzIyODpcdFx0XHRpbnQgbnVtX3Zmc19wcmUgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuMzIyOTpcdFxuMzIzMDpcdFx0XHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcbjMyMzE6XHRcdFx0aG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpO1xuMzIzMjpcdFx0fSBlbHNlIHtcbjMyMzM6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMjM0Olx0XHRcdFx0IFwmIzM0O1VuYWJsZSB0byBmcmVlIFZGcyBiZWNhdXNlIHNvbWUgYXJlIGFzc2lnbmVkIHRvIFZNcy5cXG5cJiMzNDspO1xuMzIzNTpcdFx0fVxuMzIzNjpcdFxuMzIzNzpcdFx0cmV0dXJuIDA7XG4zMjM4Olx0fVxuMzIzOTpcdFxuMzI0MDpcdHN0YXRpYyB2b2lkIGhuczNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4zMjQxOlx0e1xuMzI0MjpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMzI0MzpcdFxuMzI0NDpcdFx0aG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcbjMyNDU6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbjMyNDY6XHRcbjMyNDc6XHRcdGlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRilcbjMyNDg6XHRcdFx0cGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpO1xuMzI0OTpcdH1cbjMyNTA6XHRcbjMyNTE6XHRzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGhuczNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4zMjUyOlx0e1xuMzI1MzpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4zMjU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTkyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgYGhuczNfcHJvYmVgIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBgaG5zM19wcm9iZWAgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgaXQgbG9va3MgbGlrZSBhbGwgaXQmIzM5O3MgZG9pbmcgaXMgYWxsb2NhdGluZyBhbiBgYWVfZGV2YCBzdHJ1Y3R1cmUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcGFzc2luZyBpdCBvZmYgdG8gYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHBhdHRlcm4sIHVzdWFsbHkgaW5kaWNhdGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIGFsbW9zdCB0b28gc2ltcGxlLCB3aGljaCBpcyBtYWtpbmcgbWUgd2FudCB0byBkZWx2ZSBkZWVwZXIsIHNwZWNpZmljYWxseSBpbnRvIHdoYXQgYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHRvIHRoaXMgYWxsb2NhdGVkIGBhZV9kZXZgIG5vdywgYW5kIHdoYXQgdGhhdCByZWdpc3RyYXRpb24gcHJvY2VzcyBlbnRhaWxzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBsaWtlbHkgcmVzaWRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG5hZTNfcmVnaXN0ZXJfYWVfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYz0zMDQ9RVhQT1JUX1NZTUJPTChobmFlM191bnJlZ2lzdGVyX2FlX2FsZ28pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjMwNjovKiBobmFlM19yZWdpc3Rlcl9hZV9kZXYgLSByZWdpc3RlcnMgYSBBRSBkZXZpY2UgdG8gaG5hZTMgZnJhbWV3b3JrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jLTMwNy0gKiBAYWVfZGV2OiB0aGUgQUUgZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zMDktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjMxMDppbnQgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzExLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jLTM2OS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjM3MDpFWFBPUlRfU1lNQk9MKGhuYWUzX3JlZ2lzdGVyX2FlX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jLTM3MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oPTk3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaG5hZTNfZm9ybWF0X21hY19hZGRyKGNoYXIgKmZvcm1hdF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTk4MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6OTgxOmludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtOTgyLXZvaWQgaG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTU1PXN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE2ODpcdHJldCA9IGhuYWUzX3JlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE2OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTcxCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBSZWdpc3RlcmluZyBhIERldmljZSoqCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgZnVuY3Rpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKnJlZ2lzdGVyaW5nKiBhIGRldmljZSwgc3BlY2lmaWNhbGx5IG9uZSByZWxhdGVkIHRvIHRoZSBobmFlMyBkcml2ZXIgYW5kLCBJJiMzOTttIGd1ZXNzaW5nLCBhbiAmIzM0O0FFJiMzNDsgZGV2aWNlIHR5cGUuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBhY2NlbGVyYXRvciBvciBjb3Byb2Nlc3NvciBvbiB0aGUgcGxhdGZvcm0uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgcmVnaXN0cmF0aW9uIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBsaWtlbHkgaW52b2x2ZXM6CgoqICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIERlZmluaW5nIGFuZCBvYnRhaW5pbmcgbmVjZXNzYXJ5IHJlc291cmNlcyBmcm9tIHRoZSBrZXJuZWwgLSBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0IGxpbmVzLCBETUEgY2hhbm5lbHMsIGV0Yy4gLSBhbGwgb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGZvciB0aGUgaGFyZHdhcmUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgZGV2aWNlIHdvdWxkIGFjY2VzcyBzaGFyZWQgcmVzb3VyY2VzLgoqICAgKipEcml2ZXIgSW5pdGlhbGl6YXRpb246KiogU2V0dGluZyB1cCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIgdG8gbWFuYWdlIHRoaXMgcGFydGljdWxhciBkZXZpY2UgaW5zdGFuY2UuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2U6IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLCBwb2ludGVycyB0byB0aGUgZGV2aWNlJiMzOTtzIGhhcmR3YXJlIHJlZ2lzdGVycywgYW5kIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcy4KKiAgICoqS2VybmVsIEludGVncmF0aW9uOioqIFJlZ2lzdGVyaW5nIHRoZSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybmVsIHN1YnN5c3RlbXMsIHdoaWNoIG9mdGVuIG1lYW5zIHNldHRpbmcgdXAgZGV2aWNlIG5vZGVzLCByZWdpc3RlcmluZyB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIGFuZCBwcm92aWRpbmcgY2FsbGJhY2tzIHRvIHRoZSBzeXN0ZW0uIFRoaXMgbGlrZWx5IGludm9sdmVzIHRoZSBjcmVhdGlvbiBvZiBhIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBtYXliZSBldmVuIGEgY2hhcmFjdGVyIG9yIGJsb2NrIGRldmljZS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGV4Y2VwdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIHRoZSBjb25kaXRpb25zLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHNlcmllcyBvZiBjYWxscyB0byBrZXJuZWwgQVBJcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gKGxpa2UgYGttYWxsb2NgLCBgaW9yZW1hcGAsIGV0Yy4pLCBpbnRlcnJ1cHQgbWFuYWdlbWVudCAoYHJlcXVlc3RfaXJxYCwgYGZyZWVfaXJxYCksIGRldmljZSB0cmVlIGxvb2t1cHMgKGlmIGFwcGxpY2FibGUpLCBhbmQgcG90ZW50aWFsbHkgYSBjYWxsIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJIGFtIGFsc28gbG9va2luZyB0byBzZWUgaG93IGRldmljZS1zcGVjaWZpYyBkYXRhIGlzIGxpbmtlZCB0byB0aGUga2VybmVsIGRhdGEsIGxpa2VseSB3aXRoIHNvbWUgc3RydWN0dXJlIHBvaW50ZXIuIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBhbHNvIHdpbGwgaGFuZGxlIHNvbWUgc29ydCBvZiBjbGVhbnVwIHByb2Nlc3MsIGluIGNhc2UgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscyBtaWR3YXksIHRvIGF2b2lkIHJlc291cmNlIGxlYWtzLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscyBhbmQgc3RhcnQgcmVhZGluZyB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRpbnQgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiAzMTE6XHR7XG4gMzEyOlx0XHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7XG4gMzEzOlx0XHRzdHJ1Y3QgaG5hZTNfYWVfYWxnbyAqYWVfYWxnbztcbiAzMTQ6XHRcdHN0cnVjdCBobmFlM19jbGllbnQgKmNsaWVudDtcbiAzMTU6XHRcdGludCByZXQ7XG4gMzE2Olx0XG4gMzE3Olx0XHRpZiAoIWFlX2RldilcbiAzMTg6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMzE5Olx0XG4gMzIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmhuYWUzX2NvbW1vbl9sb2NrKTtcbiAzMjE6XHRcbiAzMjI6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YWVfZGV2LVx1MDAzZW5vZGUsIFx1MDAyNmhuYWUzX2FlX2Rldl9saXN0KTtcbiAzMjM6XHRcbiAzMjQ6XHRcdC8qIENoZWNrIGlmIHRoZXJlIGFyZSBtYXRjaGVkIGFlX2FsZ28gKi9cbiAzMjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoYWVfYWxnbywgXHUwMDI2aG5hZTNfYWVfYWxnb19saXN0LCBub2RlKSB7XG4gMzI2Olx0XHRcdGlkID0gcGNpX21hdGNoX2lkKGFlX2FsZ28tXHUwMDNlcGRldl9pZF90YWJsZSwgYWVfZGV2LVx1MDAzZXBkZXYpO1xuIDMyNzpcdFx0XHRpZiAoIWlkKVxuIDMyODpcdFx0XHRcdGNvbnRpbnVlO1xuIDMyOTpcdFxuIDMzMDpcdFx0XHRpZiAoIWFlX2FsZ28tXHUwMDNlb3BzKSB7XG4gMzMxOlx0XHRcdFx0ZGV2X2VycihcdTAwMjZhZV9kZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O2FlX2FsZ28gb3BzIGFyZSBudWxsXFxuXCYjMzQ7KTtcbiAzMzI6XHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiAzMzM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4gMzM0Olx0XHRcdH1cbiAzMzU6XHRcdFx0YWVfZGV2LVx1MDAzZW9wcyA9IGFlX2FsZ28tXHUwMDNlb3BzO1xuIDMzNjpcdFxuIDMzNzpcdFx0XHRyZXQgPSBhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWluaXRfYWVfZGV2KGFlX2Rldik7XG4gMzM4Olx0XHRcdGlmIChyZXQpIHtcbiAzMzk6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNmFlX2Rldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiAzNDA6XHRcdFx0XHRcdFwmIzM0O2luaXQgYWVfZGV2IGVycm9yLCByZXQgPSAlZFxcblwmIzM0OywgcmV0KTtcbiAzNDE6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4gMzQyOlx0XHRcdH1cbiAzNDM6XHRcbiAzNDQ6XHRcdFx0LyogYWVfZGV2IGluaXQgc2hvdWxkIHNldCBmbGFnICovXG4gMzQ1Olx0XHRcdGhuYWUzX3NldF9iaXQoYWVfZGV2LVx1MDAzZWZsYWcsIEhOQUUzX0RFVl9JTklURURfQiwgMSk7XG4gMzQ2Olx0XHRcdGJyZWFrO1xuIDM0NzpcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0LyogY2hlY2sgdGhlIGNsaWVudCBsaXN0IGZvciB0aGUgbWF0Y2ggd2l0aCB0aGlzIGFlX2RldiB0eXBlIGFuZFxuIDM1MDpcdFx0ICogaW5pdGlhbGl6ZSB0aGUgZmlndXJlIG91dCBjbGllbnQgaW5zdGFuY2VcbiAzNTE6XHRcdCAqL1xuIDM1MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsIFx1MDAyNmhuYWUzX2NsaWVudF9saXN0LCBub2RlKSB7XG4gMzUzOlx0XHRcdHJldCA9IGhuYWUzX2luaXRfY2xpZW50X2luc3RhbmNlKGNsaWVudCwgYWVfZGV2KTtcbiAzNTQ6XHRcdFx0aWYgKHJldClcbiAzNTU6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNmFlX2Rldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiAzNTY6XHRcdFx0XHRcdFwmIzM0O21hdGNoIGFuZCBpbnN0YW50aWF0aW9uIGZhaWxlZCwgcmV0ID0gJWRcXG5cJiMzNDssXG4gMzU3Olx0XHRcdFx0XHRyZXQpO1xuIDM1ODpcdFx0fVxuIDM1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg3NgoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgY29kZSBzbmlwcGV0LCBleHByZXNzZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWxpc2luZyB0aGUgQUUgRGV2aWNlKioKClJpZ2h0LCBzbyBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBhZV9kZXYtJmd0O29wcy0mZ3Q7aW5pdF9hZV9kZXYoYWVfZGV2KWAuICBMb29rcyBsaWtlIHdlJiMzOTtyZSBjYWxsaW5nIGEgZnVuY3Rpb24gcG9pbnRlciwgYGluaXRfYWVfZGV2YCwgd2hpY2ggaXMgcGFydCBvZiBhIHNldCBvZiBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhbiBgYWVfZGV2YCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2U7IGEgZ2VuZXJpYyBpbnRlcmZhY2Ugd2l0aCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGBpbml0X2FlX2RldmAgYWN0dWFsbHkgKmRvZXMqIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KCkJhc2VkIG9uIHRoZSBmaWxlIHJlZmVyZW5jZSAmIzM0O2hjbGdlX21haW4uYyYjMzQ7LCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEhDTEdFIChsaWtlbHkgYSBoYXJkd2FyZSBjb21wb25lbnQgb3IgZHJpdmVyKS4gQW5kIHRoZW4gSSBzZWUgdGhhdCBgaW5pdF9hZV9kZXZgIGlzIHJlc29sdmVkIHRvIGBoY2xnZV9pbml0X2FlX2RldmAuIEFoYSEgU28sIHdpdGhpbiB0aGUgSENMR0UgY29kZSwgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBBRSAocHJlc3VtYWJseSAmIzM0O0F1dG8gRXhwb3N1cmUmIzM0OyBvciBhIHNpbWlsYXIgZnVuY3Rpb24pIGlzIGBoY2xnZV9pbml0X2FlX2RldmAuIFRoaXMgd2lsbCBjb250YWluIGFsbCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgc2V0dGluZ3MsIGNsb2NrIGNvbmZpZ3VyYXRpb25zLCBETUEgc2V0dXAsIGFuZCBldmVyeXRoaW5nIGVsc2UgbmVlZGVkIHRvIGJyaW5nIHRoZSBBRSBkZXZpY2UgdXAgdG8gYSB1c2FibGUgc3RhdGUgd2l0aGluIHRoZSBIQ0xHRSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk2MDA6XHRcbjk2MDE6XHRcdHJldCA9IGhjbGdlX21hY19pbml0KGhkZXYpO1xuOTYwMjpcdFx0aWYgKHJldCkge1xuOTYwMzpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtNYWMgaW5pdCBlcnJvciwgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG45NjA0Olx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjA1Olx0XHR9XG45NjA2Olx0XG45NjA3Olx0XHRyZXQgPSBoY2xnZV9jb25maWdfdHNvKGhkZXYsIEhDTEdFX1RTT19NU1NfTUlOLCBIQ0xHRV9UU09fTVNTX01BWCk7XG45NjA4Olx0XHRpZiAocmV0KSB7XG45NjA5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0VuYWJsZSB0c28gZmFpbCwgcmV0ID0lZFxcblwmIzM0OywgcmV0KTtcbjk2MTA6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2MTE6XHRcdH1cbjk2MTI6XHRcbjk2MTM6XHRcdHJldCA9IGhjbGdlX2NvbmZpZ19ncm8oaGRldik7XG45NjE0Olx0XHRpZiAocmV0KVxuOTYxNTpcdFx0XHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xuOTYxNjpcdFxuOTYxNzpcdFx0cmV0ID0gaGNsZ2VfaW5pdF92bGFuX2NvbmZpZyhoZGV2KTtcbjk2MTg6XHRcdGlmIChyZXQpIHtcbjk2MTk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkxBTiBpbml0IGZhaWwsIHJldCA9JWRcXG5cJiMzNDssIHJldCk7XG45NjIwOlx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjIxOlx0XHR9XG45NjIyOlx0XG45NjIzOlx0XHRyZXQgPSBoY2xnZV90bV9zY2hkX2luaXQoaGRldik7XG45NjI0Olx0XHRpZiAocmV0KSB7XG45NjI1Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3RtIHNjaGQgaW5pdCBmYWlsLCByZXQgPSVkXFxuXCYjMzQ7LCByZXQpO1xuOTYyNjpcdFx0XHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xuOTYyNzpcdFx0fVxuOTYyODpcdFxuOTYyOTpcdFx0cmV0ID0gaGNsZ2VfY29tbV9yc3NfaW5pdF9jZmcoXHUwMDI2aGRldi1cdTAwM2V2cG9ydC1cdTAwM2VuaWMsIGhkZXYtXHUwMDNlYWVfZGV2LFxuOTYzMDpcdFx0XHRcdFx0ICAgICAgXHUwMDI2aGRldi1cdTAwM2Vyc3NfY2ZnKTtcbjk2MzE6XHRcdGlmIChyZXQpIHtcbjk2MzI6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgcnNzIGNmZywgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG45NjMzOlx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjM0Olx0XHR9XG45NjM1Olx0XG45NjM2Olx0XHRyZXQgPSBoY2xnZV9yc3NfaW5pdF9odyhoZGV2KTtcbjk2Mzc6XHRcdGlmIChyZXQpIHtcbjk2Mzg6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7UnNzIGluaXQgZmFpbCwgcmV0ID0lZFxcblwmIzM0OywgcmV0KTtcbjk2Mzk6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2NDA6XHRcdH1cbjk2NDE6XHRcbjk2NDI6XHRcdHJldCA9IGluaXRfbWdyX3RibChoZGV2KTtcbjk2NDM6XHRcdGlmIChyZXQpIHtcbjk2NDQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7bWFuYWdlciB0YWJsZSBpbml0IGZhaWwsIHJldCA9JWRcXG5cJiMzNDssIHJldCk7XG45NjQ1Olx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjQ2Olx0XHR9XG45NjQ3Olx0XG45NjQ4Olx0XHRyZXQgPSBoY2xnZV9pbml0X2ZkX2NvbmZpZyhoZGV2KTtcbjk2NDk6XHRcdGlmIChyZXQpIHtcbjk2NTA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbjk2NTE6XHRcdFx0XHRcJiMzNDtmZCB0YWJsZSBpbml0IGZhaWwsIHJldD0lZFxcblwmIzM0OywgcmV0KTtcbjk2NTI6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2NTM6XHRcdH1cbjk2NTQ6XHRcbjk2NTU6XHRcdHJldCA9IGhjbGdlX3B0cF9pbml0KGhkZXYpO1xuOTY1NjpcdFx0aWYgKHJldClcbjk2NTc6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2NTg6XHRcbjk2NTk6XHRcdHJldCA9IGhjbGdlX3VwZGF0ZV9wb3J0X2luZm8oaGRldik7XG45NjYwOlx0XHRpZiAocmV0KVxuOTY2MTpcdFx0XHRnb3RvIGVycl9wdHBfdW5pbml0O1xuOTY2MjpcdFxuOTY2MzpcdFx0aWYgKGhkZXYtXHUwMDNlaHcubWFjLm1lZGlhX3R5cGUgIT0gSE5BRTNfTUVESUFfVFlQRV9DT1BQRVIpIHtcbjk2NjQ6XHRcdFx0aGRldi1cdTAwM2Vody5tYWMucmVxX2F1dG9uZWcgPSBoZGV2LVx1MDAzZWh3Lm1hYy5hdXRvbmVnO1xuOTY2NTpcdFx0XHRpZiAoaGRldi1cdTAwM2Vody5tYWMuYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgXHUwMDI2XHUwMDI2XG45NjY2Olx0XHRcdCAgICBoZGV2LVx1MDAzZWh3Lm1hYy5zcGVlZCAhPSBTUEVFRF9VTktOT1dOKVxuOTY2NzpcdFx0XHRcdGhkZXYtXHUwMDNlaHcubWFjLnJlcV9zcGVlZCA9IGhkZXYtXHUwMDNlaHcubWFjLnNwZWVkO1xuOTY2ODpcdFx0fVxuOTY2OTpcdFxuOTY3MDpcdFx0cmV0ID0gaGNsZ2Vfc2V0X2F1dG9uZWdfc3BlZWRfZHVwKGhkZXYpO1xuOTY3MTpcdFx0aWYgKHJldCkge1xuOTY3MjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuOTY3MzpcdFx0XHRcdFwmIzM0O2ZhaWxlZCB0byBzZXQgYXV0b25lZyBzcGVlZCBkdXBsZXgsIHJldCA9ICVkXFxuXCYjMzQ7LCByZXQpO1xuOTY3NDpcdFx0XHRnb3RvIGVycl9wdHBfdW5pbml0O1xuOTY3NTpcdFx0fVxuOTY3NjpcdFxuOTY3NzpcdFx0SU5JVF9LRklGTyhoZGV2LVx1MDAzZW1hY190bmxfbG9nKTtcbjk2Nzg6XHRcbjk2Nzk6XHRcdGhjbGdlX2RjYl9vcHNfc2V0KGhkZXYpO1xuOTY4MDpcdFxuOTY4MTpcdFx0dGltZXJfc2V0dXAoXHUwMDI2aGRldi1cdTAwM2VyZXNldF90aW1lciwgaGNsZ2VfcmVzZXRfdGltZXIsIDApO1xuOTY4MjpcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2aGRldi1cdTAwM2VzZXJ2aWNlX3Rhc2ssIGhjbGdlX3NlcnZpY2VfdGFzayk7XG45NjgzOlx0XG45Njg0Olx0XHRoY2xnZV9jbGVhcl9hbGxfZXZlbnRfY2F1c2UoaGRldik7XG45Njg1Olx0XHRoY2xnZV9jbGVhcl9yZXNldHRpbmdfc3RhdGUoaGRldik7XG45Njg2Olx0XG45Njg3Olx0XHQvKiBMb2cgYW5kIGNsZWFyIHRoZSBodyBlcnJvcnMgdGhvc2UgYWxyZWFkeSBvY2N1cnJlZCAqL1xuOTY4ODpcdFx0aWYgKGhuYWUzX2Rldl9yYXNfaW1wX3N1cHBvcnRlZChoZGV2KSlcbjk2ODk6XHRcdFx0aGNsZ2VfaGFuZGxlX29jY3VycmVkX2Vycm9yKGhkZXYpO1xuOTY5MDpcdFx0ZWxzZVxuOTY5MTpcdFx0XHRoY2xnZV9oYW5kbGVfYWxsX2huc19od19lcnJvcnMoYWVfZGV2KTtcbjk2OTI6XHRcbjk2OTM6XHRcdC8qIHJlcXVlc3QgZGVsYXllZCByZXNldCBmb3IgdGhlIGVycm9yIHJlY292ZXJ5IGJlY2F1c2UgYW4gaW1tZWRpYXRlXG45Njk0Olx0XHQgKiBnbG9iYWwgcmVzZXQgb24gYSBQRiBhZmZlY3RpbmcgcGVuZGluZyBpbml0aWFsaXphdGlvbiBvZiBvdGhlciBQRnNcbjk2OTU6XHRcdCAqL1xuOTY5NjpcdFx0aWYgKGFlX2Rldi1cdTAwM2Vod19lcnJfcmVzZXRfcmVxKSB7XG45Njk3Olx0XHRcdGVudW0gaG5hZTNfcmVzZXRfdHlwZSByZXNldF9sZXZlbDtcbjk2OTg6XHRcbjk2OTk6XHRcdFx0cmVzZXRfbGV2ZWwgPSBoY2xnZV9nZXRfcmVzZXRfbGV2ZWwoYWVfZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyNQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gTG9va2luZyBjbG9zZXIgYXQgdGhpcyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZ1bmN0aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCYjMzk7cyBkb2luZyBhICpsb3QqIG9mIGxvdy1sZXZlbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSBzZWUgaXQgc2VuZGluZyBhIGJ1bmNoIG9mIGNvbW1hbmRzIGRpcmVjdGx5IHRvIHRoZSBoYXJkd2FyZSDigJMgdXNpbmcgYGhjbGdlX2NtZF9zZW5kYCwgbmF0dXJhbGx5LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCBvciBpc24mIzM5O3QgcmVzcG9uZGluZywgdGhvc2UgY29tbWFuZCB0cmFuc21pc3Npb25zIGFyZSBnb2luZyB0byB0aW1lIG91dCwgb3Igc2ltcGx5IGZhaWwgb3V0cmlnaHQuIFdlJiMzOTtyZSBnb2luZyB0byBnZXQgc29tZSB0ZWxsdGFsZSBlcnJvcnMuCgpTbywgd2hlcmUgZG9lcyB0aGF0IGxlYWQ/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGhjbGdlX2NtZF9zZW5kYCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBhbmQgaW1wb3J0YW50bHksIGl0cyBlcnJvciBoYW5kbGluZy4gVGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgbGlrZWx5IGZpbmQgdGhlIGtleSB0byBwaW5wb2ludGluZyB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgaGFyZHdhcmUtcmVsYXRlZCBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NtZF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgaW5pdGlhbGx5IGZvY3VzZWQgb24gYGhjbGdlX2NtZC5jYCwgYnV0IHNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHF1aXRlIHJpZ2h0LiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoZSBmdW5jdGlvbiBJJiMzOTttIGxvb2tpbmcgZm9yLCBzcGVjaWZpY2FsbHkgdGhlIGBoY2xnZV9jbWRfc2VuZGAgY2FsbCwgbWlnaHQgYmUgbG9jYXRlZCBpbiBhIGRpZmZlcmVudCBmaWxlIGFsdG9nZXRoZXIuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgc2VhcmNoLiBMZXQgbWUgcGl2b3QgYW5kIGluc3RlYWQgb2YgYXNzdW1pbmcsIGRpcmVjdGx5IHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIGBoY2xnZV9jbWRfc2VuZGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBhY2N1cmF0ZSBwaWN0dXJlIG9mIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZWZmaWNpZW50bHkgbG9jYXRlIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgcmVzdWx0cyB0ZWxsIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaGNsZ2VfY21kX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmg9OTAyPXN0cnVjdCBoY2xnZV9odztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaDo5MDM6aW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaC05MDQtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0zMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBoY2xnZV9tYWNfbWdyX3RibF9lbnRyeV9jbWQgaGNsZ2VfbWdyX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMTktICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMjA6aW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzMwoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgUmV2aWV3IG9mIGBoY2xnZV9jbWRfc2VuZGAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgaGNsZ2VfY21kX3NlbmRgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBob21pbmcgaW4gb24gaXRzIGRlZmluaXRpb24gd2l0aGluIGBoY2xnZV9tYWluLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHBvdGVudGlhbCBoZWFkYWNoZXMpIGxpa2VseSByZXNpZGUuIEkmIzM5O20gZXNzZW50aWFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZTsgdW5kZXJzdGFuZGluZyAqaG93KiBhIGNvbW1hbmQgZ2V0cyBzZW50IGlzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5dGhpbmcgZWxzZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIGNvbW1hbmQgYW5kIGNvbnRyb2wgcGF0aC4gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgcGFja2V0IGZvcm1hdHRpbmcsIGhhcmR3YXJlIGludGVyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIHJldHJ5IGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJIGFtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBhbnkgYW5kIGFsbCBjb21tYW5kcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRpbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pXG4gMzIxOlx0e1xuIDMyMjpcdFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aHctXHUwMDNlaHcsIGRlc2MsIG51bSk7XG4gMzIzOlx0fVxuIDMyNDpcdFxuIDMyNTpcdHN0YXRpYyB2b2lkIGhjbGdlX3RyYWNlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4gMzI2Olx0XHRcdFx0XHQgaW50IG51bSwgYm9vbCBpc19zcGVjaWFsKVxuIDMyNzpcdHtcbiAzMjg6XHRcdGludCBpO1xuIDMyOTpcdFxuIDMzMDpcdFx0dHJhY2VfaGNsZ2VfcGZfY21kX3NlbmQoaHcsIGRlc2MsIDAsIG51bSk7XG4gMzMxOlx0XG4gMzMyOlx0XHRpZiAoIWlzX3NwZWNpYWwpIHtcbiAzMzM6XHRcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnVtOyBpJiM0MzsmIzQzOylcbiAzMzQ6XHRcdFx0XHR0cmFjZV9oY2xnZV9wZl9jbWRfc2VuZChodywgXHUwMDI2ZGVzY1tpXSwgaSwgbnVtKTtcbiAzMzU6XHRcdH0gZWxzZSB7XG4gMzM2Olx0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG51bTsgaSYjNDM7JiM0MzspXG4gMzM3Olx0XHRcdFx0dHJhY2VfaGNsZ2VfcGZfc3BlY2lhbF9jbWRfc2VuZChodywgKF9fbGUzMiAqKVx1MDAyNmRlc2NbaV0sXG4gMzM4Olx0XHRcdFx0XHRcdFx0XHRpLCBudW0pO1xuIDMzOTpcdFx0fVxuIDM0MDpcdH1cbiAzNDE6XHRcbiAzNDI6XHRzdGF0aWMgdm9pZCBoY2xnZV90cmFjZV9jbWRfZ2V0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4gMzQzOlx0XHRcdFx0XHRpbnQgbnVtLCBib29sIGlzX3NwZWNpYWwpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0aW50IGk7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRpZiAoIUhDTEdFX0NPTU1fU0VORF9TWU5DKGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlZmxhZykpKVxuIDM0ODpcdFx0XHRyZXR1cm47XG4gMzQ5Olx0XG4gMzUwOlx0XHR0cmFjZV9oY2xnZV9wZl9jbWRfZ2V0KGh3LCBkZXNjLCAwLCBudW0pO1xuIDM1MTpcdFxuIDM1MjpcdFx0aWYgKCFpc19zcGVjaWFsKSB7XG4gMzUzOlx0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG51bTsgaSYjNDM7JiM0MzspXG4gMzU0Olx0XHRcdFx0dHJhY2VfaGNsZ2VfcGZfY21kX2dldChodywgXHUwMDI2ZGVzY1tpXSwgaSwgbnVtKTtcbiAzNTU6XHRcdH0gZWxzZSB7XG4gMzU2Olx0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG51bTsgaSYjNDM7JiM0MzspXG4gMzU3Olx0XHRcdFx0dHJhY2VfaGNsZ2VfcGZfc3BlY2lhbF9jbWRfZ2V0KGh3LCAoX19sZTMyICopXHUwMDI2ZGVzY1tpXSxcbiAzNTg6XHRcdFx0XHRcdFx0XHQgICAgICAgaSwgbnVtKTtcbiAzNTk6XHRcdH1cbiAzNjA6XHR9XG4gMzYxOlx0XG4gMzYyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgaGNsZ2VfY21xX29wcyA9IHtcbiAzNjM6XHRcdC50cmFjZV9jbWRfc2VuZCA9IGhjbGdlX3RyYWNlX2NtZF9zZW5kLFxuIDM2NDpcdFx0LnRyYWNlX2NtZF9nZXQgPSBoY2xnZV90cmFjZV9jbWRfZ2V0LFxuIDM2NTpcdH07XG4gMzY2Olx0XG4gMzY3Olx0c3RhdGljIGludCBoY2xnZV9tYWNfdXBkYXRlX3N0YXRzX2RlZmVjdGl2ZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuIDM2ODpcdHtcbiAzNjk6XHQjZGVmaW5lIEhDTEdFX01BQ19DTURfTlVNIDIxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbDogaGNsZ2VfY29tbV9jbWRfc2VuZCoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSBpcyBjYWxsaW5nIGBoY2xnZV9jb21tX2NtZF9zZW5kYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGZ1bmN0aW9uIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29tbWFuZCBzZW5kaW5nLCBhbmQgdGhlICYjMzQ7aGNsZ2UmIzM0OyBwcmVmaXggc3Ryb25nbHkgcG9pbnRzIHRvIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIGEgc3BlY2lmaWMgSGFyZHdhcmUgQ29uZmlndXJhdGlvbiBMYW5ndWFnZSBHRSAoR2xvYmFsIEVudmlyb25tZW50KSBjb21tdW5pY2F0aW9uIG1vZHVsZS4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIGtub3cgdGhlIGxpa2VseSBwdXJwb3NlIGFuZCBzdHJ1Y3R1cmUuCgpEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzIGNvbnRleHQsIHdoaWNoIEkmIzM5O2xsIGFzc3VtZSBpcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpbywgdGhlIG1vZHVsZSB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggbGlrZWx5IHJlcXVpcmVzIHNwZWNpZmljIG1lc3NhZ2VzIGFuZCBkYXRhIHRvIGJlIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIGRlYnVnZ2luZywgY29uZmlndXJhdGlvbiwgb3IgY29udHJvbD8gS25vd2luZyB0aGF0LCBhbmQgbG9va2luZyBhdCB0aGUgY29tbWFuZCwgSSYjMzk7ZCB0aGVuIGNvbnNpZGVyOiB3aGF0IGRvZXMgdGhlIGNvbW1hbmQgKmRvKj8gSXMgaXQgYSBxdWVyeSwgYSBzZXQgY29tbWFuZCwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gVGhlIG5hdHVyZSBvZiB0aGUgY29tbWFuZCB3b3VsZCBpbmRpY2F0ZSB0byBtZSB3aGF0JiMzOTtzIGdvaW5nIG9uLCBhbmQgZnJvbSB0aGVyZSBJIHdvdWxkIGluZmVyIHRoZSBuZXh0IHN0ZXBzLCBhbmQgcG90ZW50aWFsIGlzc3VlcyBvciBkZXNpZ24gZGVjaXNpb25zLgoKRnJvbSB0aGUgbWVyZSBjYWxsaW5nIG9mIHRoYXQgZnVuY3Rpb24sIEkgY2FuIGluZmVyIGEgY2VydGFpbiBkZWdyZWUgb2YgY29tcGxleGl0eS4gSXQgbXVzdCByZXF1aXJlIGEgc3BlY2lmaWMgZm9ybWF0IG9yIHN0cnVjdHVyZSBvZiBjb21tYW5kcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGxldmVsIG9mIGF1dGhlbnRpY2F0aW9uIG9yIGF1dGhvcml6YXRpb24uIFdoYXQgZGF0YSBpcyBpdCBiZWluZyBzZW50PyBXaGF0IGlzIGl0cyByZXNwb25zZT8gSXMgdGhlcmUgZXJyb3IgaGFuZGxpbmcgYnVpbHQgaW50byB0aGUgc2VuZGluZyBtZWNoYW5pc20sIG9yIGlzIHRoYXQgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbD8gVGhlc2UgYXJlIHNvbWUgb2YgdGhlIG1vc3QgcHJvbWluZW50IHF1ZXN0aW9ucyBJIHdvdWxkIGJlIHN0YXJ0aW5nIHRvIHdvcmsgdGhyb3VnaCB3aGVuIEkgc2VlIHRoaXMgbGluZSBvZiBjb2RlLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0mIzM5O3MgZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoY2xnZV9jb21tX2NtZF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03OD1pbnQgaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTEwMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MTAxOlx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0xMDItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MjI4PWludCBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MjQwOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTI0MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz00MzU9c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDY0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo0NjU6ICogaGNsZ2VfY29tbV9jbWRfc2VuZCAtIHNlbmQgY29tbWFuZCB0byBjb21tYW5kIHF1ZXVlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2Ni0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDcyLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDczOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ3NC1cdFx0XHRpbnQgbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTIxLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NTIyOkVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3NlbmQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MjMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaD00ODU9aW50IGhjbGdlX2NvbW1fYWxsb2NfY21kX3F1ZXVlKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgaW50IHJpbmdfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ4NjppbnQgaGNsZ2VfY29tbV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODctXHRcdFx0aW50IG51bSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz04ND1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3RjX21vZGUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgKnRjX29mZnNldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTExMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTExOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTExMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0xNTE9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc190dXBsZShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjE3NTpcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xNzYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0yNzY9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbmRpcl90YWJsZShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDQtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MzA1Olx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMzA2LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zMTc9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbnB1dF90dXBsZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMzODpcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM9MzgzPWludCBoY2xnZV9jb21tX3NldF9yc3NfYWxnb19rZXkoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBjb25zdCB1OCBoZnVuYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTQxMS1cdFx0a2V5X29mZnNldCYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjQxMjpcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTQxMy1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM9NTg9aW50IGhjbGdlX2NvbW1fdHFwc191cGRhdGVfc3RhdHMoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzItXHRcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cdTAwM2VpbmRleCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjczOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzQtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg2LVx0XHRkZXNjLmRhdGFbMF0gPSBjcHVfdG9fbGUzMih0cXAtXHUwMDNlaW5kZXgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYzo4NzpcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg4LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jPTM0NDI9aW50IGhjbGdlX2hhbmRsZV92Zl9xdWV1ZV9lcnJfcmFzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jLTM0NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmM6MzQ2MDpcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aGRldi1cdTAwM2Vody5odywgZGVzYywgMik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmMtMzQ2MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTMyMD1pbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjMyMjpcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKFx1MDAyNmh3LVx1MDAzZWh3LCBkZXNjLCBudW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMjMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz01MD1pbnQgaGNsZ2V2Zl9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2V2Zl9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTUxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzo1MjpcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKFx1MDAyNmh3LVx1MDAzZWh3LCBkZXNjLCBudW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTUzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNzQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgUHJvYmUgRmFpbHVyZSoqCgpPa2F5LCBzbyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBoYXJkd2FyZSYjMzk7cyBjb21tYW5kIHF1ZXVlLiBNYWtlcyBzZW5zZS4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCByZXNwb25kaW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHRpbWVvdXQgb3IgZXJyb3Igb3V0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpc3N1ZS4gQW5kIGlmIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZW4gYGhjbGdlX2luaXRfYWVfZGV2YCBmYWlscywgYW5kICpib29tKiwgdGhlIGRyaXZlciBwcm9iZSBoaXRzIGEgcm9hZGJsb2NrIGFuZCBmYWlscy4gU3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBmb3IgZGVidWdnaW5nIGRldmljZSBkcml2ZXIgZmFpbHVyZXMuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApnN5ei1wY2kgY2FuIGVtdWxhdGUgUENJIGRldmljZXMsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGEgd2F5IGFyb3VuZCB0aGlzLiBUaGUgY2hhbGxlbmdlIHdpdGggZW11bGF0aW9uLCB0aG91Z2gsIGlzIHRoYXQgc3l6a2FsbGVyIG5lZWRzIHZlcnkgcHJlY2lzZSBpbmZvcm1hdGlvbjogdGhlIGV4YWN0IFBDSSBkZXZpY2UgSUQgYW5kIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgdG8gZW11bGF0ZS4gSXQmIzM5O3MgYSBzaWduaWZpY2FudCB1bmRlcnRha2luZyB0byBzZXQgdGhhdCB1cCBjb3JyZWN0bHksIGVzcGVjaWFsbHkgd2l0aG91dCB0aGUgaGFyZHdhcmUgZGlyZWN0bHkgcHJlc2VudC4KClNvLCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgYWxyZWFkeSBoYXZlIGEgc3BlY2lmaWMgZW11bGF0aW9uIHNldHVwIGZvciB0aGlzIEhOUzMgZGV2aWNlPyBUaGF0IHdvdWxkIGJlIGEgaHVnZSBzaG9ydGN1dC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIEhOUzMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCDigJMgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZSBzeXprYWxsZXIgcmVwb3NpdG9yeSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2huczMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhOUzMgRHJpdmVyIGFuZCBTeXprYWxsZXIgSW50ZWdyYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB0aGF0IHN5emthbGxlciBkZXNjcmlwdGlvbnMgYXJlbiYjMzk7dCBhY3R1YWxseSAqaW4qIHRoZSBrZXJuZWwgdHJlZSwgcmlnaHQ/IFRoZXkmIzM5O3JlIGV4dGVybmFsLCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoYXQgdGVzdGluZyBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBmaW5kIHNvbWUgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBITlMzIGhhcmR3YXJlIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZj8gSnVzdCB0byBjbGFyaWZ5LCBubywgaXQmIzM5O3MgYSBkZWRpY2F0ZWQgaGFyZHdhcmUgZHJpdmVyLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3IgZnV6emluZzogQ2FuIGV0aHRvb2wgY29tbWFuZHMgZXZlbiBiZSByZWFjaGVkIGlmIHRoZSBkZXZpY2UgcHJvYmUgZmFpbHM/IEl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSwgSSBiZWxpZXZlLiBUaGUgZXRodG9vbCBjb21tYW5kcyBhcmUgcm91dGVkIHRvIHRoZSBuZXRkZXYsIGFuZCB0aGF0IGBuZXRkZXZgIGlzIG9ubHkgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIHByb2JlLiBTbywgdGhhdCYjMzk7cyBub3QgYSBsaWtlbHkgdnVsbmVyYWJpbGl0eSBwYXRoLiBTdGlsbCwgSSBzaG91bGQgdmVyaWZ5IHByZWNpc2VseSB3aGVyZSBgcmVnaXN0ZXJfbmV0ZGV2YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRoYXTigJlzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz01Mzc0PXN0YXRpYyBpbnQgaG5zM19jbGllbnRfaW5pdChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtNTQ4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjU0ODM6XHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU0ODQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9NTUxNz1zdGF0aWMgdm9pZCBobnMzX2NsaWVudF91bmluaXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU1MjItXHRpZiAobmV0ZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfVU5JTklUSUFMSVpFRClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjU1MjM6XHRcdHVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ5NAoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSE5TMyBDbGllbnQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gYGhuczNfY2xpZW50X2luaXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgcmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMga2V5LiBCdXQgYGhuczNfY2xpZW50X2luaXRgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGhuYWUzX2luaXRfY2xpZW50X2luc3RhbmNlYC4gQW5kIHRoYXQsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2YCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgaG5zM19wcm9iZWAuIEl0JiMzOTtzIGEgY2hhaW4sIGFuZCB0aGUgc3VjY2VzcyBvZiB0aGUgd2hvbGUgdGhpbmcgcmVsaWVzIG9uIGVhY2ggc3RlcCB3b3JraW5nLgoKVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyBgaGNsZ2VfaW5pdF9hZV9kZXZgLiBJZiAqdGhhdCogZmFpbHMsIHRoZW4gYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgd2lsbCBhbHNvIGZhaWwsIGFuZCB0aGVuIGBobnMzX2NsaWVudF9pbml0YCB3aWxsICpuZXZlciogZ2V0IGNhbGxlZC4gTWVhbmluZyB0aGUgbmV0ZGV2IHdvbiYjMzk7dCBiZSByZWdpc3RlcmVkLiBBbmQgaWYgdGhlIG5ldGRldiBpc24mIzM5O3QgcmVnaXN0ZXJlZCwgbm8gZXRodG9vbCBjb21tYW5kcyBjYW4gYmUgc2VudCB0byBpdC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KClNvLCBpbiBhbiBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBhcmUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGlzIHdob2xlIHBhdGggaXMgbGlrZWx5IGRlYWQgb24gYXJyaXZhbC4gVGhlcmUmIzM5O3Mgbm8gYWN0dWFsIEhOUzMgaGFyZHdhcmUgZm9yIGl0IHRvIGNvbW11bmljYXRlIHdpdGguIFRoZSBgaGNsZ2VfaW5pdF9hZV9kZXZgIGNhbGwgaXMgZ29pbmcgdG8gZmFpbCBiZWNhdXNlIGl0IG5lZWRzIHRvIGV4ZWN1dGUgYSBjb21tYW5kIHRocm91Z2ggYGhjbGdlX2NvbW1fY21kX3NlbmRgLiBObyBoYXJkd2FyZSwgbm8gc3VjY2Vzcy4KCldhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBhcmVuJiMzOTt0IEk/IElzIHRoZXJlICphbnkqIGNoYW5jZSB0aGF0IGBoY2xnZV9pbml0X2FlX2RldmAgY291bGQgc3VjY2VlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlPyBJdCYjMzk7cyByYXJlIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgc3VyZS4gVGltZSB0byBjaGVjayBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgYW5kIHNlZSBpZiBpdCBoYXMgc29tZSBraW5kIG9mIGZhbGxiYWNrIG9yIHZpcnR1YWxpemVkIHBhdGguIEJlY2F1c2UgaWYgaXQgZG9lcywgdGhlbiBzb21lIG9yIGFsbCBvZiB0aGlzIGNvdWxkIGJlIHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdCAqIGhjbGdlX2NvbW1fY21kX3NlbmQgLSBzZW5kIGNvbW1hbmQgdG8gY29tbWFuZCBxdWV1ZVxuIDQ2NjpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG4gNDY3Olx0ICogQGRlc2M6IHByZWZpbGxlZCBkZXNjcmlwdG9yIGZvciBkZXNjcmliaW5nIHRoZSBjb21tYW5kXG4gNDY4Olx0ICogQG51bSA6IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUgc2VudFxuIDQ2OTpcdCAqXG4gNDcwOlx0ICogVGhpcyBpcyB0aGUgbWFpbiBzZW5kIGNvbW1hbmQgZm9yIGNvbW1hbmQgcXVldWUsIGl0XG4gNDcxOlx0ICogc2VuZHMgdGhlIHF1ZXVlLCBjbGVhbnMgdGhlIHF1ZXVlLCBldGNcbiA0NzI6XHQgKiovXG4gNDczOlx0aW50IGhjbGdlX2NvbW1fY21kX3NlbmQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcbiA0NzQ6XHRcdFx0XHRpbnQgbnVtKVxuIDQ3NTpcdHtcbiA0NzY6XHRcdGJvb2wgaXNfc3BlY2lhbCA9IGhjbGdlX2NvbW1faXNfc3BlY2lhbF9vcGNvZGUobGUxNl90b19jcHUoZGVzYy1cdTAwM2VvcGNvZGUpKTtcbiA0Nzc6XHRcdHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpjc3EgPSBcdTAwMjZody1cdTAwM2VjbXEuY3NxO1xuIDQ3ODpcdFx0aW50IHJldDtcbiA0Nzk6XHRcdGludCBudGM7XG4gNDgwOlx0XG4gNDgxOlx0XHRpZiAoaHctXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfc2VuZClcbiA0ODI6XHRcdFx0aHctXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfc2VuZChodywgZGVzYywgbnVtLCBpc19zcGVjaWFsKTtcbiA0ODM6XHRcbiA0ODQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZody1cdTAwM2VjbXEuY3NxLmxvY2spO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aWYgKHRlc3RfYml0KEhDTEdFX0NPTU1fU1RBVEVfQ01EX0RJU0FCTEUsIFx1MDAyNmh3LVx1MDAzZWNvbW1fc3RhdGUpKSB7XG4gNDg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EubG9jayk7XG4gNDg4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNDg5Olx0XHR9XG4gNDkwOlx0XG4gNDkxOlx0XHRpZiAobnVtIFx1MDAzZSBoY2xnZV9jb21tX3Jpbmdfc3BhY2UoXHUwMDI2aHctXHUwMDNlY21xLmNzcSkpIHtcbiA0OTI6XHRcdFx0LyogSWYgQ01EUSByaW5nIGlzIGZ1bGwsIFNXIEhFQUQgYW5kIEhXIEhFQUQgbWF5IGJlIGRpZmZlcmVudCxcbiA0OTM6XHRcdFx0ICogbmVlZCB1cGRhdGUgdGhlIFNXIEhFQUQgcG9pbnRlciBjc3EtXHUwMDNlbmV4dF90b19jbGVhblxuIDQ5NDpcdFx0XHQgKi9cbiA0OTU6XHRcdFx0Y3NxLVx1MDAzZW5leHRfdG9fY2xlYW4gPVxuIDQ5NjpcdFx0XHRcdGhjbGdlX2NvbW1fcmVhZF9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyk7XG4gNDk3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EubG9jayk7XG4gNDk4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNDk5Olx0XHR9XG4gNTAwOlx0XG4gNTAxOlx0XHQvKipcbiA1MDI6XHRcdCAqIFJlY29yZCB0aGUgbG9jYXRpb24gb2YgZGVzYyBpbiB0aGUgcmluZyBmb3IgdGhpcyB0aW1lXG4gNTAzOlx0XHQgKiB3aGljaCB3aWxsIGJlIHVzZSBmb3IgaGFyZHdhcmUgdG8gd3JpdGUgYmFja1xuIDUwNDpcdFx0ICovXG4gNTA1Olx0XHRudGMgPSBody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xuIDUwNjpcdFxuIDUwNzpcdFx0aGNsZ2VfY29tbV9jbWRfY29weV9kZXNjKGh3LCBkZXNjLCBudW0pO1xuIDUwODpcdFxuIDUwOTpcdFx0LyogV3JpdGUgdG8gaGFyZHdhcmUgKi9cbiA1MTA6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfVEFJTF9SRUcsXG4gNTExOlx0XHRcdFx0ICAgICBody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlKTtcbiA1MTI6XHRcbiA1MTM6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChodywgZGVzYywgbnVtLCBudGMpO1xuIDUxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA4MgoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0YCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSwgd2hhdCBpbnB1dHMgaXQgdGFrZXMsIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgbmF0dXJlIG9mIGl0cyByZXN1bHQuIElzIGl0IHByaW1hcmlseSBmb3IgZXJyb3IgY2hlY2tpbmcsIHZhbGlkYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGFyZSB0aGUgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCBkbyB0aGV5IHNpZ25pZnk/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIGFueSByZWxhdGVkIGNvbW1lbnRzIGluIHRoZSBjb2RlLCBhbmQgaWRlYWxseSwgYW55IGRvY3VtZW50YXRpb24gdGhhdCBleGlzdHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoaXMgZnVuY3Rpb24gY29tcGxldGVseS4gVGhhdCBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGxvb3BzLCBhbmQgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcy4gVWx0aW1hdGVseSwgbXkgYWltIGlzIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGNoZWNrIG9wZXJhdGVzIHNvIEkgY2FuIGFwcGx5IHRoYXQga25vd2xlZGdlIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzNTpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcbiA0MzY6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcbiA0Mzc6XHRcdFx0XHRcdCAgICAgICBpbnQgbnVtLCBpbnQgbnRjKVxuIDQzODpcdHtcbiA0Mzk6XHRcdGJvb2wgaXNfY29tcGxldGVkID0gZmFsc2U7XG4gNDQwOlx0XHRpbnQgaGFuZGxlLCByZXQ7XG4gNDQxOlx0XG4gNDQyOlx0XHQvKiBJZiB0aGUgY29tbWFuZCBpcyBzeW5jLCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gd3JpdGUgYmFjayxcbiA0NDM6XHRcdCAqIGlmIG11bHRpIGRlc2NyaXB0b3JzIHRvIGJlIHNlbnQsIHVzZSB0aGUgZmlyc3Qgb25lIHRvIGNoZWNrXG4gNDQ0Olx0XHQgKi9cbiA0NDU6XHRcdGlmIChIQ0xHRV9DT01NX1NFTkRfU1lOQyhsZTE2X3RvX2NwdShkZXNjLVx1MDAzZWZsYWcpKSlcbiA0NDY6XHRcdFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZW9wY29kZSksXG4gNDQ3Olx0XHRcdFx0XHRcdCBcdTAwMjZpc19jb21wbGV0ZWQpO1xuIDQ0ODpcdFxuIDQ0OTpcdFx0aWYgKCFpc19jb21wbGV0ZWQpXG4gNDUwOlx0XHRcdHJldCA9IC1FQkFERTtcbiA0NTE6XHRcdGVsc2VcbiA0NTI6XHRcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmV0dmFsKGh3LCBkZXNjLCBudW0sIG50Yyk7XG4gNDUzOlx0XG4gNDU0Olx0XHQvKiBDbGVhbiB0aGUgY29tbWFuZCBzZW5kIHF1ZXVlICovXG4gNDU1Olx0XHRoYW5kbGUgPSBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oaHcpO1xuIDQ1NjpcdFx0aWYgKGhhbmRsZSBcdTAwM2MgMClcbiA0NTc6XHRcdFx0cmV0ID0gaGFuZGxlO1xuIDQ1ODpcdFx0ZWxzZSBpZiAoaGFuZGxlICE9IG51bSlcbiA0NTk6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2aHctXHUwMDNlY21xLmNzcS5wZGV2LVx1MDAzZWRldixcbiA0NjA6XHRcdFx0XHQgXCYjMzQ7Y2xlYW5lZCAlZCwgbmVlZCB0byBjbGVhbiAlZFxcblwmIzM0OywgaGFuZGxlLCBudW0pO1xuIDQ2MTpcdFx0cmV0dXJuIHJldDtcbiA0NjI6XHR9XG4gNDYzOlx0XG4gNDY0Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODU0CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNvZGUgaXMgd2FpdGluZyBmb3IgYSBmaXJtd2FyZSB3cml0ZWJhY2ssIHNwZWNpZmljYWxseSB3aXRoaW4gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgd2UmIzM5O2xsIGhpdCBhIHRpbWVvdXQgYW5kIGdldCBhbiBgLUVCQURFYCBlcnJvci4gVGhpcyBtZWFucyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZhaWxzLCBhbmQgY29uc2VxdWVudGx5LCB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSB3b24mIzM5O3QgcmVnaXN0ZXIuCgpNeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcywgY291bGQgd2UgZmluZCBhIHdheSB0byBjaXJjdW12ZW50IHRoaXM/IE5vcGUsIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIGl0JiMzOTtzIHByZXR0eSBleHBsaWNpdCB0aGF0IGl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLiBJdCB3b24mIzM5O3QgaW5pdGlhbGl6ZSB3aXRob3V0IGVpdGhlci4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciByb3V0ZSB0byBgaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXRgLCB3aGljaCBpcyBteSB0YXJnZXQuCgpJIHRyYWNlIHRoZSBjYWxsLCBhbmQgaXTigJlzIGNhbGxlZCBmcm9tIGBobnMzX3NldF90dW5hYmxlYCwgd2hpY2ggaXMgYW4gZXRodG9vbCBjYWxsYmFjay4gTm93LCBldGh0b29sIGNhbGxiYWNrcyBhcmUgb25seSBhY2Nlc3NpYmxlIHdoZW4gdGhlIG5ldGRldiBpcyByZWdpc3RlcmVkLiBBbmQgYXMgd2UmIzM5O3ZlIGVzdGFibGlzaGVkLCB0aGUgbmV0ZGV2IHdvbiYjMzk7dCByZWdpc3RlciB3aXRob3V0IGhhcmR3YXJlLiBUaGF0JiMzOTtzIGl0ISBUaGlzIGNvZGUgcGF0aCwgYmVjYXVzZSBvZiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeSwgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLgoKT2theSwgbGV0IG1lIGNvbmZpcm0uIFRoZSByZXF1aXJlbWVudHMgYXJlIGNsZWFyOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGUgSGlzaWxpY29uIEhOUzMgdGhhdCBJJiMzOTttIGF3YXJlIG9mLCBhbmQgaXQmIzM5O3MgYSBQQ0llIGRldmljZSwgd2hpY2ggbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUgcmVzcG9uc2VzIHRvIGluaXRpYWxpemUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGVzZSBlbnZpcm9ubWVudHMuIEJhc2VkIG9uIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSE5TMyBuZXR3b3JrIGRyaXZlciB0byBzdXBwb3J0IHNldHRpbmcgYW5kIGdldHRpbmcgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dCB2aWEgZXRodG9vbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUgKG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMgZHVyaW5nIGZpcm13YXJlIGNvbW11bmljYXRpb24sIG1lYW5pbmcgdGhlIG5ldGRldiBpcyBuZXZlciByZWdpc3RlcmVkIGFuZCB0aGUgbW9kaWZpZWQgZXRodG9vbCBjYWxsYmFja3MgY2Fubm90IGJlIHJlYWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSGlzaWxpY29uIEhOUzMgbmV0d29yayBkcml2ZXIgdG8gc3VwcG9ydCBzZXR0aW5nIGFuZCBnZXR0aW5nIFBGQyBzdG9ybSBwcmV2ZW50aW9uIHRpbWVvdXQgdmlhIGV0aHRvb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYWN0dWFsIGhhcmR3YXJlIChvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBuZXRkZXYuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzIGR1cmluZyBmaXJtd2FyZSBjb21tdW5pY2F0aW9uLCBtZWFuaW5nIHRoZSBuZXRkZXYgaXMgbmV2ZXIgcmVnaXN0ZXJlZCBhbmQgdGhlIG1vZGlmaWVkIGV0aHRvb2wgY2FsbGJhY2tzIGNhbm5vdCBiZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIwOjU5OjQ2LjcwMzg4MjI2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODM1ODY1NzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBITlMzIG5ldHdvcmsgZHJpdmVyIHRvIHN1cHBvcnQgc2V0dGluZyBhbmQgZ2V0dGluZyBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHZpYSBldGh0b29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSAob3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cykgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlciBwcm9iZSBmYWlscyBkdXJpbmcgZmlybXdhcmUgY29tbXVuaWNhdGlvbiwgbWVhbmluZyB0aGUgbmV0ZGV2IGlzIG5ldmVyIHJlZ2lzdGVyZWQgYW5kIHRoZSBtb2RpZmllZCBldGh0b29sIGNhbGxiYWNrcyBjYW5ub3QgYmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIwOjU5OjQ2LjcwMzg5MjIzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3ODM3Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWJkMTJmMGE5MmIyMjRkYjU4MWJhMDNkMmQ2ZDk0MDg4M2VjNTcyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAyMDo1OTo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi40Mjg2YWY5MjM5YjAxNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbkBAIC02MDIsNiArNjAyLDEwIEBAIHR5cGVkZWYgaW50ICgqcmVhZF9mdW5jKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpO1xcbiAgKiAgIENvbmZpZyB3YWtlIG9uIGxhblxcbiAgKiBkYmdfZ2V0X3JlYWRfZnVuY1xcbiAgKiAgIFJldHVybiB0aGUgcmVhZCBmdW5jIGZvciBkZWJ1Z2ZzIHNlcSBmaWxlXFxuKyAqIHNldF9wZmNfcHJldmVudGlvbl90b3V0XFxuKyAqICAgU2V0IFBGQyBzdG9ybSBwcmV2ZW50aW9uIHRpbWVvdXRcXG4rICogZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXRcXG4rICogICBHZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxcbiAgKi9cXG4gc3RydWN0IGhuYWUzX2FlX29wcyB7XFxuIFxcdGludCAoKmluaXRfYWVfZGV2KShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpO1xcbkBAIC04MTAsNiArODE0LDggQEAgc3RydWN0IGhuYWUzX2FlX29wcyB7XFxuIFxcdGludCAoKmh3dHN0YW1wX3NldCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK1xcdGludCAoKnNldF9wZmNfcHJldmVudGlvbl90b3V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHUxNiB0aW1lcyk7XFxuK1xcdGludCAoKmdldF9wZmNfcHJldmVudGlvbl90b3V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHUxNiAqdGltZXMpO1xcbiB9O1xcbiBcXG4gc3RydWN0IGhuYWUzX2RjYl9vcHMge1xcbkBAIC04OTEsNiArODk3LDE0IEBAIHN0cnVjdCBobmFlM19yb2NlX3ByaXZhdGVfaW5mbyB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhdGU7XFxuIH07XFxuIFxcbitzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEge1xcbitcXHR1MzIgZGlyO1xcbitcXHR1MzIgZW5hYmxlO1xcbitcXHR1MzIgcGVyaW9kX21zO1xcbitcXHR1MzIgdGltZXM7XFxuK1xcdHUzMiByZWNvdmVyeV9wZXJpb2RfbXM7XFxuK307XFxuK1xcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfQVBQX0xPT1BCQUNLICAgIEJJVCgwKVxcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfUEhZX0xPT1BCQUNLICAgIEJJVCgxKVxcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfU0VSREVTX1NFUklBTF9MT09QQkFDS1xcdEJJVCgyKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxcbmluZGV4IDJjMmEyZjFlMGQ3YTY2Li42ZGRlMDdkZGUxZThlYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxcbkBAIC0zMTQsNiArMzE0LDkgQEAgZW51bSBoY2xnZV9vcGNvZGVfdHlwZSB7XFxuIFxcbiBcXHQvKiBRdWVyeSBsaW5rIGRpYWdub3NpcyBpbmZvIGNvbW1hbmQgKi9cXG4gXFx0SENMR0VfT1BDX1FVRVJZX0xJTktfRElBR05PU0lTXFx0PSAweDcwMkEsXFxuK1xcbitcXHQvKiBDb25maWcgcGF1c2Ugc3Rvcm0gcGFyYW0gY29tbWFuZCAqL1xcbitcXHRIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEgPSAweDcwMTksXFxuIH07XFxuIFxcbiBlbnVtIGhjbGdlX2NvbW1fY21kX3JldHVybl9zdGF0dXMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXFxuaW5kZXggNDQyZjE1NDc2YWYzMmEuLmU3MzE4ZjIzNjMxNTc2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmNcXG5AQCAtMTg5NSw2ICsxODk1LDEyIEBAIHN0YXRpYyBpbnQgaG5zM19nZXRfdHVuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRjYXNlIEVUSFRPT0xfVFhfQ09QWUJSRUFLX0JVRl9TSVpFOlxcbiBcXHRcXHQqKHUzMiAqKWRhdGEgPSBoLVxcdTAwM2VraW5mby50eF9zcGFyZV9idWZfc2l6ZTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUOlxcbitcXHRcXHRpZiAoIWgtXFx1MDAzZWFlX2FsZ28tXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdFxcdHJldCA9IGgtXFx1MDAzZWFlX2FsZ28tXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yMDIwLDYgKzIwMjYsMTIgQEAgc3RhdGljIGludCBobnMzX3NldF90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdG5ldGRldl9pbmZvKG5ldGRldiwgXFxcInRoZSBhY3RpdmUgdHggc3BhcmUgYnVmIHNpemUgaXMgJXUsIGR1ZSB0byBwYWdlIG9yZGVyXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlcmluZy1cXHUwMDNldHhfc3BhcmUtXFx1MDAzZWxlbik7XFxuIFxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XFxuK1xcdFxcdGlmICghaC1cXHUwMDNlYWVfYWxnby1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfcGZjX3ByZXZlbnRpb25fdG91dClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0XFx0cmV0ID0gaC1cXHUwMDNlYWVfYWxnby1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfcGZjX3ByZXZlbnRpb25fdG91dChoLCAqKHUxNiAqKWRhdGEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaFxcbmluZGV4IDRjZTkyZGRlZmNkZWQyLi4xYzAyOWRjMzJhYjhmNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcXG5AQCAtODkwLDYgKzg5MCwxNSBAQCBzdHJ1Y3QgaGNsZ2VfcXVlcnlfd29sX3N1cHBvcnRlZF9jbWQge1xcbiBcXHR1OCByc3ZbMjBdO1xcbiB9O1xcbiBcXG4rc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCB7XFxuK1xcdF9fbGUzMiBkaXI7XFxuK1xcdF9fbGUzMiBlbmFibGU7XFxuK1xcdF9fbGUzMiBwZXJpb2RfbXM7XFxuK1xcdF9fbGUzMiB0aW1lcztcXG4rXFx0X19sZTMyIHJlY292ZXJ5X3BlcmlvZF9tcztcXG4rXFx0X19sZTMyIHJzdjtcXG4rfTtcXG4rXFxuIHN0cnVjdCBoY2xnZV9odztcXG4gaW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXFxuaW5kZXggZmM4NTg3YzgwODEzNzEuLmEwOGQ4YTM1YWVmOTg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXFxuQEAgLTM1MjQsNiArMzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSlcXG4re1xcbitcXHRzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICpwYXJhX2NtZDtcXG4rXFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChoZGV2LVxcdTAwM2VhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uIFxcdTAwM2MgSE5BRTNfREVWSUNFX1ZFUlNJT05fVjMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGhjbGdlX2NtZF9zZXR1cF9iYXNpY19kZXNjKFxcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsXFxuK1xcdFxcdFxcdFxcdCAgIGZhbHNlKTtcXG4rXFx0cGFyYV9jbWQgPSAoc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqKWRlc2MuZGF0YTtcXG4rXFx0cGFyYV9jbWQtXFx1MDAzZWRpciA9IGNwdV90b19sZTMyKHBhcmEtXFx1MDAzZWRpcik7XFxuK1xcdHBhcmFfY21kLVxcdTAwM2VlbmFibGUgPSBjcHVfdG9fbGUzMihwYXJhLVxcdTAwM2VlbmFibGUpO1xcbitcXHRwYXJhX2NtZC1cXHUwMDNlcGVyaW9kX21zID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNlcGVyaW9kX21zKTtcXG4rXFx0cGFyYV9jbWQtXFx1MDAzZXRpbWVzID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNldGltZXMpO1xcbitcXHRwYXJhX2NtZC1cXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcXG4rXFxuK1xcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFxcdTAwMjZoZGV2LVxcdTAwM2VodywgXFx1MDAyNmRlc2MsIDEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdG8gc2V0IHBmYyBzdG9ybSBwYXJhLCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSlcXG4re1xcbitcXHRzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICpwYXJhX2NtZDtcXG4rXFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChoZGV2LVxcdTAwM2VhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uIFxcdTAwM2MgSE5BRTNfREVWSUNFX1ZFUlNJT05fVjMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGhjbGdlX2NtZF9zZXR1cF9iYXNpY19kZXNjKFxcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsIHRydWUpO1xcbitcXHRwYXJhX2NtZCA9IChzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICopZGVzYy5kYXRhO1xcbitcXHRwYXJhX2NtZC1cXHUwMDNlZGlyID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNlZGlyKTtcXG4rXFx0cmV0ID0gaGNsZ2VfY21kX3NlbmQoXFx1MDAyNmhkZXYtXFx1MDAzZWh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGdldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBhcmEtXFx1MDAzZWVuYWJsZSA9IGxlMzJfdG9fY3B1KHBhcmFfY21kLVxcdTAwM2VlbmFibGUpO1xcbitcXHRwYXJhLVxcdTAwM2VwZXJpb2RfbXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cXHUwMDNlcGVyaW9kX21zKTtcXG4rXFx0cGFyYS1cXHUwMDNldGltZXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cXHUwMDNldGltZXMpO1xcbitcXHRwYXJhLVxcdTAwM2VyZWNvdmVyeV9wZXJpb2RfbXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBkaXIsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhID0gezB9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGFyYS5kaXIgPSBkaXI7XFxuK1xcdHJldCA9IGhjbGdlX2dldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCBcXHUwMDI2cGFyYSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwYXJhLmVuYWJsZSA9IGVuYWJsZTtcXG4rXFx0cmV0dXJuIGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCBcXHUwMDI2cGFyYSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaCwgdTE2IHRpbWVzKVxcbit7XFxuK1xcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XFxuK1xcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC1cXHUwMDNlYmFjaztcXG4rXFx0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAodGltZXMgXFx1MDAzZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJ0aW1lcyAldSBzaG91bGQgYmUgbm8gbW9yZSB0aGFuICV1IVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dGltZXMsIEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBhcmEuZGlyID0gSENMR0VfRElSX1RYO1xcbitcXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXFx1MDAyNnBhcmEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGFyYS5lbmFibGUgPSB0aW1lcyA/IDEgOiAwO1xcbitcXHRwYXJhLnRpbWVzID0gKHUzMil0aW1lcztcXG4rXFx0cmV0ID0gaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFxcdTAwMjZwYXJhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGhkZXYtXFx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQgPSB0aW1lcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHUxNiAqdGltZXMpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoKTtcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVxcdTAwM2ViYWNrO1xcbitcXHRzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEgcGFyYTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBhcmEuZGlyID0gSENMR0VfRElSX1RYO1xcbitcXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXFx1MDAyNnBhcmEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnRpbWVzID0gcGFyYS5lbmFibGUgPyAodTE2KXBhcmEudGltZXMgOiAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGhjbGdlX3NldF9yZXNldF9wZW5kaW5nKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIGhuYWUzX3Jlc2V0X3R5cGUgcmVzZXRfdHlwZSlcXG4ge1xcbkBAIC00MzE3LDYgKzQ0MzMsMjYgQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuIFxcdHJldHVybiBoY2xnZV9yZXNldF9wcmVwYXJlX3dhaXQoaGRldik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGhjbGdlX3Jlc3RvcmVfcGZjX3N0b3JtX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9IFxcdTAwMjZoZGV2LVxcdTAwM2V2cG9ydFswXS5uaWM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XFxuK1xcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZWxzZSBpZiAocmV0KVxcbitcXHRcXHRkZXZfd2FybihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBkaXNhYmxlIHJ4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IHJldCk7XFxuK1xcbitcXHRyZXQgPSBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIGhkZXYtXFx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfd2FybihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBzZXQgdHggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcmV0KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBoY2xnZV9yZXNldF9yZWJ1aWxkKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtOTI3OCw2ICs5NDE0LDMyIEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF93b2woc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4gXFx0cmV0dXJuIGhjbGdlX3VwZGF0ZV93b2woaGRldik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGhjbGdlX2luaXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9IFxcdTAwMjZoZGV2LVxcdTAwM2V2cG9ydFswXS5uaWM7XFxuK1xcdHUxNiB0aW1lcztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChoZGV2LCBIQ0xHRV9ESVJfUlgsIGZhbHNlKTtcXG4rXFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRlbHNlIGlmIChyZXQpXFxuK1xcdFxcdGRldl93YXJuKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcmV0KTtcXG4rXFxuK1xcdHJldCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0KGhhbmRsZSwgXFx1MDAyNnRpbWVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfd2FybihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBnZXQgdHggcGZjIHByZXZlbnRpb24gdGltZW91dCwgcmV0ID0gJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCByZXQpO1xcbitcXHRcXHR0aW1lcyA9IEhDTEdFX0RFRkFVTFRfUEZDX1BSRVZFTlRJT05fVE9VVDtcXG4rXFx0fVxcbitcXG4rXFx0aGRldi1cXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dCA9IHRpbWVzO1xcbitcXHRoZGV2LVxcdTAwM2VwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQgPSB0aW1lcztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaGNsZ2VfZ2V0X3dvbChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbiB7XFxuQEAgLTk1NDcsNiArOTcwOSw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbiBcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHQgXFxcImZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFxuK1xcdGhjbGdlX2luaXRfcGZjX3ByZXZlbnRpb25fdG91dChoZGV2KTtcXG4rXFxuIFxcdHJldCA9IGhjbGdlX2RldmxpbmtfaW5pdChoZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBlcnJfcHRwX3VuaW5pdDtcXG5AQCAtOTk0Niw2ICsxMDExMCw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcXG4gXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0IFxcXCJmYWlsZWQgdG8gdXBkYXRlIHdvbCBjb25maWcsIHJldCA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXG4rXFx0aGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KGhkZXYpO1xcbitcXG4gXFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlJlc2V0IGRvbmUsICVzIGRyaXZlciBpbml0aWFsaXphdGlvbiBmaW5pc2hlZC5cXFxcblxcXCIsXFxuIFxcdFxcdCBIQ0xHRV9EUklWRVJfTkFNRSk7XFxuIFxcbkBAIC05OTc3LDYgKzEwMTQzLDEwIEBAIHN0YXRpYyB2b2lkIGhjbGdlX3VuaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbiBcXHRoY2xnZV9jb25maWdfbmljX2h3X2Vycm9yKGhkZXYsIGZhbHNlKTtcXG4gXFx0aGNsZ2VfY29uZmlnX3JvY2VlX3Jhc19pbnRlcnJ1cHQoaGRldiwgZmFsc2UpO1xcbiBcXG4rXFx0LyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi9cXG4rXFx0aGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoXFx1MDAyNmhkZXYtXFx1MDAzZXZwb3J0LVxcdTAwM2VuaWMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGhkZXYtXFx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdCk7XFxuK1xcbiBcXHRoY2xnZV9jb21tX2NtZF91bmluaXQoaGRldi1cXHUwMDNlYWVfZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcpO1xcbiBcXHRoY2xnZV9taXNjX2lycV91bmluaXQoaGRldik7XFxuIFxcdGhjbGdlX2RldmxpbmtfdW5pbml0KGhkZXYpO1xcbkBAIC0xMDUzOSw2ICsxMDcwOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcXG4gXFx0LnNldF93b2wgPSBoY2xnZV9zZXRfd29sLFxcbiBcXHQuaHd0c3RhbXBfZ2V0ID0gaGNsZ2VfcHRwX2dldF9jZmcsXFxuIFxcdC5od3RzdGFtcF9zZXQgPSBoY2xnZV9wdHBfc2V0X2NmZyxcXG4rXFx0LnNldF9wZmNfcHJldmVudGlvbl90b3V0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQsXFxuK1xcdC5nZXRfcGZjX3ByZXZlbnRpb25fdG91dCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0LFxcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBobmFlM19hZV9hbGdvIGFlX2FsZ28gPSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuaW5kZXggNzQxOTQ4MTQyMmMzMTAuLjBjZWU4OTQ3ZjZiNDRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuQEAgLTM0Niw2ICszNDYsMTEgQEAgZW51bSBoY2xnZV9saW5rX2ZhaWxfY29kZSB7XFxuICNkZWZpbmUgSENMR0VfTElOS19TVEFUVVNfRE9XTiAwXFxuICNkZWZpbmUgSENMR0VfTElOS19TVEFUVVNfVVAgICAxXFxuIFxcbisjZGVmaW5lIEhDTEdFX0RJUl9SWCAwXFxuKyNkZWZpbmUgSENMR0VfRElSX1RYIDFcXG4rI2RlZmluZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVFxcdFxcdDIwMDBcXG4rI2RlZmluZSBIQ0xHRV9ERUZBVUxUX1BGQ19QUkVWRU5USU9OX1RPVVRcXHQxMDAwXFxuK1xcbiAjZGVmaW5lIEhDTEdFX1BHX05VTVxcdFxcdDRcXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9TUFxcdDBcXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9EV1JSXFx0MVxcbkBAIC04OTgsNiArOTAzLDggQEAgc3RydWN0IGhjbGdlX2RldiB7XFxuIFxcdHUxNiB2Zl9yc3Nfc2l6ZV9tYXg7XFx0XFx0LyogSFcgZGVmaW5lZCBWRiBtYXggUlNTIHRhc2sgcXVldWUgKi9cXG4gXFx0dTE2IHBmX3Jzc19zaXplX21heDtcXHRcXHQvKiBIVyBkZWZpbmVkIFBGIG1heCBSU1MgdGFzayBxdWV1ZSAqL1xcbiBcXHR1MzIgdHhfc3BhcmVfYnVmX3NpemU7XFx0XFx0LyogSFcgZGVmaW5lZCBUWCBzcGFyZSBidWZmZXIgc2l6ZSAqL1xcbitcXHR1MTYgcGZjX3ByZXZlbnRpb25fdG91dDtcXHQvKiBVc2VyIGNvbmZpZywgcmVzdG9yZWQgYWZ0ZXIgcmVzZXQgKi9cXG4rXFx0dTE2IHBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdDsgLyogSFcgZGVmYXVsdCwgdG8gYXZvaWQgc3RhbGUgc3RhdGUgKi9cXG4gXFxuIFxcdHUxNiBmZGlyX3BmX2ZpbHRlcl9jb3VudDsgLyogTnVtIG9mIGd1YXJhbnRlZWQgZmlsdGVycyBmb3IgdGhpcyBQRiAqL1xcbiBcXHR1MTYgbnVtX2FsbG9jX3Zwb3J0O1xcdFxcdC8qIE51bSB2cG9ydHMgdGhpcyBkcml2ZXIgc3VwcG9ydHMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjA6NTk6NDcuMTMyNDY0MDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc5MzAwNjYwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSE5TMyBuZXR3b3JrIGRyaXZlciB0byBzdXBwb3J0IHNldHRpbmcgYW5kIGdldHRpbmcgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dCB2aWEgZXRodG9vbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUgKG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMgZHVyaW5nIGZpcm13YXJlIGNvbW11bmljYXRpb24sIG1lYW5pbmcgdGhlIG5ldGRldiBpcyBuZXZlciByZWdpc3RlcmVkIGFuZCB0aGUgbW9kaWZpZWQgZXRodG9vbCBjYWxsYmFja3MgY2Fubm90IGJlIHJlYWNoZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGViZDEyZjBhOTJiMjI0ZGI1ODFiYTAzZDJkNmQ5NDA4ODNlYzU3MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAyMDo1OTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5pbmRleCBhODc5OGVlY2Q5ZmJkMC4uNDI4NmFmOTIzOWIwMTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5AQCAtNjAyLDYgKzYwMiwxMCBAQCB0eXBlZGVmIGludCAoKnJlYWRfZnVuYykoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKTtcbiAgKiAgIENvbmZpZyB3YWtlIG9uIGxhblxuICAqIGRiZ19nZXRfcmVhZF9mdW5jXG4gICogICBSZXR1cm4gdGhlIHJlYWQgZnVuYyBmb3IgZGVidWdmcyBzZXEgZmlsZVxuKyAqIHNldF9wZmNfcHJldmVudGlvbl90b3V0XG4rICogICBTZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxuKyAqIGdldF9wZmNfcHJldmVudGlvbl90b3V0XG4rICogICBHZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxuICAqL1xuIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqaW5pdF9hZV9kZXYpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XG5AQCAtODEwLDYgKzgxNCw4IEBAIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqaHd0c3RhbXBfc2V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXHRpbnQgKCpzZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgdGltZXMpO1xuK1x0aW50ICgqZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTE2ICp0aW1lcyk7XG4gfTtcbiBcbiBzdHJ1Y3QgaG5hZTNfZGNiX29wcyB7XG5AQCAtODkxLDYgKzg5NywxNCBAQCBzdHJ1Y3QgaG5hZTNfcm9jZV9wcml2YXRlX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGF0ZTtcbiB9O1xuIFxuK3N0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSB7XG4rXHR1MzIgZGlyO1xuK1x0dTMyIGVuYWJsZTtcbitcdHUzMiBwZXJpb2RfbXM7XG4rXHR1MzIgdGltZXM7XG4rXHR1MzIgcmVjb3ZlcnlfcGVyaW9kX21zO1xuK307XG4rXG4gI2RlZmluZSBITkFFM19TVVBQT1JUX0FQUF9MT09QQkFDSyAgICBCSVQoMClcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfUEhZX0xPT1BCQUNLICAgIEJJVCgxKVxuICNkZWZpbmUgSE5BRTNfU1VQUE9SVF9TRVJERVNfU0VSSUFMX0xPT1BCQUNLXHRCSVQoMilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxuaW5kZXggMmMyYTJmMWUwZDdhNjYuLjZkZGUwN2RkZTFlOGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxuQEAgLTMxNCw2ICszMTQsOSBAQCBlbnVtIGhjbGdlX29wY29kZV90eXBlIHtcbiBcbiBcdC8qIFF1ZXJ5IGxpbmsgZGlhZ25vc2lzIGluZm8gY29tbWFuZCAqL1xuIFx0SENMR0VfT1BDX1FVRVJZX0xJTktfRElBR05PU0lTXHQ9IDB4NzAyQSxcbitcbitcdC8qIENvbmZpZyBwYXVzZSBzdG9ybSBwYXJhbSBjb21tYW5kICovXG4rXHRIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEgPSAweDcwMTksXG4gfTtcbiBcbiBlbnVtIGhjbGdlX2NvbW1fY21kX3JldHVybl9zdGF0dXMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmNcbmluZGV4IDQ0MmYxNTQ3NmFmMzJhLi5lNzMxOGYyMzYzMTU3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuY1xuQEAgLTE4OTUsNiArMTg5NSwxMiBAQCBzdGF0aWMgaW50IGhuczNfZ2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdGNhc2UgRVRIVE9PTF9UWF9DT1BZQlJFQUtfQlVGX1NJWkU6XG4gXHRcdCoodTMyICopZGF0YSA9IGgtXHUwMDNla2luZm8udHhfc3BhcmVfYnVmX3NpemU7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XG4rXHRcdGlmICghaC1cdTAwM2VhZV9hbGdvLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGZjX3ByZXZlbnRpb25fdG91dClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRcdHJldCA9IGgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRicmVhaztcbkBAIC0yMDIwLDYgKzIwMjYsMTIgQEAgc3RhdGljIGludCBobnMzX3NldF90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0bmV0ZGV2X2luZm8obmV0ZGV2LCBcInRoZSBhY3RpdmUgdHggc3BhcmUgYnVmIHNpemUgaXMgJXUsIGR1ZSB0byBwYWdlIG9yZGVyXFxuXCIsXG4gXHRcdFx0XHQgICAgcHJpdi1cdTAwM2VyaW5nLVx1MDAzZXR4X3NwYXJlLVx1MDAzZWxlbik7XG4gXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XG4rXHRcdGlmICghaC1cdTAwM2VhZV9hbGdvLVx1MDAzZW9wcy1cdTAwM2VzZXRfcGZjX3ByZXZlbnRpb25fdG91dClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRcdHJldCA9IGgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKih1MTYgKilkYXRhKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcbmluZGV4IDRjZTkyZGRlZmNkZWQyLi4xYzAyOWRjMzJhYjhmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oXG5AQCAtODkwLDYgKzg5MCwxNSBAQCBzdHJ1Y3QgaGNsZ2VfcXVlcnlfd29sX3N1cHBvcnRlZF9jbWQge1xuIFx0dTggcnN2WzIwXTtcbiB9O1xuIFxuK3N0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQge1xuK1x0X19sZTMyIGRpcjtcbitcdF9fbGUzMiBlbmFibGU7XG4rXHRfX2xlMzIgcGVyaW9kX21zO1xuK1x0X19sZTMyIHRpbWVzO1xuK1x0X19sZTMyIHJlY292ZXJ5X3BlcmlvZF9tcztcbitcdF9fbGUzMiByc3Y7XG4rfTtcbitcbiBzdHJ1Y3QgaGNsZ2VfaHc7XG4gaW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xuaW5kZXggZmM4NTg3YzgwODEzNzEuLmEwOGQ4YTM1YWVmOTg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xuQEAgLTM1MjQsNiArMzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhICpwYXJhKVxuK3tcbitcdHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kO1xuK1x0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoaGRldi1cdTAwM2VhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRoY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYyhcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsXG4rXHRcdFx0XHQgICBmYWxzZSk7XG4rXHRwYXJhX2NtZCA9IChzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICopZGVzYy5kYXRhO1xuK1x0cGFyYV9jbWQtXHUwMDNlZGlyID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VkaXIpO1xuK1x0cGFyYV9jbWQtXHUwMDNlZW5hYmxlID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VlbmFibGUpO1xuK1x0cGFyYV9jbWQtXHUwMDNlcGVyaW9kX21zID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VwZXJpb2RfbXMpO1xuK1x0cGFyYV9jbWQtXHUwMDNldGltZXMgPSBjcHVfdG9fbGUzMihwYXJhLVx1MDAzZXRpbWVzKTtcbitcdHBhcmFfY21kLVx1MDAzZXJlY292ZXJ5X3BlcmlvZF9tcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbitcbitcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFx1MDAyNmhkZXYtXHUwMDNlaHcsIFx1MDAyNmRlc2MsIDEpO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2VycihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmFpbGVkIHRvIHNldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXG5cIiwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhICpwYXJhKVxuK3tcbitcdHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kO1xuK1x0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoaGRldi1cdTAwM2VhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRoY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYyhcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsIHRydWUpO1xuK1x0cGFyYV9jbWQgPSAoc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqKWRlc2MuZGF0YTtcbitcdHBhcmFfY21kLVx1MDAzZWRpciA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlZGlyKTtcbitcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFx1MDAyNmhkZXYtXHUwMDNlaHcsIFx1MDAyNmRlc2MsIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmYWlsZWQgdG8gZ2V0IHBmYyBzdG9ybSBwYXJhLCByZXQgPSAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cGFyYS1cdTAwM2VlbmFibGUgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cdTAwM2VlbmFibGUpO1xuK1x0cGFyYS1cdTAwM2VwZXJpb2RfbXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cdTAwM2VwZXJpb2RfbXMpO1xuK1x0cGFyYS1cdTAwM2V0aW1lcyA9IGxlMzJfdG9fY3B1KHBhcmFfY21kLVx1MDAzZXRpbWVzKTtcbitcdHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuK1x0XHRcdFx0XHQgIGludCBkaXIsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhID0gezB9O1xuK1x0aW50IHJldDtcbitcbitcdHBhcmEuZGlyID0gZGlyO1xuK1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBhcmEuZW5hYmxlID0gZW5hYmxlO1xuK1x0cmV0dXJuIGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCBcdTAwMjZwYXJhKTtcbit9XG4rXG4rc3RhdGljIGludCBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCB1MTYgdGltZXMpXG4re1xuK1x0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoKTtcbitcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC1cdTAwM2ViYWNrO1xuK1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHRpbWVzIFx1MDAzZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJ0aW1lcyAldSBzaG91bGQgYmUgbm8gbW9yZSB0aGFuICV1IVxcblwiLFxuK1x0XHRcdHRpbWVzLCBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGFyYS5kaXIgPSBIQ0xHRV9ESVJfVFg7XG4rXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXHUwMDI2cGFyYSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGFyYS5lbmFibGUgPSB0aW1lcyA/IDEgOiAwO1xuK1x0cGFyYS50aW1lcyA9ICh1MzIpdGltZXM7XG4rXHRyZXQgPSBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXHUwMDI2cGFyYSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aGRldi1cdTAwM2VwZmNfcHJldmVudGlvbl90b3V0ID0gdGltZXM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCB1MTYgKnRpbWVzKVxuK3tcbitcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XG4rXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gdnBvcnQtXHUwMDNlYmFjaztcbitcdHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhO1xuK1x0aW50IHJldDtcbitcbitcdHBhcmEuZGlyID0gSENMR0VfRElSX1RYO1xuK1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCp0aW1lcyA9IHBhcmEuZW5hYmxlID8gKHUxNilwYXJhLnRpbWVzIDogMDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBoY2xnZV9zZXRfcmVzZXRfcGVuZGluZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0XHRcdFx0ICAgIGVudW0gaG5hZTNfcmVzZXRfdHlwZSByZXNldF90eXBlKVxuIHtcbkBAIC00MzE3LDYgKzQ0MzMsMjYgQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gaGNsZ2VfcmVzZXRfcHJlcGFyZV93YWl0KGhkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBoY2xnZV9yZXN0b3JlX3BmY19zdG9ybV9wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XG4rXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuK1x0XHRyZXR1cm47XG4rXHRlbHNlIGlmIChyZXQpXG4rXHRcdGRldl93YXJuKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rXG4rXHRyZXQgPSBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIGhkZXYtXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dCk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcImZhaWxlZCB0byBzZXQgdHggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcmVidWlsZChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuIHtcbiBcdGludCByZXQ7XG5AQCAtOTI3OCw2ICs5NDE0LDMyIEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF93b2woc3RydWN0IGhjbGdlX2RldiAqaGRldilcbiBcdHJldHVybiBoY2xnZV91cGRhdGVfd29sKGhkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBoY2xnZV9pbml0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYztcbitcdHUxNiB0aW1lcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XG4rXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuK1x0XHRyZXR1cm47XG4rXHRlbHNlIGlmIChyZXQpXG4rXHRcdGRldl93YXJuKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rXG4rXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIFx1MDAyNnRpbWVzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X3dhcm4oXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJmYWlsZWQgdG8gZ2V0IHR4IHBmYyBwcmV2ZW50aW9uIHRpbWVvdXQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rXHRcdHRpbWVzID0gSENMR0VfREVGQVVMVF9QRkNfUFJFVkVOVElPTl9UT1VUO1xuK1x0fVxuK1xuK1x0aGRldi1cdTAwM2VwZmNfcHJldmVudGlvbl90b3V0ID0gdGltZXM7XG4rXHRoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdCA9IHRpbWVzO1xuK31cbitcbiBzdGF0aWMgdm9pZCBoY2xnZV9nZXRfd29sKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiB7XG5AQCAtOTU0Nyw2ICs5NzA5LDggQEAgc3RhdGljIGludCBoY2xnZV9pbml0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXG4gXHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdCBcImZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxcblwiLCByZXQpO1xuIFxuK1x0aGNsZ2VfaW5pdF9wZmNfcHJldmVudGlvbl90b3V0KGhkZXYpO1xuK1xuIFx0cmV0ID0gaGNsZ2VfZGV2bGlua19pbml0KGhkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfcHRwX3VuaW5pdDtcbkBAIC05OTQ2LDYgKzEwMTEwLDggQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuIFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiBcdFx0XHQgXCJmYWlsZWQgdG8gdXBkYXRlIHdvbCBjb25maWcsIHJldCA9ICVkXFxuXCIsIHJldCk7XG4gXG4rXHRoY2xnZV9yZXN0b3JlX3BmY19zdG9ybV9wcmV2ZW50aW9uX3RvdXQoaGRldik7XG4rXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJSZXNldCBkb25lLCAlcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmluaXNoZWQuXFxuXCIsXG4gXHRcdCBIQ0xHRV9EUklWRVJfTkFNRSk7XG4gXG5AQCAtOTk3Nyw2ICsxMDE0MywxMCBAQCBzdGF0aWMgdm9pZCBoY2xnZV91bmluaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiBcdGhjbGdlX2NvbmZpZ19uaWNfaHdfZXJyb3IoaGRldiwgZmFsc2UpO1xuIFx0aGNsZ2VfY29uZmlnX3JvY2VlX3Jhc19pbnRlcnJ1cHQoaGRldiwgZmFsc2UpO1xuIFxuK1x0LyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi9cbitcdGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KFx1MDAyNmhkZXYtXHUwMDNldnBvcnQtXHUwMDNlbmljLFxuK1x0XHRcdFx0ICAgICAgaGRldi1cdTAwM2VwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQpO1xuK1xuIFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0KGhkZXYtXHUwMDNlYWVfZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3KTtcbiBcdGhjbGdlX21pc2NfaXJxX3VuaW5pdChoZGV2KTtcbiBcdGhjbGdlX2RldmxpbmtfdW5pbml0KGhkZXYpO1xuQEAgLTEwNTM5LDYgKzEwNzA5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2Vfb3BzID0ge1xuIFx0LnNldF93b2wgPSBoY2xnZV9zZXRfd29sLFxuIFx0Lmh3dHN0YW1wX2dldCA9IGhjbGdlX3B0cF9nZXRfY2ZnLFxuIFx0Lmh3dHN0YW1wX3NldCA9IGhjbGdlX3B0cF9zZXRfY2ZnLFxuK1x0LnNldF9wZmNfcHJldmVudGlvbl90b3V0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQsXG4rXHQuZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaG5hZTNfYWVfYWxnbyBhZV9hbGdvID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5pbmRleCA3NDE5NDgxNDIyYzMxMC4uMGNlZTg5NDdmNmI0NGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5AQCAtMzQ2LDYgKzM0NiwxMSBAQCBlbnVtIGhjbGdlX2xpbmtfZmFpbF9jb2RlIHtcbiAjZGVmaW5lIEhDTEdFX0xJTktfU1RBVFVTX0RPV04gMFxuICNkZWZpbmUgSENMR0VfTElOS19TVEFUVVNfVVAgICAxXG4gXG4rI2RlZmluZSBIQ0xHRV9ESVJfUlggMFxuKyNkZWZpbmUgSENMR0VfRElSX1RYIDFcbisjZGVmaW5lIEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUXHRcdDIwMDBcbisjZGVmaW5lIEhDTEdFX0RFRkFVTFRfUEZDX1BSRVZFTlRJT05fVE9VVFx0MTAwMFxuK1xuICNkZWZpbmUgSENMR0VfUEdfTlVNXHRcdDRcbiAjZGVmaW5lIEhDTEdFX1NDSF9NT0RFX1NQXHQwXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9EV1JSXHQxXG5AQCAtODk4LDYgKzkwMyw4IEBAIHN0cnVjdCBoY2xnZV9kZXYge1xuIFx0dTE2IHZmX3Jzc19zaXplX21heDtcdFx0LyogSFcgZGVmaW5lZCBWRiBtYXggUlNTIHRhc2sgcXVldWUgKi9cbiBcdHUxNiBwZl9yc3Nfc2l6ZV9tYXg7XHRcdC8qIEhXIGRlZmluZWQgUEYgbWF4IFJTUyB0YXNrIHF1ZXVlICovXG4gXHR1MzIgdHhfc3BhcmVfYnVmX3NpemU7XHRcdC8qIEhXIGRlZmluZWQgVFggc3BhcmUgYnVmZmVyIHNpemUgKi9cbitcdHUxNiBwZmNfcHJldmVudGlvbl90b3V0O1x0LyogVXNlciBjb25maWcsIHJlc3RvcmVkIGFmdGVyIHJlc2V0ICovXG4rXHR1MTYgcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0OyAvKiBIVyBkZWZhdWx0LCB0byBhdm9pZCBzdGFsZSBzdGF0ZSAqL1xuIFxuIFx0dTE2IGZkaXJfcGZfZmlsdGVyX2NvdW50OyAvKiBOdW0gb2YgZ3VhcmFudGVlZCBmaWx0ZXJzIGZvciB0aGlzIFBGICovXG4gXHR1MTYgbnVtX2FsbG9jX3Zwb3J0O1x0XHQvKiBOdW0gdnBvcnRzIHRoaXMgZHJpdmVyIHN1cHBvcnRzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMDo1OTo0Ny4xMzI0NjYzMTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY0NDk5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUEZDIFN0b3JtIFByZXZlbnRpb24gUGF0Y2ggZm9yIHRoZSBITlMzIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBjb21pbmcgaW4gdGhhdCBhZGRzIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZ2V0IHRoZSBQcmlvcml0eSBGbG93IENvbnRyb2wgKFBGQykgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHdpdGhpbiB0aGUgSE5TMyBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgaXQgcHJpbWFyaWx5IHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jYCB0byBhZGQgdGhlIG5lY2Vzc2FyeSBgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUYCBob29rcyBmb3IgYGhuczNfZ2V0X3R1bmFibGVgIGFuZCBgaG5zM19zZXRfdHVuYWJsZWAuIFRoZW4sIG9uIHRoZSBIQ0xHRSBQRiBzaWRlLCAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNgIGdldHMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdldCBhbmQgc2V0IGZ1bmN0aW9ucywgbmFtZWx5IGBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dGAgYW5kIGBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dGAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGZ1enogdGhpcz8gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgaG5zM2AsIHdoaWNoIEkgcmVtZW1iZXIgaXMgYSBQQ0kgZHJpdmVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlcnMgYXJlIG9mdGVuIGRpZmZpY3VsdCB0byByZWFjaCBkaXJlY3RseSB1bmxlc3Mgd2UncmUgdXNpbmcgc29tZXRoaW5nIGxpa2UgUUVNVSB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBvciBsZXZlcmFnaW5nIHRvb2xzIGxpa2Ugc3l6LXVzYi9zeXotcGNpLlxuXG5XYWl0IGEgbWludXRlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdyDigJMgYHN5ei1wY2lgISBCdXQgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgSGlzaWxpY29uIEhOUzM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaG5zM2AgaXMgaW5kZWVkIGEgUENJIGRyaXZlciB0byBjb25maXJtIG15IGZ1enppbmcgYXBwcm9hY2guIExldCdzIHNlZS4uLiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY2AgaXMgcGFydCBvZiB0aGUgYGhuczNgIGRyaXZlciwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBwYXJlbnQgZGlyZWN0b3J5IGZvciB0aGUgUENJIGRyaXZlciBpbnN0YW50aWF0aW9uLiBJIHNob3VsZCBzZWFyY2ggZm9yIGBwY2lfZHJpdmVyYCBkZWNsYXJhdGlvbnMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczNgIGRpcmVjdG9yeSB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjA6NTk6NTMuODk2OTY4ODEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzI1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzM1NT1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaG5zM19wbV9vcHMsIGhuczNfc3VzcGVuZCwgaG5zM19yZXN1bWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzM1NzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaG5zM19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1OC1cXHQubmFtZSAgICAgPSBobnMzX2RyaXZlcl9uYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMDo1OTo1My45NTkzMDE1NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTcyNDU2Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gaXQncyBjb25maXJtZWQsIHRoaXMgaXMgYSBQQ0kgZHJpdmVyLiBUaGUgbmV4dCBxdWVzdGlvbiwgbmF0dXJhbGx5LCBpcyB3aGV0aGVyIG9yIG5vdCBpdCdzIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIFBDSSBkZXZpY2UgYmUgZnV6emVkIHVzaW5nIGBzeXotcGNpYD8gSSBrbm93IHRoYXQncyB0aGUgY29tbW9uIGFwcHJvYWNoLCBlc3BlY2lhbGx5IHdoZW4gdGhlIFBDSSBJRHMgYXJlIGtub3duIGFuZCBzeXprYWxsZXIgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gUENJIGRldmljZXMgb2Z0ZW4gKmNhbiogYmUgZW11bGF0ZWQgb3IgZnV6emVkIHRoaXMgd2F5LlxuXG5Ib3dldmVyLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgdXN1YWwgaHVyZGxlcy4gU3BlY2lmaWNhbGx5LCBjb25zaWRlcmluZyBteSBleHBlcmllbmNlLCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgY29tcGxleCBvbmVzIGxpa2UgbmV0d29yayBjYXJkcywgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBtZWFuaW5nZnVsbHkgZnV6eiB3aXRob3V0IGEgcm9idXN0IGVtdWxhdG9yLiBFdmVuIHRob3VnaCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCBpdCdzIG9mdGVuIG5vdCBlbm91Z2ggb24gaXRzIG93bi5cblxuTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSBzb21ldGhpbmcgaW1wb3J0YW50IGFib3V0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgbWVudGlvbnMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIgVGhpcyByYWlzZXMgYSByZWQgZmxhZy4gSXMgdGhlcmUgYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBvcHRpb24gc3BlY2lmaWNhbGx5IGZvciBIaXNpbGljb24gSE5TMz8gSSBkb24ndCByZWNhbGwgc2VlaW5nIG9uZSwgYW5kIHRoYXTigJlzIGEgcHJvYmxlbS5cblxuQ2FuIGBzeXotcGNpYCBldmVuICpyZWFjaCogdGhpcyB0aGluZz8gSXQgY2FuIGNlcnRhaW5seSBwcm9iZSBpdCwgYnV0IGdldHRpbmcgdGhlIGRldmljZSBzZXQgdXAgdG8gYSBwb2ludCB3aGVyZSBgZXRodG9vbGAgY29tbWFuZHMgY2FuIGV2ZW4gYmUgc2VudCB0byB0aGUgbmV0ZGV2IHJlcXVpcmVzIGEgKnN1Y2Nlc3NmdWwqIHByb2JlLiBBbmQsIHdpdGggdGhlc2Uga2luZHMgb2YgY29tcGxleCBuZXR3b3JrIGNhcmRzLCBwcm9iZSBmYWlsdXJlcyBhcmUgdGhlIG5vcm0gdW5sZXNzIHRoZSBoYXJkd2FyZSBpcyBwaHlzaWNhbGx5IHByZXNlbnQgb3IgcGVyZmVjdGx5IGVtdWxhdGVkLiBQcm9iZXMgZmFpbCBiZWNhdXNlIHRoZXkgb2Z0ZW4gaW52b2x2ZSByZWFkaW5nIGhhcmR3YXJlIHJlZ2lzdGVycywgd2FpdGluZyBmb3Igc3BlY2lmaWMgYml0cyB0byBiZSBzZXQsIGFuZCBvdGhlciBoYXJkd2FyZS1kZXBlbmRlbnQgb3BlcmF0aW9ucy5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYGhjbGdlX21haW4uY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDowMC4xMzE3NjEyMTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2NjM3NTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjAwLjE5MjQzNjkzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1Nzg3MDQ3NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyBEb3duIHRoZSBQRiBEcml2ZXIgaW4gdGhlIEhDTEdFIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBwcmltYXJ5IFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyIGlzIHdpdGhpbiB0aGUgSENMR0UgY29kZS4gSW5pdGlhbGx5LCBteSBpbnN0aW5jdHMgcGluZ2VkIGBoY2xnZV9tYWluLmNgIGFzIGEgbGlrZWx5IGNvbnRlbmRlci4gSXQgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgZHJpdmVyIGZ1bmN0aW9uYWxpdHkuIEJ1dCwgSSBrbm93IHRoZXNlIHRoaW5ncyBjYW4gYmUgc3RydWN0dXJlZCBpbiBhIHZhcmlldHkgb2Ygd2F5cywgc28gSSBzaG91bGRuJ3QganVtcCB0byBjb25jbHVzaW9ucy4gSXQncyBiZXN0IHRvIHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIG90aGVyIGNhbmRpZGF0ZXMuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGxvb2sgYXQgYGhuczNfZW5ldC5jYCBhcyB3ZWxsLiBUaGF0IGZpbGUgbmFtZSBsb29rcyBsaWtlIGEgc3Ryb25nIGNhbmRpZGF0ZSB0byBiZSBhIG1vcmUgZGV0YWlsZWQgaW1wbGVtZW50YXRpb24gb2YgZXRoZXJuZXQgZnVuY3Rpb25zLiBHaXZlbiB0aGUgSE5TMyBhcmNoaXRlY3R1cmUsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IGl0cyBoYW5kbGluZyBzb21lIHBvcnRpb24gb2YgdGhlIFBGIGRyaXZlci4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBhbmQgY29uZmlybSB3aGljaCBmaWxlIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBQRi1yZWxhdGVkIGNvZGUuIEknbGwgbmVlZCB0byBkaWcgaW50byBib3RoIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgYW5kIGRhdGEgcGxhbmUgaW50ZXJhY3Rpb25zIGFuZCBwaW4gZG93biB0aGUgdHJ1ZSBQRiBkcml2ZXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDoyNS45Nzk0ODc1MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NTU2NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzEzMD1zdGF0aWMgdm9pZCBobnMzX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDU6LyogaG5zM19wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0Ni0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDgtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTQ5OiAqIGhuczNfcHJvYmUgaW5pdGlhbGl6ZXMgYSBQRiBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1MC0gKiBUaGUgT1MgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyaW5nIG9mIHRoZSBQRiBwcml2YXRlIHN0cnVjdHVyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE1NTpzdGF0aWMgaW50IGhuczNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMzU3PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBobnMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNTktXFx0LmlkX3RhYmxlID0gaG5zM19wY2lfdGJsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMzNjA6XFx0LnByb2JlICAgID0gaG5zM19wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMzYxLVxcdC5yZW1vdmUgICA9IGhuczNfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9NTM3ND1zdGF0aWMgaW50IGhuczNfY2xpZW50X2luaXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtNTQ4NC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6NTQ4NTpcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcInByb2JlIHJlZ2lzdGVyIG5ldGRldiBmYWlsIVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtNTQ4Ni1cXHRcXHRnb3RvIG91dF9yZWdfbmV0ZGV2X2ZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjI2LjA0MTA1NTcwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzIzMTU0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBobnMzX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGBobnMzX3Byb2JlYCBpcyBhbGwgYWJvdXQuIE5vIGFzc3VtcHRpb25zLCBqdXN0IHB1cmUsIG9iamVjdGl2ZSBhbmFseXNpcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBncmFzcCBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UsIHdpdGhvdXQgYW55IHByZWNvbmNlaXZlZCBub3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZGlzc2VjdCBhbmQgYW5hbHl6ZS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyB0aGluZyAqYWN0dWFsbHkqIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDoyOC45NzMzNzU1MjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNTUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTU1OlxcdHN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4zMTU2OlxcdHtcXG4zMTU3OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldjtcXG4zMTU4OlxcdFxcdGludCByZXQ7XFxuMzE1OTpcXHRcXG4zMTYwOlxcdFxcdGFlX2RldiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFlX2RldiksIEdGUF9LRVJORUwpO1xcbjMxNjE6XFx0XFx0aWYgKCFhZV9kZXYpXFxuMzE2MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMTYzOlxcdFxcbjMxNjQ6XFx0XFx0YWVfZGV2LVxcdTAwM2VwZGV2ID0gcGRldjtcXG4zMTY1OlxcdFxcdGFlX2Rldi1cXHUwMDNlZmxhZyA9IGVudC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuMzE2NjpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWVfZGV2KTtcXG4zMTY3OlxcdFxcbjMxNjg6XFx0XFx0cmV0ID0gaG5hZTNfcmVnaXN0ZXJfYWVfZGV2KGFlX2Rldik7XFxuMzE2OTpcXHRcXHRpZiAocmV0KVxcbjMxNzA6XFx0XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbjMxNzE6XFx0XFxuMzE3MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjMxNzM6XFx0fVxcbjMxNzQ6XFx0XFxuMzE3NTpcXHQvKipcXG4zMTc2OlxcdCAqIGhuczNfY2xlYW5fdmZfY29uZmlnXFxuMzE3NzpcXHQgKiBAcGRldjogcG9pbnRlciB0byBhIHBjaV9kZXYgc3RydWN0dXJlXFxuMzE3ODpcXHQgKiBAbnVtX3ZmczogbnVtYmVyIG9mIFZGcyBhbGxvY2F0ZWRcXG4zMTc5OlxcdCAqXFxuMzE4MDpcXHQgKiBDbGVhbiByZXNpZHVhbCB2ZiBjb25maWcgYWZ0ZXIgZGlzYWJsZSBzcmlvdlxcbjMxODE6XFx0ICoqL1xcbjMxODI6XFx0c3RhdGljIHZvaWQgaG5zM19jbGVhbl92Zl9jb25maWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbjMxODM6XFx0e1xcbjMxODQ6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbjMxODU6XFx0XFxuMzE4NjpcXHRcXHRpZiAoYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNsZWFuX3ZmX2NvbmZpZylcXG4zMTg3OlxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VjbGVhbl92Zl9jb25maWcoYWVfZGV2LCBudW1fdmZzKTtcXG4zMTg4OlxcdH1cXG4zMTg5OlxcdFxcbjMxOTA6XFx0LyogaG5zM19yZW1vdmUgLSBEZXZpY2UgcmVtb3ZhbCByb3V0aW5lXFxuMzE5MTpcXHQgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4zMTkyOlxcdCAqL1xcbjMxOTM6XFx0c3RhdGljIHZvaWQgaG5zM19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMzE5NDpcXHR7XFxuMzE5NTpcXHRcXHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMzE5NjpcXHRcXG4zMTk3OlxcdFxcdGlmIChobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSlcXG4zMTk4OlxcdFxcdFxcdGhuczNfZGlzYWJsZV9zcmlvdihwZGV2KTtcXG4zMTk5OlxcdFxcbjMyMDA6XFx0XFx0aG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcXG4zMjAxOlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4zMjAyOlxcdH1cXG4zMjAzOlxcdFxcbjMyMDQ6XFx0LyoqXFxuMzIwNTpcXHQgKiBobnMzX3BjaV9zcmlvdl9jb25maWd1cmVcXG4zMjA2OlxcdCAqIEBwZGV2OiBwb2ludGVyIHRvIGEgcGNpX2RldiBzdHJ1Y3R1cmVcXG4zMjA3OlxcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIHRvIGFsbG9jYXRlXFxuMzIwODpcXHQgKlxcbjMyMDk6XFx0ICogRW5hYmxlIG9yIGNoYW5nZSB0aGUgbnVtYmVyIG9mIFZGcy4gQ2FsbGVkIHdoZW4gdGhlIHVzZXIgdXBkYXRlcyB0aGUgbnVtYmVyXFxuMzIxMDpcXHQgKiBvZiBWRnMgaW4gc3lzZnMuXFxuMzIxMTpcXHQgKiovXFxuMzIxMjpcXHRzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuMzIxMzpcXHR7XFxuMzIxNDpcXHRcXHRpbnQgcmV0O1xcbjMyMTU6XFx0XFxuMzIxNjpcXHRcXHRpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcXG4zMjE3OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJDYW4gbm90IGNvbmZpZyBTUklPVlxcXFxuXFxcIik7XFxuMzIxODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjE5OlxcdFxcdH1cXG4zMjIwOlxcdFxcbjMyMjE6XFx0XFx0aWYgKG51bV92ZnMpIHtcXG4zMjIyOlxcdFxcdFxcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7XFxuMzIyMzpcXHRcXHRcXHRpZiAocmV0KVxcbjMyMjQ6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiU1JJT1YgZW5hYmxlIGZhaWxlZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG4zMjI1OlxcdFxcdFxcdGVsc2VcXG4zMjI2OlxcdFxcdFxcdFxcdHJldHVybiBudW1fdmZzO1xcbjMyMjc6XFx0XFx0fSBlbHNlIGlmICghcGNpX3Zmc19hc3NpZ25lZChwZGV2KSkge1xcbjMyMjg6XFx0XFx0XFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcXG4zMjI5OlxcdFxcbjMyMzA6XFx0XFx0XFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XFxuMzIzMTpcXHRcXHRcXHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XFxuMzIzMjpcXHRcXHR9IGVsc2Uge1xcbjMyMzM6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMjM0OlxcdFxcdFxcdFxcdCBcXFwiVW5hYmxlIHRvIGZyZWUgVkZzIGJlY2F1c2Ugc29tZSBhcmUgYXNzaWduZWQgdG8gVk1zLlxcXFxuXFxcIik7XFxuMzIzNTpcXHRcXHR9XFxuMzIzNjpcXHRcXG4zMjM3OlxcdFxcdHJldHVybiAwO1xcbjMyMzg6XFx0fVxcbjMyMzk6XFx0XFxuMzI0MDpcXHRzdGF0aWMgdm9pZCBobnMzX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbjMyNDE6XFx0e1xcbjMyNDI6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbjMyNDM6XFx0XFxuMzI0NDpcXHRcXHRobmFlM191bnJlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xcbjMyNDU6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbjMyNDY6XFx0XFxuMzI0NzpcXHRcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXFxuMzI0ODpcXHRcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuMzI0OTpcXHR9XFxuMzI1MDpcXHRcXG4zMjUxOlxcdHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaG5zM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4zMjUyOlxcdHtcXG4zMjUzOlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjMyNTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjI4Ljk3MzY0NzQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0MzU0MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgaG5zM19wcm9iZWAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gYGhuczNfcHJvYmVgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGF0IGxlYXN0IG9uIHRoZSBzdXJmYWNlLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgaXQgbG9va3MgbGlrZSBhbGwgaXQncyBkb2luZyBpcyBhbGxvY2F0aW5nIGFuIGBhZV9kZXZgIHN0cnVjdHVyZSBhbmQgdGhlbiBpbW1lZGlhdGVseSBwYXNzaW5nIGl0IG9mZiB0byBgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2YCBmdW5jdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBwYXR0ZXJuLCB1c3VhbGx5IGluZGljYXRpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gd2l0aCB0aGUgc3lzdGVtLiBJdCdzIGFsbW9zdCB0b28gc2ltcGxlLCB3aGljaCBpcyBtYWtpbmcgbWUgd2FudCB0byBkZWx2ZSBkZWVwZXIsIHNwZWNpZmljYWxseSBpbnRvIHdoYXQgYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHRvIHRoaXMgYWxsb2NhdGVkIGBhZV9kZXZgIG5vdywgYW5kIHdoYXQgdGhhdCByZWdpc3RyYXRpb24gcHJvY2VzcyBlbnRhaWxzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBsaWtlbHkgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjMyLjE0ODAwNjIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMzkwMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhuYWUzX3JlZ2lzdGVyX2FlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jPTMwND1FWFBPUlRfU1lNQk9MKGhuYWUzX3VucmVnaXN0ZXJfYWVfYWxnbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYzozMDY6LyogaG5hZTNfcmVnaXN0ZXJfYWVfZGV2IC0gcmVnaXN0ZXJzIGEgQUUgZGV2aWNlIHRvIGhuYWUzIGZyYW1ld29ya1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzA3LSAqIEBhZV9kZXY6IHRoZSBBRSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzA5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmM6MzEwOmludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzY5LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjM3MDpFWFBPUlRfU1lNQk9MKGhuYWUzX3JlZ2lzdGVyX2FlX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zNzEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oPTk3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaG5hZTNfZm9ybWF0X21hY19hZGRyKGNoYXIgKmZvcm1hdF9tYWNfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtOTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6OTgxOmludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTk4Mi12b2lkIGhuYWUzX3VucmVnaXN0ZXJfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTU1PXN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE2ODpcXHRyZXQgPSBobmFlM19yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTY5LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjMyLjQxOTQxMjgyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODkxNzcwNzkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipJbml0aWFsIFRob3VnaHRzIG9uIFJlZ2lzdGVyaW5nIGEgRGV2aWNlKipcblxuQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBobmFlM19yZWdpc3Rlcl9hZV9kZXZgIGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsICpyZWdpc3RlcmluZyogYSBkZXZpY2UsIHNwZWNpZmljYWxseSBvbmUgcmVsYXRlZCB0byB0aGUgaG5hZTMgZHJpdmVyIGFuZCwgSSdtIGd1ZXNzaW5nLCBhbiBcIkFFXCIgZGV2aWNlIHR5cGUuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBhY2NlbGVyYXRvciBvciBjb3Byb2Nlc3NvciBvbiB0aGUgcGxhdGZvcm0uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgcmVnaXN0cmF0aW9uIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBsaWtlbHkgaW52b2x2ZXM6XG5cbiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogRGVmaW5pbmcgYW5kIG9idGFpbmluZyBuZWNlc3NhcnkgcmVzb3VyY2VzIGZyb20gdGhlIGtlcm5lbCAtIG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgbGluZXMsIERNQSBjaGFubmVscywgZXRjLiAtIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHRoZSBoYXJkd2FyZSdzIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbS4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGRldmljZSB3b3VsZCBhY2Nlc3Mgc2hhcmVkIHJlc291cmNlcy5cbiogICAqKkRyaXZlciBJbml0aWFsaXphdGlvbjoqKiBTZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGRyaXZlciB0byBtYW5hZ2UgdGhpcyBwYXJ0aWN1bGFyIGRldmljZSBpbnN0YW5jZS4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZTogZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIHBvaW50ZXJzIHRvIHRoZSBkZXZpY2UncyBoYXJkd2FyZSByZWdpc3RlcnMsIGFuZCBpbnRlcm5hbCBzdGF0ZSB2YXJpYWJsZXMuXG4qICAgKipLZXJuZWwgSW50ZWdyYXRpb246KiogUmVnaXN0ZXJpbmcgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgc3Vic3lzdGVtcywgd2hpY2ggb2Z0ZW4gbWVhbnMgc2V0dGluZyB1cCBkZXZpY2Ugbm9kZXMsIHJlZ2lzdGVyaW5nIHdpdGggcG93ZXIgbWFuYWdlbWVudCwgYW5kIHByb3ZpZGluZyBjYWxsYmFja3MgdG8gdGhlIHN5c3RlbS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdGhlIGNyZWF0aW9uIG9mIGEgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIG1heWJlIGV2ZW4gYSBjaGFyYWN0ZXIgb3IgYmxvY2sgZGV2aWNlLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGV4Y2VwdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIHRoZSBjb25kaXRpb25zLlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzZXJpZXMgb2YgY2FsbHMgdG8ga2VybmVsIEFQSXMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIChsaWtlIGBrbWFsbG9jYCwgYGlvcmVtYXBgLCBldGMuKSwgaW50ZXJydXB0IG1hbmFnZW1lbnQgKGByZXF1ZXN0X2lycWAsIGBmcmVlX2lycWApLCBkZXZpY2UgdHJlZSBsb29rdXBzIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvdGVudGlhbGx5IGEgY2FsbCB0byBhIHBsYXRmb3JtLXNwZWNpZmljIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbi4gSSBhbSBhbHNvIGxvb2tpbmcgdG8gc2VlIGhvdyBkZXZpY2Utc3BlY2lmaWMgZGF0YSBpcyBsaW5rZWQgdG8gdGhlIGtlcm5lbCBkYXRhLCBsaWtlbHkgd2l0aCBzb21lIHN0cnVjdHVyZSBwb2ludGVyLiBUaGUgZnVuY3Rpb24gcHJvYmFibHkgYWxzbyB3aWxsIGhhbmRsZSBzb21lIHNvcnQgb2YgY2xlYW51cCBwcm9jZXNzLCBpbiBjYXNlIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMgbWlkd2F5LCB0byBhdm9pZCByZXNvdXJjZSBsZWFrcy4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBhbmQgc3RhcnQgcmVhZGluZyB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDo1MS4zMzcxMjQ5MDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzEwOlxcdGludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbiAzMTE6XFx0e1xcbiAzMTI6XFx0XFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbiAzMTM6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2FsZ28gKmFlX2FsZ287XFxuIDMxNDpcXHRcXHRzdHJ1Y3QgaG5hZTNfY2xpZW50ICpjbGllbnQ7XFxuIDMxNTpcXHRcXHRpbnQgcmV0O1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRpZiAoIWFlX2RldilcXG4gMzE4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZobmFlM19jb21tb25fbG9jayk7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmFlX2Rldi1cXHUwMDNlbm9kZSwgXFx1MDAyNmhuYWUzX2FlX2Rldl9saXN0KTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0LyogQ2hlY2sgaWYgdGhlcmUgYXJlIG1hdGNoZWQgYWVfYWxnbyAqL1xcbiAzMjU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhZV9hbGdvLCBcXHUwMDI2aG5hZTNfYWVfYWxnb19saXN0LCBub2RlKSB7XFxuIDMyNjpcXHRcXHRcXHRpZCA9IHBjaV9tYXRjaF9pZChhZV9hbGdvLVxcdTAwM2VwZGV2X2lkX3RhYmxlLCBhZV9kZXYtXFx1MDAzZXBkZXYpO1xcbiAzMjc6XFx0XFx0XFx0aWYgKCFpZClcXG4gMzI4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRcXHRpZiAoIWFlX2FsZ28tXFx1MDAzZW9wcykge1xcbiAzMzE6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2YWVfZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJhZV9hbGdvIG9wcyBhcmUgbnVsbFxcXFxuXFxcIik7XFxuIDMzMjpcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gMzMzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gMzM0OlxcdFxcdFxcdH1cXG4gMzM1OlxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzID0gYWVfYWxnby1cXHUwMDNlb3BzO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRcXHRyZXQgPSBhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaW5pdF9hZV9kZXYoYWVfZGV2KTtcXG4gMzM4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gMzM5OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFlX2Rldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbiAzNDA6XFx0XFx0XFx0XFx0XFx0XFxcImluaXQgYWVfZGV2IGVycm9yLCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMzQxOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gMzQyOlxcdFxcdFxcdH1cXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0XFx0LyogYWVfZGV2IGluaXQgc2hvdWxkIHNldCBmbGFnICovXFxuIDM0NTpcXHRcXHRcXHRobmFlM19zZXRfYml0KGFlX2Rldi1cXHUwMDNlZmxhZywgSE5BRTNfREVWX0lOSVRFRF9CLCAxKTtcXG4gMzQ2OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHQvKiBjaGVjayB0aGUgY2xpZW50IGxpc3QgZm9yIHRoZSBtYXRjaCB3aXRoIHRoaXMgYWVfZGV2IHR5cGUgYW5kXFxuIDM1MDpcXHRcXHQgKiBpbml0aWFsaXplIHRoZSBmaWd1cmUgb3V0IGNsaWVudCBpbnN0YW5jZVxcbiAzNTE6XFx0XFx0ICovXFxuIDM1MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgXFx1MDAyNmhuYWUzX2NsaWVudF9saXN0LCBub2RlKSB7XFxuIDM1MzpcXHRcXHRcXHRyZXQgPSBobmFlM19pbml0X2NsaWVudF9pbnN0YW5jZShjbGllbnQsIGFlX2Rldik7XFxuIDM1NDpcXHRcXHRcXHRpZiAocmV0KVxcbiAzNTU6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2YWVfZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuIDM1NjpcXHRcXHRcXHRcXHRcXHRcXFwibWF0Y2ggYW5kIGluc3RhbnRpYXRpb24gZmFpbGVkLCByZXQgPSAlZFxcXFxuXFxcIixcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdHJldCk7XFxuIDM1ODpcXHRcXHR9XFxuIDM1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MDA6NTEuMzM3MjMyMDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDQ5OTY4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb2RlIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbml0aWFsaXNpbmcgdGhlIEFFIERldmljZSoqXG5cblJpZ2h0LCBzbyBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWluaXRfYWVfZGV2KGFlX2RldilgLiAgTG9va3MgbGlrZSB3ZSdyZSBjYWxsaW5nIGEgZnVuY3Rpb24gcG9pbnRlciwgYGluaXRfYWVfZGV2YCwgd2hpY2ggaXMgcGFydCBvZiBhIHNldCBvZiBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhbiBgYWVfZGV2YCBzdHJ1Y3R1cmUuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZTsgYSBnZW5lcmljIGludGVyZmFjZSB3aXRoIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogYGluaXRfYWVfZGV2YCBhY3R1YWxseSAqZG9lcyogaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5CYXNlZCBvbiB0aGUgZmlsZSByZWZlcmVuY2UgXCJoY2xnZV9tYWluLmNcIiwgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGFuIEhDTEdFIChsaWtlbHkgYSBoYXJkd2FyZSBjb21wb25lbnQgb3IgZHJpdmVyKS4gQW5kIHRoZW4gSSBzZWUgdGhhdCBgaW5pdF9hZV9kZXZgIGlzIHJlc29sdmVkIHRvIGBoY2xnZV9pbml0X2FlX2RldmAuIEFoYSEgU28sIHdpdGhpbiB0aGUgSENMR0UgY29kZSwgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBBRSAocHJlc3VtYWJseSBcIkF1dG8gRXhwb3N1cmVcIiBvciBhIHNpbWlsYXIgZnVuY3Rpb24pIGlzIGBoY2xnZV9pbml0X2FlX2RldmAuIFRoaXMgd2lsbCBjb250YWluIGFsbCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgc2V0dGluZ3MsIGNsb2NrIGNvbmZpZ3VyYXRpb25zLCBETUEgc2V0dXAsIGFuZCBldmVyeXRoaW5nIGVsc2UgbmVlZGVkIHRvIGJyaW5nIHRoZSBBRSBkZXZpY2UgdXAgdG8gYSB1c2FibGUgc3RhdGUgd2l0aGluIHRoZSBIQ0xHRSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODc2LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMToyMS43ODcyMDM2NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk2MDA6XFx0XFxuOTYwMTpcXHRcXHRyZXQgPSBoY2xnZV9tYWNfaW5pdChoZGV2KTtcXG45NjAyOlxcdFxcdGlmIChyZXQpIHtcXG45NjAzOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1hYyBpbml0IGVycm9yLCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG45NjA0OlxcdFxcdFxcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XFxuOTYwNTpcXHRcXHR9XFxuOTYwNjpcXHRcXG45NjA3OlxcdFxcdHJldCA9IGhjbGdlX2NvbmZpZ190c28oaGRldiwgSENMR0VfVFNPX01TU19NSU4sIEhDTEdFX1RTT19NU1NfTUFYKTtcXG45NjA4OlxcdFxcdGlmIChyZXQpIHtcXG45NjA5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkVuYWJsZSB0c28gZmFpbCwgcmV0ID0lZFxcXFxuXFxcIiwgcmV0KTtcXG45NjEwOlxcdFxcdFxcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XFxuOTYxMTpcXHRcXHR9XFxuOTYxMjpcXHRcXG45NjEzOlxcdFxcdHJldCA9IGhjbGdlX2NvbmZpZ19ncm8oaGRldik7XFxuOTYxNDpcXHRcXHRpZiAocmV0KVxcbjk2MTU6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjE2OlxcdFxcbjk2MTc6XFx0XFx0cmV0ID0gaGNsZ2VfaW5pdF92bGFuX2NvbmZpZyhoZGV2KTtcXG45NjE4OlxcdFxcdGlmIChyZXQpIHtcXG45NjE5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlZMQU4gaW5pdCBmYWlsLCByZXQgPSVkXFxcXG5cXFwiLCByZXQpO1xcbjk2MjA6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjIxOlxcdFxcdH1cXG45NjIyOlxcdFxcbjk2MjM6XFx0XFx0cmV0ID0gaGNsZ2VfdG1fc2NoZF9pbml0KGhkZXYpO1xcbjk2MjQ6XFx0XFx0aWYgKHJldCkge1xcbjk2MjU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwidG0gc2NoZCBpbml0IGZhaWwsIHJldCA9JWRcXFxcblxcXCIsIHJldCk7XFxuOTYyNjpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk2Mjc6XFx0XFx0fVxcbjk2Mjg6XFx0XFxuOTYyOTpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX3Jzc19pbml0X2NmZyhcXHUwMDI2aGRldi1cXHUwMDNldnBvcnQtXFx1MDAzZW5pYywgaGRldi1cXHUwMDNlYWVfZGV2LFxcbjk2MzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmhkZXYtXFx1MDAzZXJzc19jZmcpO1xcbjk2MzE6XFx0XFx0aWYgKHJldCkge1xcbjk2MzI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGluaXQgcnNzIGNmZywgcmV0ID0gJWRcXFxcblxcXCIsIHJldCk7XFxuOTYzMzpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk2MzQ6XFx0XFx0fVxcbjk2MzU6XFx0XFxuOTYzNjpcXHRcXHRyZXQgPSBoY2xnZV9yc3NfaW5pdF9odyhoZGV2KTtcXG45NjM3OlxcdFxcdGlmIChyZXQpIHtcXG45NjM4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlJzcyBpbml0IGZhaWwsIHJldCA9JWRcXFxcblxcXCIsIHJldCk7XFxuOTYzOTpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk2NDA6XFx0XFx0fVxcbjk2NDE6XFx0XFxuOTY0MjpcXHRcXHRyZXQgPSBpbml0X21ncl90YmwoaGRldik7XFxuOTY0MzpcXHRcXHRpZiAocmV0KSB7XFxuOTY0NDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJtYW5hZ2VyIHRhYmxlIGluaXQgZmFpbCwgcmV0ID0lZFxcXFxuXFxcIiwgcmV0KTtcXG45NjQ1OlxcdFxcdFxcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XFxuOTY0NjpcXHRcXHR9XFxuOTY0NzpcXHRcXG45NjQ4OlxcdFxcdHJldCA9IGhjbGdlX2luaXRfZmRfY29uZmlnKGhkZXYpO1xcbjk2NDk6XFx0XFx0aWYgKHJldCkge1xcbjk2NTA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjk2NTE6XFx0XFx0XFx0XFx0XFxcImZkIHRhYmxlIGluaXQgZmFpbCwgcmV0PSVkXFxcXG5cXFwiLCByZXQpO1xcbjk2NTI6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjUzOlxcdFxcdH1cXG45NjU0OlxcdFxcbjk2NTU6XFx0XFx0cmV0ID0gaGNsZ2VfcHRwX2luaXQoaGRldik7XFxuOTY1NjpcXHRcXHRpZiAocmV0KVxcbjk2NTc6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjU4OlxcdFxcbjk2NTk6XFx0XFx0cmV0ID0gaGNsZ2VfdXBkYXRlX3BvcnRfaW5mbyhoZGV2KTtcXG45NjYwOlxcdFxcdGlmIChyZXQpXFxuOTY2MTpcXHRcXHRcXHRnb3RvIGVycl9wdHBfdW5pbml0O1xcbjk2NjI6XFx0XFxuOTY2MzpcXHRcXHRpZiAoaGRldi1cXHUwMDNlaHcubWFjLm1lZGlhX3R5cGUgIT0gSE5BRTNfTUVESUFfVFlQRV9DT1BQRVIpIHtcXG45NjY0OlxcdFxcdFxcdGhkZXYtXFx1MDAzZWh3Lm1hYy5yZXFfYXV0b25lZyA9IGhkZXYtXFx1MDAzZWh3Lm1hYy5hdXRvbmVnO1xcbjk2NjU6XFx0XFx0XFx0aWYgKGhkZXYtXFx1MDAzZWh3Lm1hYy5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSBcXHUwMDI2XFx1MDAyNlxcbjk2NjY6XFx0XFx0XFx0ICAgIGhkZXYtXFx1MDAzZWh3Lm1hYy5zcGVlZCAhPSBTUEVFRF9VTktOT1dOKVxcbjk2Njc6XFx0XFx0XFx0XFx0aGRldi1cXHUwMDNlaHcubWFjLnJlcV9zcGVlZCA9IGhkZXYtXFx1MDAzZWh3Lm1hYy5zcGVlZDtcXG45NjY4OlxcdFxcdH1cXG45NjY5OlxcdFxcbjk2NzA6XFx0XFx0cmV0ID0gaGNsZ2Vfc2V0X2F1dG9uZWdfc3BlZWRfZHVwKGhkZXYpO1xcbjk2NzE6XFx0XFx0aWYgKHJldCkge1xcbjk2NzI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjk2NzM6XFx0XFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgYXV0b25lZyBzcGVlZCBkdXBsZXgsIHJldCA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbjk2NzQ6XFx0XFx0XFx0Z290byBlcnJfcHRwX3VuaW5pdDtcXG45Njc1OlxcdFxcdH1cXG45Njc2OlxcdFxcbjk2Nzc6XFx0XFx0SU5JVF9LRklGTyhoZGV2LVxcdTAwM2VtYWNfdG5sX2xvZyk7XFxuOTY3ODpcXHRcXG45Njc5OlxcdFxcdGhjbGdlX2RjYl9vcHNfc2V0KGhkZXYpO1xcbjk2ODA6XFx0XFxuOTY4MTpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2aGRldi1cXHUwMDNlcmVzZXRfdGltZXIsIGhjbGdlX3Jlc2V0X3RpbWVyLCAwKTtcXG45NjgyOlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZoZGV2LVxcdTAwM2VzZXJ2aWNlX3Rhc2ssIGhjbGdlX3NlcnZpY2VfdGFzayk7XFxuOTY4MzpcXHRcXG45Njg0OlxcdFxcdGhjbGdlX2NsZWFyX2FsbF9ldmVudF9jYXVzZShoZGV2KTtcXG45Njg1OlxcdFxcdGhjbGdlX2NsZWFyX3Jlc2V0dGluZ19zdGF0ZShoZGV2KTtcXG45Njg2OlxcdFxcbjk2ODc6XFx0XFx0LyogTG9nIGFuZCBjbGVhciB0aGUgaHcgZXJyb3JzIHRob3NlIGFscmVhZHkgb2NjdXJyZWQgKi9cXG45Njg4OlxcdFxcdGlmIChobmFlM19kZXZfcmFzX2ltcF9zdXBwb3J0ZWQoaGRldikpXFxuOTY4OTpcXHRcXHRcXHRoY2xnZV9oYW5kbGVfb2NjdXJyZWRfZXJyb3IoaGRldik7XFxuOTY5MDpcXHRcXHRlbHNlXFxuOTY5MTpcXHRcXHRcXHRoY2xnZV9oYW5kbGVfYWxsX2huc19od19lcnJvcnMoYWVfZGV2KTtcXG45NjkyOlxcdFxcbjk2OTM6XFx0XFx0LyogcmVxdWVzdCBkZWxheWVkIHJlc2V0IGZvciB0aGUgZXJyb3IgcmVjb3ZlcnkgYmVjYXVzZSBhbiBpbW1lZGlhdGVcXG45Njk0OlxcdFxcdCAqIGdsb2JhbCByZXNldCBvbiBhIFBGIGFmZmVjdGluZyBwZW5kaW5nIGluaXRpYWxpemF0aW9uIG9mIG90aGVyIFBGc1xcbjk2OTU6XFx0XFx0ICovXFxuOTY5NjpcXHRcXHRpZiAoYWVfZGV2LVxcdTAwM2Vod19lcnJfcmVzZXRfcmVxKSB7XFxuOTY5NzpcXHRcXHRcXHRlbnVtIGhuYWUzX3Jlc2V0X3R5cGUgcmVzZXRfbGV2ZWw7XFxuOTY5ODpcXHRcXG45Njk5OlxcdFxcdFxcdHJlc2V0X2xldmVsID0gaGNsZ2VfZ2V0X3Jlc2V0X2xldmVsKGFlX2RldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MDE6MjEuNzg3ODM0MTY1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjM5ODA0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIExvb2tpbmcgY2xvc2VyIGF0IHRoaXMgYGhjbGdlX2luaXRfYWVfZGV2YCBmdW5jdGlvbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGRvaW5nIGEgKmxvdCogb2YgbG93LWxldmVsIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLiBJIHNlZSBpdCBzZW5kaW5nIGEgYnVuY2ggb2YgY29tbWFuZHMgZGlyZWN0bHkgdG8gdGhlIGhhcmR3YXJlIOKAkyB1c2luZyBgaGNsZ2VfY21kX3NlbmRgLCBuYXR1cmFsbHkuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQuIElmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBvciBpc24ndCByZXNwb25kaW5nLCB0aG9zZSBjb21tYW5kIHRyYW5zbWlzc2lvbnMgYXJlIGdvaW5nIHRvIHRpbWUgb3V0LCBvciBzaW1wbHkgZmFpbCBvdXRyaWdodC4gV2UncmUgZ29pbmcgdG8gZ2V0IHNvbWUgdGVsbHRhbGUgZXJyb3JzLlxuXG5Tbywgd2hlcmUgZG9lcyB0aGF0IGxlYWQ/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGhjbGdlX2NtZF9zZW5kYCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBhbmQgaW1wb3J0YW50bHksIGl0cyBlcnJvciBoYW5kbGluZy4gVGhhdCdzIHdoZXJlIHdlJ2xsIGxpa2VseSBmaW5kIHRoZSBrZXkgdG8gcGlucG9pbnRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IGhhcmR3YXJlLXJlbGF0ZWQgaXNzdWVzLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyNSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MDE6MjUuMjUxODE4MDE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQwNzA2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNsZ2VfY21kX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMToyNS4zNDQyMzYyNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MTEwNzU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgaW5pdGlhbGx5IGZvY3VzZWQgb24gYGhjbGdlX2NtZC5jYCwgYnV0IHNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcXVpdGUgcmlnaHQuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlIGZ1bmN0aW9uIEknbSBsb29raW5nIGZvciwgc3BlY2lmaWNhbGx5IHRoZSBgaGNsZ2VfY21kX3NlbmRgIGNhbGwsIG1pZ2h0IGJlIGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQgZmlsZSBhbHRvZ2V0aGVyLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IHNlYXJjaC4gTGV0IG1lIHBpdm90IGFuZCBpbnN0ZWFkIG9mIGFzc3VtaW5nLCBkaXJlY3RseSBzZWFyY2ggZm9yIHRoZSBmdW5jdGlvbiBgaGNsZ2VfY21kX3NlbmRgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgYWNjdXJhdGUgcGljdHVyZSBvZiB3aGVyZSBpdCdzIGFjdHVhbGx5IGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCB0byBlZmZpY2llbnRseSBsb2NhdGUgdGhlIHJlbGV2YW50IGNvZGUgc2VjdGlvbnMgYW5kIEknbGwgc2VlIHdoYXQgdGhlIHJlc3VsdHMgdGVsbCBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMToyOC40OTUzNDcxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTM2NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBoY2xnZV9jbWRfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmg9OTAyPXN0cnVjdCBoY2xnZV9odztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmg6OTAzOmludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oLTkwNC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNsZ2VfbWFjX21ncl90YmxfZW50cnlfY21kIGhjbGdlX21ncl90YWJsZVtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMTktICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzIwOmludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjI4LjU1NTQ5MTIyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NTExNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW50ZXJuYWwgUmV2aWV3IG9mIGBoY2xnZV9jbWRfc2VuZGAqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBoY2xnZV9jbWRfc2VuZGAgZnVuY3Rpb24sIGFuZCBJJ20gaG9taW5nIGluIG9uIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgaGNsZ2VfbWFpbi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgaGVhZGFjaGVzKSBsaWtlbHkgcmVzaWRlLiBJJ20gZXNzZW50aWFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZTsgdW5kZXJzdGFuZGluZyAqaG93KiBhIGNvbW1hbmQgZ2V0cyBzZW50IGlzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5dGhpbmcgZWxzZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIGNvbW1hbmQgYW5kIGNvbnRyb2wgcGF0aC4gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgcGFja2V0IGZvcm1hdHRpbmcsIGhhcmR3YXJlIGludGVyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIHJldHJ5IGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJIGFtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBhbnkgYW5kIGFsbCBjb21tYW5kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzMsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMTozMS42OTIwMDg0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0aW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxcbiAzMjE6XFx0e1xcbiAzMjI6XFx0XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXFx1MDAyNmh3LVxcdTAwM2VodywgZGVzYywgbnVtKTtcXG4gMzIzOlxcdH1cXG4gMzI0OlxcdFxcbiAzMjU6XFx0c3RhdGljIHZvaWQgaGNsZ2VfdHJhY2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gMzI2OlxcdFxcdFxcdFxcdFxcdCBpbnQgbnVtLCBib29sIGlzX3NwZWNpYWwpXFxuIDMyNzpcXHR7XFxuIDMyODpcXHRcXHRpbnQgaTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0dHJhY2VfaGNsZ2VfcGZfY21kX3NlbmQoaHcsIGRlc2MsIDAsIG51bSk7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdGlmICghaXNfc3BlY2lhbCkge1xcbiAzMzM6XFx0XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG51bTsgaSsrKVxcbiAzMzQ6XFx0XFx0XFx0XFx0dHJhY2VfaGNsZ2VfcGZfY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjW2ldLCBpLCBudW0pO1xcbiAzMzU6XFx0XFx0fSBlbHNlIHtcXG4gMzM2OlxcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBudW07IGkrKylcXG4gMzM3OlxcdFxcdFxcdFxcdHRyYWNlX2hjbGdlX3BmX3NwZWNpYWxfY21kX3NlbmQoaHcsIChfX2xlMzIgKilcXHUwMDI2ZGVzY1tpXSxcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGksIG51bSk7XFxuIDMzOTpcXHRcXHR9XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyB2b2lkIGhjbGdlX3RyYWNlX2NtZF9nZXQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gMzQzOlxcdFxcdFxcdFxcdFxcdGludCBudW0sIGJvb2wgaXNfc3BlY2lhbClcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdGludCBpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRpZiAoIUhDTEdFX0NPTU1fU0VORF9TWU5DKGxlMTZfdG9fY3B1KGRlc2MtXFx1MDAzZWZsYWcpKSlcXG4gMzQ4OlxcdFxcdFxcdHJldHVybjtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0dHJhY2VfaGNsZ2VfcGZfY21kX2dldChodywgZGVzYywgMCwgbnVtKTtcXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0aWYgKCFpc19zcGVjaWFsKSB7XFxuIDM1MzpcXHRcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnVtOyBpKyspXFxuIDM1NDpcXHRcXHRcXHRcXHR0cmFjZV9oY2xnZV9wZl9jbWRfZ2V0KGh3LCBcXHUwMDI2ZGVzY1tpXSwgaSwgbnVtKTtcXG4gMzU1OlxcdFxcdH0gZWxzZSB7XFxuIDM1NjpcXHRcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnVtOyBpKyspXFxuIDM1NzpcXHRcXHRcXHRcXHR0cmFjZV9oY2xnZV9wZl9zcGVjaWFsX2NtZF9nZXQoaHcsIChfX2xlMzIgKilcXHUwMDI2ZGVzY1tpXSxcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCBudW0pO1xcbiAzNTk6XFx0XFx0fVxcbiAzNjA6XFx0fVxcbiAzNjE6XFx0XFxuIDM2MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGhjbGdlX2NvbW1fY21xX29wcyBoY2xnZV9jbXFfb3BzID0ge1xcbiAzNjM6XFx0XFx0LnRyYWNlX2NtZF9zZW5kID0gaGNsZ2VfdHJhY2VfY21kX3NlbmQsXFxuIDM2NDpcXHRcXHQudHJhY2VfY21kX2dldCA9IGhjbGdlX3RyYWNlX2NtZF9nZXQsXFxuIDM2NTpcXHR9O1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRzdGF0aWMgaW50IGhjbGdlX21hY191cGRhdGVfc3RhdHNfZGVmZWN0aXZlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuIDM2ODpcXHR7XFxuIDM2OTpcXHQjZGVmaW5lIEhDTEdFX01BQ19DTURfTlVNIDIxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjMxLjY5MjQ2OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NzkwOTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBoY2xnZV9jb21tX2NtZF9zZW5kKipcblxuUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgY2FsbGluZyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAuIFRoYXQncyB0aGUga2V5LiBUaGF0IGZ1bmN0aW9uIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb21tYW5kIHNlbmRpbmcsIGFuZCB0aGUgXCJoY2xnZVwiIHByZWZpeCBzdHJvbmdseSBwb2ludHMgdG8gaXRzIGludGVncmF0aW9uIGludG8gYSBzcGVjaWZpYyBIYXJkd2FyZSBDb25maWd1cmF0aW9uIExhbmd1YWdlIEdFIChHbG9iYWwgRW52aXJvbm1lbnQpIGNvbW11bmljYXRpb24gbW9kdWxlLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkga25vdyB0aGUgbGlrZWx5IHB1cnBvc2UgYW5kIHN0cnVjdHVyZS5cblxuRGVwZW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0LCB3aGljaCBJJ2xsIGFzc3VtZSBpcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpbywgdGhlIG1vZHVsZSB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggbGlrZWx5IHJlcXVpcmVzIHNwZWNpZmljIG1lc3NhZ2VzIGFuZCBkYXRhIHRvIGJlIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIGRlYnVnZ2luZywgY29uZmlndXJhdGlvbiwgb3IgY29udHJvbD8gS25vd2luZyB0aGF0LCBhbmQgbG9va2luZyBhdCB0aGUgY29tbWFuZCwgSSdkIHRoZW4gY29uc2lkZXI6IHdoYXQgZG9lcyB0aGUgY29tbWFuZCAqZG8qPyBJcyBpdCBhIHF1ZXJ5LCBhIHNldCBjb21tYW5kLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBUaGUgbmF0dXJlIG9mIHRoZSBjb21tYW5kIHdvdWxkIGluZGljYXRlIHRvIG1lIHdoYXQncyBnb2luZyBvbiwgYW5kIGZyb20gdGhlcmUgSSB3b3VsZCBpbmZlciB0aGUgbmV4dCBzdGVwcywgYW5kIHBvdGVudGlhbCBpc3N1ZXMgb3IgZGVzaWduIGRlY2lzaW9ucy5cblxuRnJvbSB0aGUgbWVyZSBjYWxsaW5nIG9mIHRoYXQgZnVuY3Rpb24sIEkgY2FuIGluZmVyIGEgY2VydGFpbiBkZWdyZWUgb2YgY29tcGxleGl0eS4gSXQgbXVzdCByZXF1aXJlIGEgc3BlY2lmaWMgZm9ybWF0IG9yIHN0cnVjdHVyZSBvZiBjb21tYW5kcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGxldmVsIG9mIGF1dGhlbnRpY2F0aW9uIG9yIGF1dGhvcml6YXRpb24uIFdoYXQgZGF0YSBpcyBpdCBiZWluZyBzZW50PyBXaGF0IGlzIGl0cyByZXNwb25zZT8gSXMgdGhlcmUgZXJyb3IgaGFuZGxpbmcgYnVpbHQgaW50byB0aGUgc2VuZGluZyBtZWNoYW5pc20sIG9yIGlzIHRoYXQgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbD8gVGhlc2UgYXJlIHNvbWUgb2YgdGhlIG1vc3QgcHJvbWluZW50IHF1ZXN0aW9ucyBJIHdvdWxkIGJlIHN0YXJ0aW5nIHRvIHdvcmsgdGhyb3VnaCB3aGVuIEkgc2VlIHRoaXMgbGluZSBvZiBjb2RlLiBJdCdzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbSdzIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjM1LjQ3MDM4MzE2MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NTg4OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2NvbW1fY21kX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03OD1pbnQgaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MTAxOlxcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0xMDItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0yMjg9aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyNDA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjQxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ2NTogKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2Ni0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzItICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDczOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzQtXFx0XFx0XFx0aW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTIxLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyMjpFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9zZW5kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUyMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDg1PWludCBoY2xnZV9jb21tX2FsbG9jX2NtZF9xdWV1ZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGludCByaW5nX3R5cGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6NDg2OmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODctXFx0XFx0XFx0aW50IG51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTg0PWludCBoY2xnZV9jb21tX3NldF9yc3NfdGNfbW9kZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiAqdGNfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzoxMTE6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTE1MT1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3R1cGxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTc1OlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTI3Nj1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2luZGlyX3RhYmxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMzA0LVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMwNTpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDYtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zMTc9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbnB1dF90dXBsZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMzODpcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM9MzgzPWludCBoY2xnZV9jb21tX3NldF9yc3NfYWxnb19rZXkoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBjb25zdCB1OCBoZnVuYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDExLVxcdFxcdGtleV9vZmZzZXQrKztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjQxMjpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy00MTMtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYz01OD1pbnQgaGNsZ2VfY29tbV90cXBzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTcyLVxcdFxcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cXHUwMDNlaW5kZXgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM6NzM6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy04Ni1cXHRcXHRkZXNjLmRhdGFbMF0gPSBjcHVfdG9fbGUzMih0cXAtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjg3OlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg4LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYz0zNDQyPWludCBoY2xnZV9oYW5kbGVfdmZfcXVldWVfZXJyX3JhcyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jLTM0NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jOjM0NjA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsIGRlc2MsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYy0zNDYxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzIwPWludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMjI6XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXFx1MDAyNmh3LVxcdTAwM2VodywgZGVzYywgbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM9NTA9aW50IGhjbGdldmZfY21kX3NlbmQoc3RydWN0IGhjbGdldmZfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzo1MjpcXHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aHctXFx1MDAzZWh3LCBkZXNjLCBudW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy01My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjM1LjcxNjAwOTkyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDExNjY3OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHJpdmVyIFByb2JlIEZhaWx1cmUqKlxuXG5Pa2F5LCBzbyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBoYXJkd2FyZSdzIGNvbW1hbmQgcXVldWUuIE1ha2VzIHNlbnNlLiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcmVzcG9uZGluZywgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byB0aW1lb3V0IG9yIGVycm9yIG91dC4gVGhhdCdzIGEgY2xhc3NpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpc3N1ZS4gQW5kIGlmIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZW4gYGhjbGdlX2luaXRfYWVfZGV2YCBmYWlscywgYW5kICpib29tKiwgdGhlIGRyaXZlciBwcm9iZSBoaXRzIGEgcm9hZGJsb2NrIGFuZCBmYWlscy4gU3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBmb3IgZGVidWdnaW5nIGRldmljZSBkcml2ZXIgZmFpbHVyZXMuXG5cbkJ1dCB3YWl0IGEgbWludXRl4oCmc3l6LXBjaSBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgcmlnaHQ/IFRoYXQgY291bGQgYmUgYSB3YXkgYXJvdW5kIHRoaXMuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBlbXVsYXRpb24sIHRob3VnaCwgaXMgdGhhdCBzeXprYWxsZXIgbmVlZHMgdmVyeSBwcmVjaXNlIGluZm9ybWF0aW9uOiB0aGUgZXhhY3QgUENJIGRldmljZSBJRCBhbmQgdGhlIHNwZWNpZmljIHJlZ2lzdGVycyB0byBlbXVsYXRlLiBJdCdzIGEgc2lnbmlmaWNhbnQgdW5kZXJ0YWtpbmcgdG8gc2V0IHRoYXQgdXAgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdpdGhvdXQgdGhlIGhhcmR3YXJlIGRpcmVjdGx5IHByZXNlbnQuXG5cblNvLCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgYWxyZWFkeSBoYXZlIGEgc3BlY2lmaWMgZW11bGF0aW9uIHNldHVwIGZvciB0aGlzIEhOUzMgZGV2aWNlPyBUaGF0IHdvdWxkIGJlIGEgaHVnZSBzaG9ydGN1dC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgSE5TMy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAg4oCTIGxldCdzIHNlZSB3aGF0J3MgaW4gdGhlIHN5emthbGxlciByZXBvc2l0b3J5IGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzc0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjQxLjEyNzY4MTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjE5MjExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjQxLjIxNjkxMDYwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjE2MjQ5MzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhOUzMgRHJpdmVyIGFuZCBTeXprYWxsZXIgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhcmVuJ3QgYWN0dWFsbHkgKmluKiB0aGUga2VybmVsIHRyZWUsIHJpZ2h0PyBUaGV5J3JlIGV4dGVybmFsLCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoYXQgdGVzdGluZyBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBmaW5kIHNvbWUgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBITlMzIGhhcmR3YXJlIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZj8gSnVzdCB0byBjbGFyaWZ5LCBubywgaXQncyBhIGRlZGljYXRlZCBoYXJkd2FyZSBkcml2ZXIuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3IgZnV6emluZzogQ2FuIGV0aHRvb2wgY29tbWFuZHMgZXZlbiBiZSByZWFjaGVkIGlmIHRoZSBkZXZpY2UgcHJvYmUgZmFpbHM/IEl0J3MgaGlnaGx5IHVubGlrZWx5LCBJIGJlbGlldmUuIFRoZSBldGh0b29sIGNvbW1hbmRzIGFyZSByb3V0ZWQgdG8gdGhlIG5ldGRldiwgYW5kIHRoYXQgYG5ldGRldmAgaXMgb25seSByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseSBhZnRlciBhIHN1Y2Nlc3NmdWwgcHJvYmUuIFNvLCB0aGF0J3Mgbm90IGEgbGlrZWx5IHZ1bG5lcmFiaWxpdHkgcGF0aC4gU3RpbGwsIEkgc2hvdWxkIHZlcmlmeSBwcmVjaXNlbHkgd2hlcmUgYHJlZ2lzdGVyX25ldGRldmAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgZHJpdmVyLiBUaGF04oCZcyB0aGUgbmV4dCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMTo1Ny4zNzk0MDc4OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzgwNzA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaXN0ZXJfbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTUzNzQ9c3RhdGljIGludCBobnMzX2NsaWVudF9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU0ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6NTQ4MzpcXHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NDg0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTU1MTc9c3RhdGljIHZvaWQgaG5zM19jbGllbnRfdW5pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgYm9vbCByZXNldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU1MjItXFx0aWYgKG5ldGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19VTklOSVRJQUxJWkVEKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjU1MjM6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NTI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMTo1OC40MTc0OTA1MjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMDc1MTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSE5TMyBDbGllbnQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gYGhuczNfY2xpZW50X2luaXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgcmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMga2V5LiBCdXQgYGhuczNfY2xpZW50X2luaXRgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGhuYWUzX2luaXRfY2xpZW50X2luc3RhbmNlYC4gQW5kIHRoYXQsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2YCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgaG5zM19wcm9iZWAuIEl0J3MgYSBjaGFpbiwgYW5kIHRoZSBzdWNjZXNzIG9mIHRoZSB3aG9sZSB0aGluZyByZWxpZXMgb24gZWFjaCBzdGVwIHdvcmtpbmcuXG5cblRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgYGhjbGdlX2luaXRfYWVfZGV2YC4gSWYgKnRoYXQqIGZhaWxzLCB0aGVuIGBobmFlM19yZWdpc3Rlcl9hZV9kZXZgIHdpbGwgYWxzbyBmYWlsLCBhbmQgdGhlbiBgaG5zM19jbGllbnRfaW5pdGAgd2lsbCAqbmV2ZXIqIGdldCBjYWxsZWQuIE1lYW5pbmcgdGhlIG5ldGRldiB3b24ndCBiZSByZWdpc3RlcmVkLiBBbmQgaWYgdGhlIG5ldGRldiBpc24ndCByZWdpc3RlcmVkLCBubyBldGh0b29sIGNvbW1hbmRzIGNhbiBiZSBzZW50IHRvIGl0LiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5TbywgaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgd2hpY2ggYXJlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyB3aG9sZSBwYXRoIGlzIGxpa2VseSBkZWFkIG9uIGFycml2YWwuIFRoZXJlJ3Mgbm8gYWN0dWFsIEhOUzMgaGFyZHdhcmUgZm9yIGl0IHRvIGNvbW11bmljYXRlIHdpdGguIFRoZSBgaGNsZ2VfaW5pdF9hZV9kZXZgIGNhbGwgaXMgZ29pbmcgdG8gZmFpbCBiZWNhdXNlIGl0IG5lZWRzIHRvIGV4ZWN1dGUgYSBjb21tYW5kIHRocm91Z2ggYGhjbGdlX2NvbW1fY21kX3NlbmRgLiBObyBoYXJkd2FyZSwgbm8gc3VjY2Vzcy5cblxuV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEknbSBtaXNzaW5nIHNvbWV0aGluZywgYXJlbid0IEk/IElzIHRoZXJlICphbnkqIGNoYW5jZSB0aGF0IGBoY2xnZV9pbml0X2FlX2RldmAgY291bGQgc3VjY2VlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlPyBJdCdzIHJhcmUgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgYGhjbGdlX2NvbW1fY21kX3NlbmRgIGFuZCBzZWUgaWYgaXQgaGFzIHNvbWUga2luZCBvZiBmYWxsYmFjayBvciB2aXJ0dWFsaXplZCBwYXRoLiBCZWNhdXNlIGlmIGl0IGRvZXMsIHRoZW4gc29tZSBvciBhbGwgb2YgdGhpcyBjb3VsZCBiZSByZWFjaGFibGUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ5NCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMjowNC4yMjgyNDU5MTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY1OlxcdCAqIGhjbGdlX2NvbW1fY21kX3NlbmQgLSBzZW5kIGNvbW1hbmQgdG8gY29tbWFuZCBxdWV1ZVxcbiA0NjY6XFx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcXG4gNDY3OlxcdCAqIEBkZXNjOiBwcmVmaWxsZWQgZGVzY3JpcHRvciBmb3IgZGVzY3JpYmluZyB0aGUgY29tbWFuZFxcbiA0Njg6XFx0ICogQG51bSA6IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUgc2VudFxcbiA0Njk6XFx0ICpcXG4gNDcwOlxcdCAqIFRoaXMgaXMgdGhlIG1haW4gc2VuZCBjb21tYW5kIGZvciBjb21tYW5kIHF1ZXVlLCBpdFxcbiA0NzE6XFx0ICogc2VuZHMgdGhlIHF1ZXVlLCBjbGVhbnMgdGhlIHF1ZXVlLCBldGNcXG4gNDcyOlxcdCAqKi9cXG4gNDczOlxcdGludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuIDQ3NDpcXHRcXHRcXHRcXHRpbnQgbnVtKVxcbiA0NzU6XFx0e1xcbiA0NzY6XFx0XFx0Ym9vbCBpc19zcGVjaWFsID0gaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZShsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpKTtcXG4gNDc3OlxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpjc3EgPSBcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3E7XFxuIDQ3ODpcXHRcXHRpbnQgcmV0O1xcbiA0Nzk6XFx0XFx0aW50IG50YztcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0aWYgKGh3LVxcdTAwM2VjbXEub3BzLnRyYWNlX2NtZF9zZW5kKVxcbiA0ODI6XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmICh0ZXN0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpKSB7XFxuIDQ4NzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobnVtIFxcdTAwM2UgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcSkpIHtcXG4gNDkyOlxcdFxcdFxcdC8qIElmIENNRFEgcmluZyBpcyBmdWxsLCBTVyBIRUFEIGFuZCBIVyBIRUFEIG1heSBiZSBkaWZmZXJlbnQsXFxuIDQ5MzpcXHRcXHRcXHQgKiBuZWVkIHVwZGF0ZSB0aGUgU1cgSEVBRCBwb2ludGVyIGNzcS1cXHUwMDNlbmV4dF90b19jbGVhblxcbiA0OTQ6XFx0XFx0XFx0ICovXFxuIDQ5NTpcXHRcXHRcXHRjc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4gPVxcbiA0OTY6XFx0XFx0XFx0XFx0aGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcXG4gNDk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcS5sb2NrKTtcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDQ5OTpcXHRcXHR9XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdC8qKlxcbiA1MDI6XFx0XFx0ICogUmVjb3JkIHRoZSBsb2NhdGlvbiBvZiBkZXNjIGluIHRoZSByaW5nIGZvciB0aGlzIHRpbWVcXG4gNTAzOlxcdFxcdCAqIHdoaWNoIHdpbGwgYmUgdXNlIGZvciBoYXJkd2FyZSB0byB3cml0ZSBiYWNrXFxuIDUwNDpcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdG50YyA9IGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRoY2xnZV9jb21tX2NtZF9jb3B5X2Rlc2MoaHcsIGRlc2MsIG51bSk7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdC8qIFdyaXRlIHRvIGhhcmR3YXJlICovXFxuIDUxMDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbiA1MTE6XFx0XFx0XFx0XFx0ICAgICBody1cXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChodywgZGVzYywgbnVtLCBudGMpO1xcbiA1MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAyOjA0LjIyODM2MTA0OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg4MjczOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdGAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlLCB3aGF0IGlucHV0cyBpdCB0YWtlcywgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBkZXRlcm1pbmVzIHRoZSBuYXR1cmUgb2YgaXRzIHJlc3VsdC4gSXMgaXQgcHJpbWFyaWx5IGZvciBlcnJvciBjaGVja2luZywgdmFsaWRhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgYXJlIHRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFuZCB3aGF0IGRvIHRoZXkgc2lnbmlmeT8gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbidzIGRlZmluaXRpb24sIGFueSByZWxhdGVkIGNvbW1lbnRzIGluIHRoZSBjb2RlLCBhbmQgaWRlYWxseSwgYW55IGRvY3VtZW50YXRpb24gdGhhdCBleGlzdHMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBmdW5jdGlvbiBjb21wbGV0ZWx5LiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgbG9vcHMsIGFuZCBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLiBVbHRpbWF0ZWx5LCBteSBhaW0gaXMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgY2hlY2sgb3BlcmF0ZXMgc28gSSBjYW4gYXBwbHkgdGhhdCBrbm93bGVkZ2UgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDgyLCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMjoxMS43MTY2NDAwNjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gNDM3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgbnVtLCBpbnQgbnRjKVxcbiA0Mzg6XFx0e1xcbiA0Mzk6XFx0XFx0Ym9vbCBpc19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNDQwOlxcdFxcdGludCBoYW5kbGUsIHJldDtcXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0LyogSWYgdGhlIGNvbW1hbmQgaXMgc3luYywgd2FpdCBmb3IgdGhlIGZpcm13YXJlIHRvIHdyaXRlIGJhY2ssXFxuIDQ0MzpcXHRcXHQgKiBpZiBtdWx0aSBkZXNjcmlwdG9ycyB0byBiZSBzZW50LCB1c2UgdGhlIGZpcnN0IG9uZSB0byBjaGVja1xcbiA0NDQ6XFx0XFx0ICovXFxuIDQ0NTpcXHRcXHRpZiAoSENMR0VfQ09NTV9TRU5EX1NZTkMobGUxNl90b19jcHUoZGVzYy1cXHUwMDNlZmxhZykpKVxcbiA0NDY6XFx0XFx0XFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpLFxcbiA0NDc6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZpc19jb21wbGV0ZWQpO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRpZiAoIWlzX2NvbXBsZXRlZClcXG4gNDUwOlxcdFxcdFxcdHJldCA9IC1FQkFERTtcXG4gNDUxOlxcdFxcdGVsc2VcXG4gNDUyOlxcdFxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbChodywgZGVzYywgbnVtLCBudGMpO1xcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHQvKiBDbGVhbiB0aGUgY29tbWFuZCBzZW5kIHF1ZXVlICovXFxuIDQ1NTpcXHRcXHRoYW5kbGUgPSBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oaHcpO1xcbiA0NTY6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDNjIDApXFxuIDQ1NzpcXHRcXHRcXHRyZXQgPSBoYW5kbGU7XFxuIDQ1ODpcXHRcXHRlbHNlIGlmIChoYW5kbGUgIT0gbnVtKVxcbiA0NTk6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmh3LVxcdTAwM2VjbXEuY3NxLnBkZXYtXFx1MDAzZWRldixcXG4gNDYwOlxcdFxcdFxcdFxcdCBcXFwiY2xlYW5lZCAlZCwgbmVlZCB0byBjbGVhbiAlZFxcXFxuXFxcIiwgaGFuZGxlLCBudW0pO1xcbiA0NjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDYyOlxcdH1cXG4gNDYzOlxcdFxcbiA0NjQ6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAyOjExLjcxNjc1OTE0OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzM0NTcwOTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBjb2RlIGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgd3JpdGViYWNrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgd2UnbGwgaGl0IGEgdGltZW91dCBhbmQgZ2V0IGFuIGAtRUJBREVgIGVycm9yLiBUaGlzIG1lYW5zIGBoY2xnZV9pbml0X2FlX2RldmAgZmFpbHMsIGFuZCBjb25zZXF1ZW50bHksIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIHdvbid0IHJlZ2lzdGVyLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcywgY291bGQgd2UgZmluZCBhIHdheSB0byBjaXJjdW12ZW50IHRoaXM/IE5vcGUsIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIGl0J3MgcHJldHR5IGV4cGxpY2l0IHRoYXQgaXQgbmVlZHMgKmFjdHVhbCogaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IuIEl0IHdvbid0IGluaXRpYWxpemUgd2l0aG91dCBlaXRoZXIuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBvdGhlciByb3V0ZSB0byBgaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXRgLCB3aGljaCBpcyBteSB0YXJnZXQuXG5cbkkgdHJhY2UgdGhlIGNhbGwsIGFuZCBpdOKAmXMgY2FsbGVkIGZyb20gYGhuczNfc2V0X3R1bmFibGVgLCB3aGljaCBpcyBhbiBldGh0b29sIGNhbGxiYWNrLiBOb3csIGV0aHRvb2wgY2FsbGJhY2tzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2hlbiB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQuIEFuZCBhcyB3ZSd2ZSBlc3RhYmxpc2hlZCwgdGhlIG5ldGRldiB3b24ndCByZWdpc3RlciB3aXRob3V0IGhhcmR3YXJlLiBUaGF0J3MgaXQhIFRoaXMgY29kZSBwYXRoLCBiZWNhdXNlIG9mIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LCBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUuXG5cbk9rYXksIGxldCBtZSBjb25maXJtLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBjbGVhcjogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBUaGVyZSdzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGUgSGlzaWxpY29uIEhOUzMgdGhhdCBJJ20gYXdhcmUgb2YsIGFuZCBpdCdzIGEgUENJZSBkZXZpY2UsIHdoaWNoIG5lZWRzIHNwZWNpZmljIGhhcmR3YXJlIHJlc3BvbnNlcyB0byBpbml0aWFsaXplLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhlc2UgZW52aXJvbm1lbnRzLiBCYXNlZCBvbiB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg1NCwiT3V0cHV0VG9rZW5zIjoxMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMzoxNS4wNjI0NzUyMjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSGlzaWxpY29uIEhOUzMgbmV0d29yayBkcml2ZXIgdG8gc3VwcG9ydCBzZXR0aW5nIGFuZCBnZXR0aW5nIFBGQyBzdG9ybSBwcmV2ZW50aW9uIHRpbWVvdXQgdmlhIGV0aHRvb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYWN0dWFsIGhhcmR3YXJlIChvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBuZXRkZXYuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzIGR1cmluZyBmaXJtd2FyZSBjb21tdW5pY2F0aW9uLCBtZWFuaW5nIHRoZSBuZXRkZXYgaXMgbmV2ZXIgcmVnaXN0ZXJlZCBhbmQgdGhlIG1vZGlmaWVkIGV0aHRvb2wgY2FsbGJhY2tzIGNhbm5vdCBiZSByZWFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBITlMzIG5ldHdvcmsgZHJpdmVyIHRvIHN1cHBvcnQgc2V0dGluZyBhbmQgZ2V0dGluZyBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHZpYSBldGh0b29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSAob3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cykgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlciBwcm9iZSBmYWlscyBkdXJpbmcgZmlybXdhcmUgY29tbXVuaWNhdGlvbiwgbWVhbmluZyB0aGUgbmV0ZGV2IGlzIG5ldmVyIHJlZ2lzdGVyZWQgYW5kIHRoZSBtb2RpZmllZCBldGh0b29sIGNhbGxiYWNrcyBjYW5ub3QgYmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bc9b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 20:54:24 +0000 UTC FinishedAt: 2026-06-30 21:03:16 +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+CgkJCTx0ZD4yMDI2LzA2LzMwIDIwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSE5TMyBuZXR3b3JrIGRyaXZlciB0byBzdXBwb3J0IHNldHRpbmcgYW5kIGdldHRpbmcgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dCB2aWEgZXRodG9vbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUgKG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMgZHVyaW5nIGZpcm13YXJlIGNvbW11bmljYXRpb24sIG1lYW5pbmcgdGhlIG5ldGRldiBpcyBuZXZlciByZWdpc3RlcmVkIGFuZCB0aGUgbW9kaWZpZWQgZXRodG9vbCBjYWxsYmFja3MgY2Fubm90IGJlIHJlYWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIwOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWJkMTJmMGE5MmIyMjRkYjU4MWJhMDNkMmQ2ZDk0MDg4M2VjNTcyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIwOjU5OjQ1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5pbmRleCBhODc5OGVlY2Q5ZmJkMC4uNDI4NmFmOTIzOWIwMTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5AQCAtNjAyLDYgJiM0Mzs2MDIsMTAgQEAgdHlwZWRlZiBpbnQgKCpyZWFkX2Z1bmMpKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSk7XG4gICogICBDb25maWcgd2FrZSBvbiBsYW5cbiAgKiBkYmdfZ2V0X3JlYWRfZnVuY1xuICAqICAgUmV0dXJuIHRoZSByZWFkIGZ1bmMgZm9yIGRlYnVnZnMgc2VxIGZpbGVcbiYjNDM7ICogc2V0X3BmY19wcmV2ZW50aW9uX3RvdXRcbiYjNDM7ICogICBTZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxuJiM0MzsgKiBnZXRfcGZjX3ByZXZlbnRpb25fdG91dFxuJiM0MzsgKiAgIEdldCBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0XG4gICovXG4gc3RydWN0IGhuYWUzX2FlX29wcyB7XG4gXHRpbnQgKCppbml0X2FlX2Rldikoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbkBAIC04MTAsNiAmIzQzOzgxNCw4IEBAIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqaHd0c3RhbXBfc2V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1x0aW50ICgqc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTE2IHRpbWVzKTtcbiYjNDM7XHRpbnQgKCpnZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgKnRpbWVzKTtcbiB9O1xuIFxuIHN0cnVjdCBobmFlM19kY2Jfb3BzIHtcbkBAIC04OTEsNiAmIzQzOzg5NywxNCBAQCBzdHJ1Y3QgaG5hZTNfcm9jZV9wcml2YXRlX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGF0ZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEge1xuJiM0MztcdHUzMiBkaXI7XG4mIzQzO1x0dTMyIGVuYWJsZTtcbiYjNDM7XHR1MzIgcGVyaW9kX21zO1xuJiM0MztcdHUzMiB0aW1lcztcbiYjNDM7XHR1MzIgcmVjb3ZlcnlfcGVyaW9kX21zO1xuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfQVBQX0xPT1BCQUNLICAgIEJJVCgwKVxuICNkZWZpbmUgSE5BRTNfU1VQUE9SVF9QSFlfTE9PUEJBQ0sgICAgQklUKDEpXG4gI2RlZmluZSBITkFFM19TVVBQT1JUX1NFUkRFU19TRVJJQUxfTE9PUEJBQ0tcdEJJVCgyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXG5pbmRleCAyYzJhMmYxZTBkN2E2Ni4uNmRkZTA3ZGRlMWU4ZWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXG5AQCAtMzE0LDYgJiM0MzszMTQsOSBAQCBlbnVtIGhjbGdlX29wY29kZV90eXBlIHtcbiBcbiBcdC8qIFF1ZXJ5IGxpbmsgZGlhZ25vc2lzIGluZm8gY29tbWFuZCAqL1xuIFx0SENMR0VfT1BDX1FVRVJZX0xJTktfRElBR05PU0lTXHQ9IDB4NzAyQSxcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlnIHBhdXNlIHN0b3JtIHBhcmFtIGNvbW1hbmQgKi9cbiYjNDM7XHRIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEgPSAweDcwMTksXG4gfTtcbiBcbiBlbnVtIGhjbGdlX2NvbW1fY21kX3JldHVybl9zdGF0dXMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmNcbmluZGV4IDQ0MmYxNTQ3NmFmMzJhLi5lNzMxOGYyMzYzMTU3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuY1xuQEAgLTE4OTUsNiAmIzQzOzE4OTUsMTIgQEAgc3RhdGljIGludCBobnMzX2dldF90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRjYXNlIEVUSFRPT0xfVFhfQ09QWUJSRUFLX0JVRl9TSVpFOlxuIFx0XHQqKHUzMiAqKWRhdGEgPSBoLVx1MDAzZWtpbmZvLnR4X3NwYXJlX2J1Zl9zaXplO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEVUSFRPT0xfUEZDX1BSRVZFTlRJT05fVE9VVDpcbiYjNDM7XHRcdGlmICghaC1cdTAwM2VhZV9hbGdvLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGZjX3ByZXZlbnRpb25fdG91dClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiBcdFx0YnJlYWs7XG5AQCAtMjAyMCw2ICYjNDM7MjAyNiwxMiBAQCBzdGF0aWMgaW50IGhuczNfc2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRuZXRkZXZfaW5mbyhuZXRkZXYsIFwmIzM0O3RoZSBhY3RpdmUgdHggc3BhcmUgYnVmIHNpemUgaXMgJXUsIGR1ZSB0byBwYWdlIG9yZGVyXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ICAgIHByaXYtXHUwMDNlcmluZy1cdTAwM2V0eF9zcGFyZS1cdTAwM2VsZW4pO1xuIFxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XG4mIzQzO1x0XHRpZiAoIWgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBoLVx1MDAzZWFlX2FsZ28tXHUwMDNlb3BzLVx1MDAzZXNldF9wZmNfcHJldmVudGlvbl90b3V0KGgsICoodTE2ICopZGF0YSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oXG5pbmRleCA0Y2U5MmRkZWZjZGVkMi4uMWMwMjlkYzMyYWI4ZjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaFxuQEAgLTg5MCw2ICYjNDM7ODkwLDE1IEBAIHN0cnVjdCBoY2xnZV9xdWVyeV93b2xfc3VwcG9ydGVkX2NtZCB7XG4gXHR1OCByc3ZbMjBdO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQge1xuJiM0MztcdF9fbGUzMiBkaXI7XG4mIzQzO1x0X19sZTMyIGVuYWJsZTtcbiYjNDM7XHRfX2xlMzIgcGVyaW9kX21zO1xuJiM0MztcdF9fbGUzMiB0aW1lcztcbiYjNDM7XHRfX2xlMzIgcmVjb3ZlcnlfcGVyaW9kX21zO1xuJiM0MztcdF9fbGUzMiByc3Y7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBoY2xnZV9odztcbiBpbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5pbmRleCBmYzg1ODdjODA4MTM3MS4uYTA4ZDhhMzVhZWY5ODUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXG5AQCAtMzUyNCw2ICYjNDM7MzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEgKnBhcmEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICpwYXJhX2NtZDtcbiYjNDM7XHRzdHJ1Y3QgaGNsZ2VfZGVzYyBkZXNjO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChoZGV2LVx1MDAzZWFlX2Rldi1cdTAwM2VkZXZfdmVyc2lvbiBcdTAwM2MgSE5BRTNfREVWSUNFX1ZFUlNJT05fVjMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGhjbGdlX2NtZF9zZXR1cF9iYXNpY19kZXNjKFx1MDAyNmRlc2MsIEhDTEdFX09QQ19DRkdfUEFVU0VfU1RPUk1fUEFSQSxcbiYjNDM7XHRcdFx0XHQgICBmYWxzZSk7XG4mIzQzO1x0cGFyYV9jbWQgPSAoc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqKWRlc2MuZGF0YTtcbiYjNDM7XHRwYXJhX2NtZC1cdTAwM2VkaXIgPSBjcHVfdG9fbGUzMihwYXJhLVx1MDAzZWRpcik7XG4mIzQzO1x0cGFyYV9jbWQtXHUwMDNlZW5hYmxlID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VlbmFibGUpO1xuJiM0MztcdHBhcmFfY21kLVx1MDAzZXBlcmlvZF9tcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlcGVyaW9kX21zKTtcbiYjNDM7XHRwYXJhX2NtZC1cdTAwM2V0aW1lcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNldGltZXMpO1xuJiM0MztcdHBhcmFfY21kLVx1MDAzZXJlY292ZXJ5X3BlcmlvZF9tcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfY21kX3NlbmQoXHUwMDI2aGRldi1cdTAwM2VodywgXHUwMDI2ZGVzYywgMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIHNldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldixcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhICpwYXJhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqcGFyYV9jbWQ7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoaGRldi1cdTAwM2VhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRoY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYyhcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsIHRydWUpO1xuJiM0MztcdHBhcmFfY21kID0gKHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKilkZXNjLmRhdGE7XG4mIzQzO1x0cGFyYV9jbWQtXHUwMDNlZGlyID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VkaXIpO1xuJiM0MztcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFx1MDAyNmhkZXYtXHUwMDNlaHcsIFx1MDAyNmRlc2MsIDEpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7ZmFpbGVkIHRvIGdldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFyYS1cdTAwM2VlbmFibGUgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cdTAwM2VlbmFibGUpO1xuJiM0MztcdHBhcmEtXHUwMDNlcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNlcGVyaW9kX21zKTtcbiYjNDM7XHRwYXJhLVx1MDAzZXRpbWVzID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNldGltZXMpO1xuJiM0MztcdHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGNsZ2VfZW5hYmxlX3BmY19zdG9ybV9wcmV2ZW50KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGludCBkaXIsIGJvb2wgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmEgPSB7MH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFyYS5kaXIgPSBkaXI7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwYXJhLmVuYWJsZSA9IGVuYWJsZTtcbiYjNDM7XHRyZXR1cm4gaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHUxNiB0aW1lcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVx1MDAzZWJhY2s7XG4mIzQzO1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRpbWVzIFx1MDAzZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDt0aW1lcyAldSBzaG91bGQgYmUgbm8gbW9yZSB0aGFuICV1IVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0dGltZXMsIEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGFyYS5kaXIgPSBIQ0xHRV9ESVJfVFg7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwYXJhLmVuYWJsZSA9IHRpbWVzID8gMSA6IDA7XG4mIzQzO1x0cGFyYS50aW1lcyA9ICh1MzIpdGltZXM7XG4mIzQzO1x0cmV0ID0gaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQgPSB0aW1lcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGNsZ2VfZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaCwgdTE2ICp0aW1lcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XG4mIzQzO1x0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVx1MDAzZWJhY2s7XG4mIzQzO1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFyYS5kaXIgPSBIQ0xHRV9ESVJfVFg7XG4mIzQzO1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqdGltZXMgPSBwYXJhLmVuYWJsZSA/ICh1MTYpcGFyYS50aW1lcyA6IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhjbGdlX3NldF9yZXNldF9wZW5kaW5nKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4gXHRcdFx0XHQgICAgZW51bSBobmFlM19yZXNldF90eXBlIHJlc2V0X3R5cGUpXG4ge1xuQEAgLTQzMTcsNiAmIzQzOzQ0MzMsMjYgQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gaGNsZ2VfcmVzZXRfcHJlcGFyZV93YWl0KGhkZXYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRlbHNlIGlmIChyZXQpXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgcmV0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaGFuZGxlLCBoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIHNldCB0eCBwZmMgc3Rvcm0gcHJldmVudCwgcmV0ID0gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcmVidWlsZChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuIHtcbiBcdGludCByZXQ7XG5AQCAtOTI3OCw2ICYjNDM7OTQxNCwzMiBAQCBzdGF0aWMgaW50IGhjbGdlX2luaXRfd29sKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gaGNsZ2VfdXBkYXRlX3dvbChoZGV2KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGhjbGdlX2luaXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlID0gXHUwMDI2aGRldi1cdTAwM2V2cG9ydFswXS5uaWM7XG4mIzQzO1x0dTE2IHRpbWVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChoZGV2LCBIQ0xHRV9ESVJfUlgsIGZhbHNlKTtcbiYjNDM7XHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGVsc2UgaWYgKHJldClcbiYjNDM7XHRcdGRldl93YXJuKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSByeCBwZmMgc3Rvcm0gcHJldmVudCwgcmV0ID0gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCByZXQpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIFx1MDAyNnRpbWVzKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgXCYjMzQ7ZmFpbGVkIHRvIGdldCB0eCBwZmMgcHJldmVudGlvbiB0aW1lb3V0LCByZXQgPSAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IHJldCk7XG4mIzQzO1x0XHR0aW1lcyA9IEhDTEdFX0RFRkFVTFRfUEZDX1BSRVZFTlRJT05fVE9VVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhkZXYtXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dCA9IHRpbWVzO1xuJiM0MztcdGhkZXYtXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0ID0gdGltZXM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaGNsZ2VfZ2V0X3dvbChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4ge1xuQEAgLTk1NDcsNiAmIzQzOzk3MDksOCBAQCBzdGF0aWMgaW50IGhjbGdlX2luaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiBcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0IFwmIzM0O2ZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxcblwmIzM0OywgcmV0KTtcbiBcbiYjNDM7XHRoY2xnZV9pbml0X3BmY19wcmV2ZW50aW9uX3RvdXQoaGRldik7XG4mIzQzO1xuIFx0cmV0ID0gaGNsZ2VfZGV2bGlua19pbml0KGhkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfcHRwX3VuaW5pdDtcbkBAIC05OTQ2LDYgJiM0MzsxMDExMCw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiBcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0IFwmIzM0O2ZhaWxlZCB0byB1cGRhdGUgd29sIGNvbmZpZywgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG4gXG4mIzQzO1x0aGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KGhkZXYpO1xuJiM0MztcbiBcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtSZXNldCBkb25lLCAlcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmluaXNoZWQuXFxuXCYjMzQ7LFxuIFx0XHQgSENMR0VfRFJJVkVSX05BTUUpO1xuIFxuQEAgLTk5NzcsNiAmIzQzOzEwMTQzLDEwIEBAIHN0YXRpYyB2b2lkIGhjbGdlX3VuaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuIFx0aGNsZ2VfY29uZmlnX25pY19od19lcnJvcihoZGV2LCBmYWxzZSk7XG4gXHRoY2xnZV9jb25maWdfcm9jZWVfcmFzX2ludGVycnVwdChoZGV2LCBmYWxzZSk7XG4gXG4mIzQzO1x0LyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi9cbiYjNDM7XHRoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChcdTAwMjZoZGV2LVx1MDAzZXZwb3J0LVx1MDAzZW5pYyxcbiYjNDM7XHRcdFx0XHQgICAgICBoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdCk7XG4mIzQzO1xuIFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0KGhkZXYtXHUwMDNlYWVfZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3KTtcbiBcdGhjbGdlX21pc2NfaXJxX3VuaW5pdChoZGV2KTtcbiBcdGhjbGdlX2RldmxpbmtfdW5pbml0KGhkZXYpO1xuQEAgLTEwNTM5LDYgJiM0MzsxMDcwOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcbiBcdC5zZXRfd29sID0gaGNsZ2Vfc2V0X3dvbCxcbiBcdC5od3RzdGFtcF9nZXQgPSBoY2xnZV9wdHBfZ2V0X2NmZyxcbiBcdC5od3RzdGFtcF9zZXQgPSBoY2xnZV9wdHBfc2V0X2NmZyxcbiYjNDM7XHQuc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQgPSBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dCxcbiYjNDM7XHQuZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaG5hZTNfYWVfYWxnbyBhZV9hbGdvID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5pbmRleCA3NDE5NDgxNDIyYzMxMC4uMGNlZTg5NDdmNmI0NGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5AQCAtMzQ2LDYgJiM0MzszNDYsMTEgQEAgZW51bSBoY2xnZV9saW5rX2ZhaWxfY29kZSB7XG4gI2RlZmluZSBIQ0xHRV9MSU5LX1NUQVRVU19ET1dOIDBcbiAjZGVmaW5lIEhDTEdFX0xJTktfU1RBVFVTX1VQICAgMVxuIFxuJiM0MzsjZGVmaW5lIEhDTEdFX0RJUl9SWCAwXG4mIzQzOyNkZWZpbmUgSENMR0VfRElSX1RYIDFcbiYjNDM7I2RlZmluZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVFx0XHQyMDAwXG4mIzQzOyNkZWZpbmUgSENMR0VfREVGQVVMVF9QRkNfUFJFVkVOVElPTl9UT1VUXHQxMDAwXG4mIzQzO1xuICNkZWZpbmUgSENMR0VfUEdfTlVNXHRcdDRcbiAjZGVmaW5lIEhDTEdFX1NDSF9NT0RFX1NQXHQwXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9EV1JSXHQxXG5AQCAtODk4LDYgJiM0Mzs5MDMsOCBAQCBzdHJ1Y3QgaGNsZ2VfZGV2IHtcbiBcdHUxNiB2Zl9yc3Nfc2l6ZV9tYXg7XHRcdC8qIEhXIGRlZmluZWQgVkYgbWF4IFJTUyB0YXNrIHF1ZXVlICovXG4gXHR1MTYgcGZfcnNzX3NpemVfbWF4O1x0XHQvKiBIVyBkZWZpbmVkIFBGIG1heCBSU1MgdGFzayBxdWV1ZSAqL1xuIFx0dTMyIHR4X3NwYXJlX2J1Zl9zaXplO1x0XHQvKiBIVyBkZWZpbmVkIFRYIHNwYXJlIGJ1ZmZlciBzaXplICovXG4mIzQzO1x0dTE2IHBmY19wcmV2ZW50aW9uX3RvdXQ7XHQvKiBVc2VyIGNvbmZpZywgcmVzdG9yZWQgYWZ0ZXIgcmVzZXQgKi9cbiYjNDM7XHR1MTYgcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0OyAvKiBIVyBkZWZhdWx0LCB0byBhdm9pZCBzdGFsZSBzdGF0ZSAqL1xuIFxuIFx0dTE2IGZkaXJfcGZfZmlsdGVyX2NvdW50OyAvKiBOdW0gb2YgZ3VhcmFudGVlZCBmaWx0ZXJzIGZvciB0aGlzIFBGICovXG4gXHR1MTYgbnVtX2FsbG9jX3Zwb3J0O1x0XHQvKiBOdW0gdnBvcnRzIHRoaXMgZHJpdmVyIHN1cHBvcnRzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjA6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBITlMzIG5ldHdvcmsgZHJpdmVyIHRvIHN1cHBvcnQgc2V0dGluZyBhbmQgZ2V0dGluZyBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHZpYSBldGh0b29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSAob3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cykgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlciBwcm9iZSBmYWlscyBkdXJpbmcgZmlybXdhcmUgY29tbXVuaWNhdGlvbiwgbWVhbmluZyB0aGUgbmV0ZGV2IGlzIG5ldmVyIHJlZ2lzdGVyZWQgYW5kIHRoZSBtb2RpZmllZCBldGh0b29sIGNhbGxiYWNrcyBjYW5ub3QgYmUgcmVhY2hlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGViZDEyZjBhOTJiMjI0ZGI1ODFiYTAzZDJkNmQ5NDA4ODNlYzU3MjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAyMDo1OTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oCmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi40Mjg2YWY5MjM5YjAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oCkBAIC02MDIsNiAmIzQzOzYwMiwxMCBAQCB0eXBlZGVmIGludCAoKnJlYWRfZnVuYykoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKTsKICAqICAgQ29uZmlnIHdha2Ugb24gbGFuCiAgKiBkYmdfZ2V0X3JlYWRfZnVuYwogICogICBSZXR1cm4gdGhlIHJlYWQgZnVuYyBmb3IgZGVidWdmcyBzZXEgZmlsZQomIzQzOyAqIHNldF9wZmNfcHJldmVudGlvbl90b3V0CiYjNDM7ICogICBTZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dAomIzQzOyAqIGdldF9wZmNfcHJldmVudGlvbl90b3V0CiYjNDM7ICogICBHZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dAogICovCiBzdHJ1Y3QgaG5hZTNfYWVfb3BzIHsKIAlpbnQgKCppbml0X2FlX2Rldikoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTsKQEAgLTgxMCw2ICYjNDM7ODE0LDggQEAgc3RydWN0IGhuYWUzX2FlX29wcyB7CiAJaW50ICgqaHd0c3RhbXBfc2V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsCiAJCQkgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZywKIAkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwlpbnQgKCpzZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgdGltZXMpOwomIzQzOwlpbnQgKCpnZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgKnRpbWVzKTsKIH07CiAKIHN0cnVjdCBobmFlM19kY2Jfb3BzIHsKQEAgLTg5MSw2ICYjNDM7ODk3LDE0IEBAIHN0cnVjdCBobmFlM19yb2NlX3ByaXZhdGVfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIH07CiAKJiM0MztzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEgewomIzQzOwl1MzIgZGlyOwomIzQzOwl1MzIgZW5hYmxlOwomIzQzOwl1MzIgcGVyaW9kX21zOwomIzQzOwl1MzIgdGltZXM7CiYjNDM7CXUzMiByZWNvdmVyeV9wZXJpb2RfbXM7CiYjNDM7fTsKJiM0MzsKICNkZWZpbmUgSE5BRTNfU1VQUE9SVF9BUFBfTE9PUEJBQ0sgICAgQklUKDApCiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfUEhZX0xPT1BCQUNLICAgIEJJVCgxKQogI2RlZmluZSBITkFFM19TVVBQT1JUX1NFUkRFU19TRVJJQUxfTE9PUEJBQ0sJQklUKDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaAppbmRleCAyYzJhMmYxZTBkN2E2Ni4uNmRkZTA3ZGRlMWU4ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaApAQCAtMzE0LDYgJiM0MzszMTQsOSBAQCBlbnVtIGhjbGdlX29wY29kZV90eXBlIHsKIAogCS8qIFF1ZXJ5IGxpbmsgZGlhZ25vc2lzIGluZm8gY29tbWFuZCAqLwogCUhDTEdFX09QQ19RVUVSWV9MSU5LX0RJQUdOT1NJUwk9IDB4NzAyQSwKJiM0MzsKJiM0MzsJLyogQ29uZmlnIHBhdXNlIHN0b3JtIHBhcmFtIGNvbW1hbmQgKi8KJiM0MzsJSENMR0VfT1BDX0NGR19QQVVTRV9TVE9STV9QQVJBID0gMHg3MDE5LAogfTsKIAogZW51bSBoY2xnZV9jb21tX2NtZF9yZXR1cm5fc3RhdHVzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmMKaW5kZXggNDQyZjE1NDc2YWYzMmEuLmU3MzE4ZjIzNjMxNTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYwpAQCAtMTg5NSw2ICYjNDM7MTg5NSwxMiBAQCBzdGF0aWMgaW50IGhuczNfZ2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAljYXNlIEVUSFRPT0xfVFhfQ09QWUJSRUFLX0JVRl9TSVpFOgogCQkqKHUzMiAqKWRhdGEgPSBoLSZndDtraW5mby50eF9zcGFyZV9idWZfc2l6ZTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUOgomIzQzOwkJaWYgKCFoLSZndDthZV9hbGdvLSZndDtvcHMtJmd0O2dldF9wZmNfcHJldmVudGlvbl90b3V0KQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJCXJldCA9IGgtJmd0O2FlX2FsZ28tJmd0O29wcy0mZ3Q7Z2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJCWJyZWFrOwpAQCAtMjAyMCw2ICYjNDM7MjAyNiwxMiBAQCBzdGF0aWMgaW50IGhuczNfc2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCW5ldGRldl9pbmZvKG5ldGRldiwgJiMzNDt0aGUgYWN0aXZlIHR4IHNwYXJlIGJ1ZiBzaXplIGlzICV1LCBkdWUgdG8gcGFnZSBvcmRlclxuJiMzNDssCiAJCQkJICAgIHByaXYtJmd0O3JpbmctJmd0O3R4X3NwYXJlLSZndDtsZW4pOwogCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6CiYjNDM7CQlpZiAoIWgtJmd0O2FlX2FsZ28tJmd0O29wcy0mZ3Q7c2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkJcmV0ID0gaC0mZ3Q7YWVfYWxnby0mZ3Q7b3BzLSZndDtzZXRfcGZjX3ByZXZlbnRpb25fdG91dChoLCAqKHUxNiAqKWRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaAppbmRleCA0Y2U5MmRkZWZjZGVkMi4uMWMwMjlkYzMyYWI4ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmgKQEAgLTg5MCw2ICYjNDM7ODkwLDE1IEBAIHN0cnVjdCBoY2xnZV9xdWVyeV93b2xfc3VwcG9ydGVkX2NtZCB7CiAJdTggcnN2WzIwXTsKIH07CiAKJiM0MztzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kIHsKJiM0MzsJX19sZTMyIGRpcjsKJiM0MzsJX19sZTMyIGVuYWJsZTsKJiM0MzsJX19sZTMyIHBlcmlvZF9tczsKJiM0MzsJX19sZTMyIHRpbWVzOwomIzQzOwlfX2xlMzIgcmVjb3ZlcnlfcGVyaW9kX21zOwomIzQzOwlfX2xlMzIgcnN2OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgaGNsZ2VfaHc7CiBpbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYwppbmRleCBmYzg1ODdjODA4MTM3MS4uYTA4ZDhhMzVhZWY5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYwpAQCAtMzUyNCw2ICYjNDM7MzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGludCBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kOwomIzQzOwlzdHJ1Y3QgaGNsZ2VfZGVzYyBkZXNjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoaGRldi0mZ3Q7YWVfZGV2LSZndDtkZXZfdmVyc2lvbiAmbHQ7IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwloY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYygmYW1wO2Rlc2MsIEhDTEdFX09QQ19DRkdfUEFVU0VfU1RPUk1fUEFSQSwKJiM0MzsJCQkJICAgZmFsc2UpOwomIzQzOwlwYXJhX2NtZCA9IChzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICopZGVzYy5kYXRhOwomIzQzOwlwYXJhX2NtZC0mZ3Q7ZGlyID0gY3B1X3RvX2xlMzIocGFyYS0mZ3Q7ZGlyKTsKJiM0MzsJcGFyYV9jbWQtJmd0O2VuYWJsZSA9IGNwdV90b19sZTMyKHBhcmEtJmd0O2VuYWJsZSk7CiYjNDM7CXBhcmFfY21kLSZndDtwZXJpb2RfbXMgPSBjcHVfdG9fbGUzMihwYXJhLSZndDtwZXJpb2RfbXMpOwomIzQzOwlwYXJhX2NtZC0mZ3Q7dGltZXMgPSBjcHVfdG9fbGUzMihwYXJhLSZndDt0aW1lcyk7CiYjNDM7CXBhcmFfY21kLSZndDtyZWNvdmVyeV9wZXJpb2RfbXMgPSBjcHVfdG9fbGUzMihwYXJhLSZndDtyZWNvdmVyeV9wZXJpb2RfbXMpOwomIzQzOwomIzQzOwlyZXQgPSBoY2xnZV9jbWRfc2VuZCgmYW1wO2hkZXYtJmd0O2h3LCAmYW1wO2Rlc2MsIDEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2VycigmYW1wO2hkZXYtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZhaWxlZCB0byBzZXQgcGZjIHN0b3JtIHBhcmEsIHJldCA9ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKJiM0MzsJCQkJICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kOwomIzQzOwlzdHJ1Y3QgaGNsZ2VfZGVzYyBkZXNjOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoaGRldi0mZ3Q7YWVfZGV2LSZndDtkZXZfdmVyc2lvbiAmbHQ7IEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwloY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYygmYW1wO2Rlc2MsIEhDTEdFX09QQ19DRkdfUEFVU0VfU1RPUk1fUEFSQSwgdHJ1ZSk7CiYjNDM7CXBhcmFfY21kID0gKHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKilkZXNjLmRhdGE7CiYjNDM7CXBhcmFfY21kLSZndDtkaXIgPSBjcHVfdG9fbGUzMihwYXJhLSZndDtkaXIpOwomIzQzOwlyZXQgPSBoY2xnZV9jbWRfc2VuZCgmYW1wO2hkZXYtJmd0O2h3LCAmYW1wO2Rlc2MsIDEpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7ZmFpbGVkIHRvIGdldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXJhLSZndDtlbmFibGUgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC0mZ3Q7ZW5hYmxlKTsKJiM0MzsJcGFyYS0mZ3Q7cGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtJmd0O3BlcmlvZF9tcyk7CiYjNDM7CXBhcmEtJmd0O3RpbWVzID0gbGUzMl90b19jcHUocGFyYV9jbWQtJmd0O3RpbWVzKTsKJiM0MzsJcGFyYS0mZ3Q7cmVjb3ZlcnlfcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtJmd0O3JlY292ZXJ5X3BlcmlvZF9tcyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LAomIzQzOwkJCQkJICBpbnQgZGlyLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhID0gezB9OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwYXJhLmRpciA9IGRpcjsKJiM0MzsJcmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsICZhbXA7cGFyYSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwYXJhLmVuYWJsZSA9IGVuYWJsZTsKJiM0MzsJcmV0dXJuIGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCAmYW1wO3BhcmEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHUxNiB0aW1lcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7CiYjNDM7CXN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC0mZ3Q7YmFjazsKJiM0MzsJc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICh0aW1lcyAmZ3Q7IEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7dGltZXMgJXUgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAldSFcbiYjMzQ7LAomIzQzOwkJCXRpbWVzLCBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlwYXJhLmRpciA9IEhDTEdFX0RJUl9UWDsKJiM0MzsJcmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsICZhbXA7cGFyYSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwYXJhLmVuYWJsZSA9IHRpbWVzID8gMSA6IDA7CiYjNDM7CXBhcmEudGltZXMgPSAodTMyKXRpbWVzOwomIzQzOwlyZXQgPSBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgJmFtcDtwYXJhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWhkZXYtJmd0O3BmY19wcmV2ZW50aW9uX3RvdXQgPSB0aW1lczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGNsZ2VfZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaCwgdTE2ICp0aW1lcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7CiYjNDM7CXN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC0mZ3Q7YmFjazsKJiM0MzsJc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhcmEuZGlyID0gSENMR0VfRElSX1RYOwomIzQzOwlyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgJmFtcDtwYXJhKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSp0aW1lcyA9IHBhcmEuZW5hYmxlID8gKHUxNilwYXJhLnRpbWVzIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaGNsZ2Vfc2V0X3Jlc2V0X3BlbmRpbmcoc3RydWN0IGhjbGdlX2RldiAqaGRldiwKIAkJCQkgICAgZW51bSBobmFlM19yZXNldF90eXBlIHJlc2V0X3R5cGUpCiB7CkBAIC00MzE3LDYgJiM0Mzs0NDMzLDI2IEBAIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KQogCXJldHVybiBoY2xnZV9yZXNldF9wcmVwYXJlX3dhaXQoaGRldik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBoY2xnZV9yZXN0b3JlX3BmY19zdG9ybV9wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhjbGdlX2RldiAqaGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9ICZhbXA7aGRldi0mZ3Q7dnBvcnRbMF0ubmljOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7CiYjNDM7CWlmIChyZXQgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQlyZXR1cm47CiYjNDM7CWVsc2UgaWYgKHJldCkKJiM0MzsJCWRldl93YXJuKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHJ4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxuJiMzNDssCiYjNDM7CQkJIHJldCk7CiYjNDM7CiYjNDM7CXJldCA9IGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KGhhbmRsZSwgaGRldi0mZ3Q7cGZjX3ByZXZlbnRpb25fdG91dCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfd2FybigmYW1wO2hkZXYtJmd0O3BkZXYtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtmYWlsZWQgdG8gc2V0IHR4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxuJiMzNDssCiYjNDM7CQkJIHJldCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBoY2xnZV9yZXNldF9yZWJ1aWxkKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpCiB7CiAJaW50IHJldDsKQEAgLTkyNzgsNiAmIzQzOzk0MTQsMzIgQEAgc3RhdGljIGludCBoY2xnZV9pbml0X3dvbChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KQogCXJldHVybiBoY2xnZV91cGRhdGVfd29sKGhkZXYpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgaGNsZ2VfaW5pdF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSAmYW1wO2hkZXYtJmd0O3Zwb3J0WzBdLm5pYzsKJiM0MzsJdTE2IHRpbWVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7CiYjNDM7CWlmIChyZXQgPT0gLUVPUE5PVFNVUFApCiYjNDM7CQlyZXR1cm47CiYjNDM7CWVsc2UgaWYgKHJldCkKJiM0MzsJCWRldl93YXJuKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHJ4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxuJiMzNDssCiYjNDM7CQkJIHJldCk7CiYjNDM7CiYjNDM7CXJldCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0KGhhbmRsZSwgJmFtcDt0aW1lcyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl93YXJuKCZhbXA7aGRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O2ZhaWxlZCB0byBnZXQgdHggcGZjIHByZXZlbnRpb24gdGltZW91dCwgcmV0ID0gJWRcbiYjMzQ7LAomIzQzOwkJCSByZXQpOwomIzQzOwkJdGltZXMgPSBIQ0xHRV9ERUZBVUxUX1BGQ19QUkVWRU5USU9OX1RPVVQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaGRldi0mZ3Q7cGZjX3ByZXZlbnRpb25fdG91dCA9IHRpbWVzOwomIzQzOwloZGV2LSZndDtwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQgPSB0aW1lczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBoY2xnZV9nZXRfd29sKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwKIAkJCSAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewpAQCAtOTU0Nyw2ICYjNDM7OTcwOSw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KQogCQlkZXZfd2FybigmYW1wO3BkZXYtJmd0O2RldiwKIAkJCSAmIzM0O2ZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxuJiMzNDssIHJldCk7CiAKJiM0MzsJaGNsZ2VfaW5pdF9wZmNfcHJldmVudGlvbl90b3V0KGhkZXYpOwomIzQzOwogCXJldCA9IGhjbGdlX2RldmxpbmtfaW5pdChoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9wdHBfdW5pbml0OwpAQCAtOTk0Niw2ICYjNDM7MTAxMTAsOCBAQCBzdGF0aWMgaW50IGhjbGdlX3Jlc2V0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpCiAJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LAogCQkJICYjMzQ7ZmFpbGVkIHRvIHVwZGF0ZSB3b2wgY29uZmlnLCByZXQgPSAlZFxuJiMzNDssIHJldCk7CiAKJiM0MzsJaGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KGhkZXYpOwomIzQzOwogCWRldl9pbmZvKCZhbXA7cGRldi0mZ3Q7ZGV2LCAmIzM0O1Jlc2V0IGRvbmUsICVzIGRyaXZlciBpbml0aWFsaXphdGlvbiBmaW5pc2hlZC5cbiYjMzQ7LAogCQkgSENMR0VfRFJJVkVSX05BTUUpOwogCkBAIC05OTc3LDYgJiM0MzsxMDE0MywxMCBAQCBzdGF0aWMgdm9pZCBoY2xnZV91bmluaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldikKIAloY2xnZV9jb25maWdfbmljX2h3X2Vycm9yKGhkZXYsIGZhbHNlKTsKIAloY2xnZV9jb25maWdfcm9jZWVfcmFzX2ludGVycnVwdChoZGV2LCBmYWxzZSk7CiAKJiM0MzsJLyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi8KJiM0MzsJaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoJmFtcDtoZGV2LSZndDt2cG9ydC0mZ3Q7bmljLAomIzQzOwkJCQkgICAgICBoZGV2LSZndDtwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQpOwomIzQzOwogCWhjbGdlX2NvbW1fY21kX3VuaW5pdChoZGV2LSZndDthZV9kZXYsICZhbXA7aGRldi0mZ3Q7aHcuaHcpOwogCWhjbGdlX21pc2NfaXJxX3VuaW5pdChoZGV2KTsKIAloY2xnZV9kZXZsaW5rX3VuaW5pdChoZGV2KTsKQEAgLTEwNTM5LDYgJiM0MzsxMDcwOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHsKIAkuc2V0X3dvbCA9IGhjbGdlX3NldF93b2wsCiAJLmh3dHN0YW1wX2dldCA9IGhjbGdlX3B0cF9nZXRfY2ZnLAogCS5od3RzdGFtcF9zZXQgPSBoY2xnZV9wdHBfc2V0X2NmZywKJiM0MzsJLnNldF9wZmNfcHJldmVudGlvbl90b3V0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQsCiYjNDM7CS5nZXRfcGZjX3ByZXZlbnRpb25fdG91dCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0LAogfTsKIAogc3RhdGljIHN0cnVjdCBobmFlM19hZV9hbGdvIGFlX2FsZ28gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaAppbmRleCA3NDE5NDgxNDIyYzMxMC4uMGNlZTg5NDdmNmI0NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uaApAQCAtMzQ2LDYgJiM0MzszNDYsMTEgQEAgZW51bSBoY2xnZV9saW5rX2ZhaWxfY29kZSB7CiAjZGVmaW5lIEhDTEdFX0xJTktfU1RBVFVTX0RPV04gMAogI2RlZmluZSBIQ0xHRV9MSU5LX1NUQVRVU19VUCAgIDEKIAomIzQzOyNkZWZpbmUgSENMR0VfRElSX1JYIDAKJiM0MzsjZGVmaW5lIEhDTEdFX0RJUl9UWCAxCiYjNDM7I2RlZmluZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVAkJMjAwMAomIzQzOyNkZWZpbmUgSENMR0VfREVGQVVMVF9QRkNfUFJFVkVOVElPTl9UT1VUCTEwMDAKJiM0MzsKICNkZWZpbmUgSENMR0VfUEdfTlVNCQk0CiAjZGVmaW5lIEhDTEdFX1NDSF9NT0RFX1NQCTAKICNkZWZpbmUgSENMR0VfU0NIX01PREVfRFdSUgkxCkBAIC04OTgsNiAmIzQzOzkwMyw4IEBAIHN0cnVjdCBoY2xnZV9kZXYgewogCXUxNiB2Zl9yc3Nfc2l6ZV9tYXg7CQkvKiBIVyBkZWZpbmVkIFZGIG1heCBSU1MgdGFzayBxdWV1ZSAqLwogCXUxNiBwZl9yc3Nfc2l6ZV9tYXg7CQkvKiBIVyBkZWZpbmVkIFBGIG1heCBSU1MgdGFzayBxdWV1ZSAqLwogCXUzMiB0eF9zcGFyZV9idWZfc2l6ZTsJCS8qIEhXIGRlZmluZWQgVFggc3BhcmUgYnVmZmVyIHNpemUgKi8KJiM0MzsJdTE2IHBmY19wcmV2ZW50aW9uX3RvdXQ7CS8qIFVzZXIgY29uZmlnLCByZXN0b3JlZCBhZnRlciByZXNldCAqLwomIzQzOwl1MTYgcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0OyAvKiBIVyBkZWZhdWx0LCB0byBhdm9pZCBzdGFsZSBzdGF0ZSAqLwogCiAJdTE2IGZkaXJfcGZfZmlsdGVyX2NvdW50OyAvKiBOdW0gb2YgZ3VhcmFudGVlZCBmaWx0ZXJzIGZvciB0aGlzIFBGICovCiAJdTE2IG51bV9hbGxvY192cG9ydDsJCS8qIE51bSB2cG9ydHMgdGhpcyBkcml2ZXIgc3VwcG9ydHMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk5NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBGQyBTdG9ybSBQcmV2ZW50aW9uIFBhdGNoIGZvciB0aGUgSE5TMyBEcml2ZXIqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBjb21pbmcgaW4gdGhhdCBhZGRzIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZ2V0IHRoZSBQcmlvcml0eSBGbG93IENvbnRyb2wgKFBGQykgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHdpdGhpbiB0aGUgSE5TMyBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgaXQgcHJpbWFyaWx5IHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jYCB0byBhZGQgdGhlIG5lY2Vzc2FyeSBgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUYCBob29rcyBmb3IgYGhuczNfZ2V0X3R1bmFibGVgIGFuZCBgaG5zM19zZXRfdHVuYWJsZWAuIFRoZW4sIG9uIHRoZSBIQ0xHRSBQRiBzaWRlLCAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNgIGdldHMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdldCBhbmQgc2V0IGZ1bmN0aW9ucywgbmFtZWx5IGBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dGAgYW5kIGBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB3ZSBmdXp6IHRoaXM/IFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgYGhuczNgLCB3aGljaCBJIHJlbWVtYmVyIGlzIGEgUENJIGRyaXZlci4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGFjY2Vzc2liaWxpdHkgb2YgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXJzIGFyZSBvZnRlbiBkaWZmaWN1bHQgdG8gcmVhY2ggZGlyZWN0bHkgdW5sZXNzIHdlJiMzOTtyZSB1c2luZyBzb21ldGhpbmcgbGlrZSBRRU1VIHdpdGggc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uIG9yIGxldmVyYWdpbmcgdG9vbHMgbGlrZSBzeXotdXNiL3N5ei1wY2kuCgpXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdyDigJMgYHN5ei1wY2lgISBCdXQgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgSGlzaWxpY29uIEhOUzM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaG5zM2AgaXMgaW5kZWVkIGEgUENJIGRyaXZlciB0byBjb25maXJtIG15IGZ1enppbmcgYXBwcm9hY2guIExldCYjMzk7cyBzZWUuLi4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNgIGlzIHBhcnQgb2YgdGhlIGBobnMzYCBkcml2ZXIsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgcGFyZW50IGRpcmVjdG9yeSBmb3IgdGhlIFBDSSBkcml2ZXIgaW5zdGFudGlhdGlvbi4gSSBzaG91bGQgc2VhcmNoIGZvciBgcGNpX2RyaXZlcmAgZGVjbGFyYXRpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzYCBkaXJlY3RvcnkgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzM1NT1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaG5zM19wbV9vcHMsIGhuczNfc3VzcGVuZCwgaG5zM19yZXN1bWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMzNTc6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhuczNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1OC1cdC5uYW1lICAgICA9IGhuczNfZHJpdmVyX25hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUENJIERyaXZlcioqCgpPa2F5LCBzbyBpdCYjMzk7cyBjb25maXJtZWQsIHRoaXMgaXMgYSBQQ0kgZHJpdmVyLiBUaGUgbmV4dCBxdWVzdGlvbiwgbmF0dXJhbGx5LCBpcyB3aGV0aGVyIG9yIG5vdCBpdCYjMzk7cyBzdXNjZXB0aWJsZSB0byBmdXp6aW5nLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBQQ0kgZGV2aWNlIGJlIGZ1enplZCB1c2luZyBgc3l6LXBjaWA/IEkga25vdyB0aGF0JiMzOTtzIHRoZSBjb21tb24gYXBwcm9hY2gsIGVzcGVjaWFsbHkgd2hlbiB0aGUgUENJIElEcyBhcmUga25vd24gYW5kIHN5emthbGxlciBpcyBwcm9wZXJseSBjb25maWd1cmVkLiBQQ0kgZGV2aWNlcyBvZnRlbiAqY2FuKiBiZSBlbXVsYXRlZCBvciBmdXp6ZWQgdGhpcyB3YXkuCgpIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgb2YgdGhlIHVzdWFsIGh1cmRsZXMuIFNwZWNpZmljYWxseSwgY29uc2lkZXJpbmcgbXkgZXhwZXJpZW5jZSwgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycywgcGFydGljdWxhcmx5IGNvbXBsZXggb25lcyBsaWtlIG5ldHdvcmsgY2FyZHMsIGFyZSBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gbWVhbmluZ2Z1bGx5IGZ1enogd2l0aG91dCBhIHJvYnVzdCBlbXVsYXRvci4gRXZlbiB0aG91Z2ggc3l6a2FsbGVyICpkb2VzKiBoYXZlIGEgUENJIGZ1enplciwgaXQmIzM5O3Mgb2Z0ZW4gbm90IGVub3VnaCBvbiBpdHMgb3duLgoKTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSBzb21ldGhpbmcgaW1wb3J0YW50IGFib3V0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgbWVudGlvbnMgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDsgVGhpcyByYWlzZXMgYSByZWQgZmxhZy4gSXMgdGhlcmUgYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBvcHRpb24gc3BlY2lmaWNhbGx5IGZvciBIaXNpbGljb24gSE5TMz8gSSBkb24mIzM5O3QgcmVjYWxsIHNlZWluZyBvbmUsIGFuZCB0aGF04oCZcyBhIHByb2JsZW0uCgpDYW4gYHN5ei1wY2lgIGV2ZW4gKnJlYWNoKiB0aGlzIHRoaW5nPyBJdCBjYW4gY2VydGFpbmx5IHByb2JlIGl0LCBidXQgZ2V0dGluZyB0aGUgZGV2aWNlIHNldCB1cCB0byBhIHBvaW50IHdoZXJlIGBldGh0b29sYCBjb21tYW5kcyBjYW4gZXZlbiBiZSBzZW50IHRvIHRoZSBuZXRkZXYgcmVxdWlyZXMgYSAqc3VjY2Vzc2Z1bCogcHJvYmUuIEFuZCwgd2l0aCB0aGVzZSBraW5kcyBvZiBjb21wbGV4IG5ldHdvcmsgY2FyZHMsIHByb2JlIGZhaWx1cmVzIGFyZSB0aGUgbm9ybSB1bmxlc3MgdGhlIGhhcmR3YXJlIGlzIHBoeXNpY2FsbHkgcHJlc2VudCBvciBwZXJmZWN0bHkgZW11bGF0ZWQuIFByb2JlcyBmYWlsIGJlY2F1c2UgdGhleSBvZnRlbiBpbnZvbHZlIHJlYWRpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzLCB3YWl0aW5nIGZvciBzcGVjaWZpYyBiaXRzIHRvIGJlIHNldCwgYW5kIG90aGVyIGhhcmR3YXJlLWRlcGVuZGVudCBvcGVyYXRpb25zLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYGhjbGdlX21haW4uY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqVHJhY2luZyBEb3duIHRoZSBQRiBEcml2ZXIgaW4gdGhlIEhDTEdFIENvZGViYXNlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHByaW1hcnkgUEYgKFBoeXNpY2FsIEZ1bmN0aW9uKSBkcml2ZXIgaXMgd2l0aGluIHRoZSBIQ0xHRSBjb2RlLiBJbml0aWFsbHksIG15IGluc3RpbmN0cyBwaW5nZWQgYGhjbGdlX21haW4uY2AgYXMgYSBsaWtlbHkgY29udGVuZGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGZvciBkcml2ZXIgZnVuY3Rpb25hbGl0eS4gQnV0LCBJIGtub3cgdGhlc2UgdGhpbmdzIGNhbiBiZSBzdHJ1Y3R1cmVkIGluIGEgdmFyaWV0eSBvZiB3YXlzLCBzbyBJIHNob3VsZG4mIzM5O3QganVtcCB0byBjb25jbHVzaW9ucy4gSXQmIzM5O3MgYmVzdCB0byB2ZXJpZnkgdGhpcyBieSBjaGVja2luZyBvdGhlciBjYW5kaWRhdGVzLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gbG9vayBhdCBgaG5zM19lbmV0LmNgIGFzIHdlbGwuIFRoYXQgZmlsZSBuYW1lIGxvb2tzIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlIHRvIGJlIGEgbW9yZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBvZiBldGhlcm5ldCBmdW5jdGlvbnMuIEdpdmVuIHRoZSBITlMzIGFyY2hpdGVjdHVyZSwgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSB0aGF0IGl0cyBoYW5kbGluZyBzb21lIHBvcnRpb24gb2YgdGhlIFBGIGRyaXZlci4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBhbmQgY29uZmlybSB3aGljaCBmaWxlIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBQRi1yZWxhdGVkIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYm90aCBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGFuZCBkYXRhIHBsYW5lIGludGVyYWN0aW9ucyBhbmQgcGluIGRvd24gdGhlIHRydWUgUEYgZHJpdmVyIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzEzMD1zdGF0aWMgdm9pZCBobnMzX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDU6LyogaG5zM19wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ2LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDgtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDk6ICogaG5zM19wcm9iZSBpbml0aWFsaXplcyBhIFBGIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTAtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgUEYgcHJpdmF0ZSBzdHJ1Y3R1cmUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNTU6c3RhdGljIGludCBobnMzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzM1Nz1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaG5zM19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1OS1cdC5pZF90YWJsZSA9IGhuczNfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMzNjA6XHQucHJvYmUgICAgPSBobnMzX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM2MS1cdC5yZW1vdmUgICA9IGhuczNfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTUzNzQ9c3RhdGljIGludCBobnMzX2NsaWVudF9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NDg0LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6NTQ4NTpcdFx0ZGV2X2Vycihwcml2LVx1MDAzZWRldiwgXCYjMzQ7cHJvYmUgcmVnaXN0ZXIgbmV0ZGV2IGZhaWwhXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU0ODYtXHRcdGdvdG8gb3V0X3JlZ19uZXRkZXZfZmFpbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODA5CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgaG5zM19wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGBobnMzX3Byb2JlYCBpcyBhbGwgYWJvdXQuIE5vIGFzc3VtcHRpb25zLCBqdXN0IHB1cmUsIG9iamVjdGl2ZSBhbmFseXNpcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgZ3Jhc3Agb24gaXRzIGZ1bmN0aW9uIGFuZCBwdXJwb3NlLCB3aXRob3V0IGFueSBwcmVjb25jZWl2ZWQgbm90aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRpc3NlY3QgYW5kIGFuYWx5emUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGlzIHRoaW5nICphY3R1YWxseSogZG9lcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxNTU6XHRzdGF0aWMgaW50IGhuczNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4zMTU2Olx0e1xuMzE1NzpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2O1xuMzE1ODpcdFx0aW50IHJldDtcbjMxNTk6XHRcbjMxNjA6XHRcdGFlX2RldiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCphZV9kZXYpLCBHRlBfS0VSTkVMKTtcbjMxNjE6XHRcdGlmICghYWVfZGV2KVxuMzE2MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMxNjM6XHRcbjMxNjQ6XHRcdGFlX2Rldi1cdTAwM2VwZGV2ID0gcGRldjtcbjMxNjU6XHRcdGFlX2Rldi1cdTAwM2VmbGFnID0gZW50LVx1MDAzZWRyaXZlcl9kYXRhO1xuMzE2NjpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFlX2Rldik7XG4zMTY3Olx0XG4zMTY4Olx0XHRyZXQgPSBobmFlM19yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcbjMxNjk6XHRcdGlmIChyZXQpXG4zMTcwOlx0XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbjMxNzE6XHRcbjMxNzI6XHRcdHJldHVybiByZXQ7XG4zMTczOlx0fVxuMzE3NDpcdFxuMzE3NTpcdC8qKlxuMzE3NjpcdCAqIGhuczNfY2xlYW5fdmZfY29uZmlnXG4zMTc3Olx0ICogQHBkZXY6IHBvaW50ZXIgdG8gYSBwY2lfZGV2IHN0cnVjdHVyZVxuMzE3ODpcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIGFsbG9jYXRlZFxuMzE3OTpcdCAqXG4zMTgwOlx0ICogQ2xlYW4gcmVzaWR1YWwgdmYgY29uZmlnIGFmdGVyIGRpc2FibGUgc3Jpb3ZcbjMxODE6XHQgKiovXG4zMTgyOlx0c3RhdGljIHZvaWQgaG5zM19jbGVhbl92Zl9jb25maWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuMzE4MzpcdHtcbjMxODQ6XHRcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbjMxODU6XHRcbjMxODY6XHRcdGlmIChhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWNsZWFuX3ZmX2NvbmZpZylcbjMxODc6XHRcdFx0YWVfZGV2LVx1MDAzZW9wcy1cdTAwM2VjbGVhbl92Zl9jb25maWcoYWVfZGV2LCBudW1fdmZzKTtcbjMxODg6XHR9XG4zMTg5Olx0XG4zMTkwOlx0LyogaG5zM19yZW1vdmUgLSBEZXZpY2UgcmVtb3ZhbCByb3V0aW5lXG4zMTkxOlx0ICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG4zMTkyOlx0ICovXG4zMTkzOlx0c3RhdGljIHZvaWQgaG5zM19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4zMTk0Olx0e1xuMzE5NTpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMzE5NjpcdFxuMzE5NzpcdFx0aWYgKGhuczNfaXNfcGh5c19mdW5jKHBkZXYpIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSlcbjMxOTg6XHRcdFx0aG5zM19kaXNhYmxlX3NyaW92KHBkZXYpO1xuMzE5OTpcdFxuMzIwMDpcdFx0aG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcbjMyMDE6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbjMyMDI6XHR9XG4zMjAzOlx0XG4zMjA0Olx0LyoqXG4zMjA1Olx0ICogaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlXG4zMjA2Olx0ICogQHBkZXY6IHBvaW50ZXIgdG8gYSBwY2lfZGV2IHN0cnVjdHVyZVxuMzIwNzpcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIHRvIGFsbG9jYXRlXG4zMjA4Olx0ICpcbjMyMDk6XHQgKiBFbmFibGUgb3IgY2hhbmdlIHRoZSBudW1iZXIgb2YgVkZzLiBDYWxsZWQgd2hlbiB0aGUgdXNlciB1cGRhdGVzIHRoZSBudW1iZXJcbjMyMTA6XHQgKiBvZiBWRnMgaW4gc3lzZnMuXG4zMjExOlx0ICoqL1xuMzIxMjpcdHN0YXRpYyBpbnQgaG5zM19wY2lfc3Jpb3ZfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtX3ZmcylcbjMyMTM6XHR7XG4zMjE0Olx0XHRpbnQgcmV0O1xuMzIxNTpcdFxuMzIxNjpcdFx0aWYgKCEoaG5zM19pc19waHlzX2Z1bmMocGRldikgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BDSV9JT1YpKSkge1xuMzIxNzpcdFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2FuIG5vdCBjb25maWcgU1JJT1ZcXG5cJiMzNDspO1xuMzIxODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMyMTk6XHRcdH1cbjMyMjA6XHRcbjMyMjE6XHRcdGlmIChudW1fdmZzKSB7XG4zMjIyOlx0XHRcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7XG4zMjIzOlx0XHRcdGlmIChyZXQpXG4zMjI0Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7U1JJT1YgZW5hYmxlIGZhaWxlZCAlZFxcblwmIzM0OywgcmV0KTtcbjMyMjU6XHRcdFx0ZWxzZVxuMzIyNjpcdFx0XHRcdHJldHVybiBudW1fdmZzO1xuMzIyNzpcdFx0fSBlbHNlIGlmICghcGNpX3Zmc19hc3NpZ25lZChwZGV2KSkge1xuMzIyODpcdFx0XHRpbnQgbnVtX3Zmc19wcmUgPSBwY2lfbnVtX3ZmKHBkZXYpO1xuMzIyOTpcdFxuMzIzMDpcdFx0XHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcbjMyMzE6XHRcdFx0aG5zM19jbGVhbl92Zl9jb25maWcocGRldiwgbnVtX3Zmc19wcmUpO1xuMzIzMjpcdFx0fSBlbHNlIHtcbjMyMzM6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4zMjM0Olx0XHRcdFx0IFwmIzM0O1VuYWJsZSB0byBmcmVlIFZGcyBiZWNhdXNlIHNvbWUgYXJlIGFzc2lnbmVkIHRvIFZNcy5cXG5cJiMzNDspO1xuMzIzNTpcdFx0fVxuMzIzNjpcdFxuMzIzNzpcdFx0cmV0dXJuIDA7XG4zMjM4Olx0fVxuMzIzOTpcdFxuMzI0MDpcdHN0YXRpYyB2b2lkIGhuczNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4zMjQxOlx0e1xuMzI0MjpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuMzI0MzpcdFxuMzI0NDpcdFx0aG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcbjMyNDU6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcbjMyNDY6XHRcbjMyNDc6XHRcdGlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRilcbjMyNDg6XHRcdFx0cGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpO1xuMzI0OTpcdH1cbjMyNTA6XHRcbjMyNTE6XHRzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGhuczNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4zMjUyOlx0e1xuMzI1MzpcdFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4zMjU0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTkyCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgYGhuczNfcHJvYmVgIEZ1bmN0aW9uKioKClJpZ2h0LCBzbyBgaG5zM19wcm9iZWAgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3Qgb24gdGhlIHN1cmZhY2UuIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgaXQgbG9va3MgbGlrZSBhbGwgaXQmIzM5O3MgZG9pbmcgaXMgYWxsb2NhdGluZyBhbiBgYWVfZGV2YCBzdHJ1Y3R1cmUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcGFzc2luZyBpdCBvZmYgdG8gYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHBhdHRlcm4sIHVzdWFsbHkgaW5kaWNhdGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBzeXN0ZW0uIEl0JiMzOTtzIGFsbW9zdCB0b28gc2ltcGxlLCB3aGljaCBpcyBtYWtpbmcgbWUgd2FudCB0byBkZWx2ZSBkZWVwZXIsIHNwZWNpZmljYWxseSBpbnRvIHdoYXQgYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHRvIHRoaXMgYWxsb2NhdGVkIGBhZV9kZXZgIG5vdywgYW5kIHdoYXQgdGhhdCByZWdpc3RyYXRpb24gcHJvY2VzcyBlbnRhaWxzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBsaWtlbHkgcmVzaWRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG5hZTNfcmVnaXN0ZXJfYWVfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYz0zMDQ9RVhQT1JUX1NZTUJPTChobmFlM191bnJlZ2lzdGVyX2FlX2FsZ28pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zMDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjMwNjovKiBobmFlM19yZWdpc3Rlcl9hZV9kZXYgLSByZWdpc3RlcnMgYSBBRSBkZXZpY2UgdG8gaG5hZTMgZnJhbWV3b3JrXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jLTMwNy0gKiBAYWVfZGV2OiB0aGUgQUUgZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zMDktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjMxMDppbnQgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzExLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jLTM2OS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjM3MDpFWFBPUlRfU1lNQk9MKGhuYWUzX3JlZ2lzdGVyX2FlX2Rldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jLTM3MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oPTk3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaG5hZTNfZm9ybWF0X21hY19hZGRyKGNoYXIgKmZvcm1hdF9tYWNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTk4MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6OTgxOmludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtOTgyLXZvaWQgaG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTU1PXN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE2ODpcdHJldCA9IGhuYWUzX3JlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE2OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTcxCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBSZWdpc3RlcmluZyBhIERldmljZSoqCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgZnVuY3Rpb24uIFRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciwgd2VsbCwgKnJlZ2lzdGVyaW5nKiBhIGRldmljZSwgc3BlY2lmaWNhbGx5IG9uZSByZWxhdGVkIHRvIHRoZSBobmFlMyBkcml2ZXIgYW5kLCBJJiMzOTttIGd1ZXNzaW5nLCBhbiAmIzM0O0FFJiMzNDsgZGV2aWNlIHR5cGUuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBhY2NlbGVyYXRvciBvciBjb3Byb2Nlc3NvciBvbiB0aGUgcGxhdGZvcm0uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgcmVnaXN0cmF0aW9uIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBsaWtlbHkgaW52b2x2ZXM6CgoqICAgKipSZXNvdXJjZSBBbGxvY2F0aW9uOioqIERlZmluaW5nIGFuZCBvYnRhaW5pbmcgbmVjZXNzYXJ5IHJlc291cmNlcyBmcm9tIHRoZSBrZXJuZWwgLSBtZW1vcnkgcmVnaW9ucywgaW50ZXJydXB0IGxpbmVzLCBETUEgY2hhbm5lbHMsIGV0Yy4gLSBhbGwgb2Ygd2hpY2ggYXJlIGNyaXRpY2FsIGZvciB0aGUgaGFyZHdhcmUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzdGVtLiBJIGhhdmUgdG8gdGhpbmsgYWJvdXQgaG93IHRoaXMgZGV2aWNlIHdvdWxkIGFjY2VzcyBzaGFyZWQgcmVzb3VyY2VzLgoqICAgKipEcml2ZXIgSW5pdGlhbGl6YXRpb246KiogU2V0dGluZyB1cCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIgdG8gbWFuYWdlIHRoaXMgcGFydGljdWxhciBkZXZpY2UgaW5zdGFuY2UuIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2U6IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLCBwb2ludGVycyB0byB0aGUgZGV2aWNlJiMzOTtzIGhhcmR3YXJlIHJlZ2lzdGVycywgYW5kIGludGVybmFsIHN0YXRlIHZhcmlhYmxlcy4KKiAgICoqS2VybmVsIEludGVncmF0aW9uOioqIFJlZ2lzdGVyaW5nIHRoZSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUga2VybmVsIHN1YnN5c3RlbXMsIHdoaWNoIG9mdGVuIG1lYW5zIHNldHRpbmcgdXAgZGV2aWNlIG5vZGVzLCByZWdpc3RlcmluZyB3aXRoIHBvd2VyIG1hbmFnZW1lbnQsIGFuZCBwcm92aWRpbmcgY2FsbGJhY2tzIHRvIHRoZSBzeXN0ZW0uIFRoaXMgbGlrZWx5IGludm9sdmVzIHRoZSBjcmVhdGlvbiBvZiBhIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBtYXliZSBldmVuIGEgY2hhcmFjdGVyIG9yIGJsb2NrIGRldmljZS4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGV4Y2VwdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIHRoZSBjb25kaXRpb25zLgoKSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHNlcmllcyBvZiBjYWxscyB0byBrZXJuZWwgQVBJcyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gKGxpa2UgYGttYWxsb2NgLCBgaW9yZW1hcGAsIGV0Yy4pLCBpbnRlcnJ1cHQgbWFuYWdlbWVudCAoYHJlcXVlc3RfaXJxYCwgYGZyZWVfaXJxYCksIGRldmljZSB0cmVlIGxvb2t1cHMgKGlmIGFwcGxpY2FibGUpLCBhbmQgcG90ZW50aWFsbHkgYSBjYWxsIHRvIGEgcGxhdGZvcm0tc3BlY2lmaWMgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJIGFtIGFsc28gbG9va2luZyB0byBzZWUgaG93IGRldmljZS1zcGVjaWZpYyBkYXRhIGlzIGxpbmtlZCB0byB0aGUga2VybmVsIGRhdGEsIGxpa2VseSB3aXRoIHNvbWUgc3RydWN0dXJlIHBvaW50ZXIuIFRoZSBmdW5jdGlvbiBwcm9iYWJseSBhbHNvIHdpbGwgaGFuZGxlIHNvbWUgc29ydCBvZiBjbGVhbnVwIHByb2Nlc3MsIGluIGNhc2UgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscyBtaWR3YXksIHRvIGF2b2lkIHJlc291cmNlIGxlYWtzLiBOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgZGV0YWlscyBhbmQgc3RhcnQgcmVhZGluZyB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRpbnQgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiAzMTE6XHR7XG4gMzEyOlx0XHRjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQ7XG4gMzEzOlx0XHRzdHJ1Y3QgaG5hZTNfYWVfYWxnbyAqYWVfYWxnbztcbiAzMTQ6XHRcdHN0cnVjdCBobmFlM19jbGllbnQgKmNsaWVudDtcbiAzMTU6XHRcdGludCByZXQ7XG4gMzE2Olx0XG4gMzE3Olx0XHRpZiAoIWFlX2RldilcbiAzMTg6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4gMzE5Olx0XG4gMzIwOlx0XHRtdXRleF9sb2NrKFx1MDAyNmhuYWUzX2NvbW1vbl9sb2NrKTtcbiAzMjE6XHRcbiAzMjI6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2YWVfZGV2LVx1MDAzZW5vZGUsIFx1MDAyNmhuYWUzX2FlX2Rldl9saXN0KTtcbiAzMjM6XHRcbiAzMjQ6XHRcdC8qIENoZWNrIGlmIHRoZXJlIGFyZSBtYXRjaGVkIGFlX2FsZ28gKi9cbiAzMjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoYWVfYWxnbywgXHUwMDI2aG5hZTNfYWVfYWxnb19saXN0LCBub2RlKSB7XG4gMzI2Olx0XHRcdGlkID0gcGNpX21hdGNoX2lkKGFlX2FsZ28tXHUwMDNlcGRldl9pZF90YWJsZSwgYWVfZGV2LVx1MDAzZXBkZXYpO1xuIDMyNzpcdFx0XHRpZiAoIWlkKVxuIDMyODpcdFx0XHRcdGNvbnRpbnVlO1xuIDMyOTpcdFxuIDMzMDpcdFx0XHRpZiAoIWFlX2FsZ28tXHUwMDNlb3BzKSB7XG4gMzMxOlx0XHRcdFx0ZGV2X2VycihcdTAwMjZhZV9kZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O2FlX2FsZ28gb3BzIGFyZSBudWxsXFxuXCYjMzQ7KTtcbiAzMzI6XHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiAzMzM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4gMzM0Olx0XHRcdH1cbiAzMzU6XHRcdFx0YWVfZGV2LVx1MDAzZW9wcyA9IGFlX2FsZ28tXHUwMDNlb3BzO1xuIDMzNjpcdFxuIDMzNzpcdFx0XHRyZXQgPSBhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWluaXRfYWVfZGV2KGFlX2Rldik7XG4gMzM4Olx0XHRcdGlmIChyZXQpIHtcbiAzMzk6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNmFlX2Rldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiAzNDA6XHRcdFx0XHRcdFwmIzM0O2luaXQgYWVfZGV2IGVycm9yLCByZXQgPSAlZFxcblwmIzM0OywgcmV0KTtcbiAzNDE6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4gMzQyOlx0XHRcdH1cbiAzNDM6XHRcbiAzNDQ6XHRcdFx0LyogYWVfZGV2IGluaXQgc2hvdWxkIHNldCBmbGFnICovXG4gMzQ1Olx0XHRcdGhuYWUzX3NldF9iaXQoYWVfZGV2LVx1MDAzZWZsYWcsIEhOQUUzX0RFVl9JTklURURfQiwgMSk7XG4gMzQ2Olx0XHRcdGJyZWFrO1xuIDM0NzpcdFx0fVxuIDM0ODpcdFxuIDM0OTpcdFx0LyogY2hlY2sgdGhlIGNsaWVudCBsaXN0IGZvciB0aGUgbWF0Y2ggd2l0aCB0aGlzIGFlX2RldiB0eXBlIGFuZFxuIDM1MDpcdFx0ICogaW5pdGlhbGl6ZSB0aGUgZmlndXJlIG91dCBjbGllbnQgaW5zdGFuY2VcbiAzNTE6XHRcdCAqL1xuIDM1MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsIFx1MDAyNmhuYWUzX2NsaWVudF9saXN0LCBub2RlKSB7XG4gMzUzOlx0XHRcdHJldCA9IGhuYWUzX2luaXRfY2xpZW50X2luc3RhbmNlKGNsaWVudCwgYWVfZGV2KTtcbiAzNTQ6XHRcdFx0aWYgKHJldClcbiAzNTU6XHRcdFx0XHRkZXZfZXJyKFx1MDAyNmFlX2Rldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiAzNTY6XHRcdFx0XHRcdFwmIzM0O21hdGNoIGFuZCBpbnN0YW50aWF0aW9uIGZhaWxlZCwgcmV0ID0gJWRcXG5cJiMzNDssXG4gMzU3Olx0XHRcdFx0XHRyZXQpO1xuIDM1ODpcdFx0fVxuIDM1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg3NgoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgY29kZSBzbmlwcGV0LCBleHByZXNzZWQgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkluaXRpYWxpc2luZyB0aGUgQUUgRGV2aWNlKioKClJpZ2h0LCBzbyBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBhZV9kZXYtJmd0O29wcy0mZ3Q7aW5pdF9hZV9kZXYoYWVfZGV2KWAuICBMb29rcyBsaWtlIHdlJiMzOTtyZSBjYWxsaW5nIGEgZnVuY3Rpb24gcG9pbnRlciwgYGluaXRfYWVfZGV2YCwgd2hpY2ggaXMgcGFydCBvZiBhIHNldCBvZiBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhbiBgYWVfZGV2YCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2U7IGEgZ2VuZXJpYyBpbnRlcmZhY2Ugd2l0aCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGBpbml0X2FlX2RldmAgYWN0dWFsbHkgKmRvZXMqIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KCkJhc2VkIG9uIHRoZSBmaWxlIHJlZmVyZW5jZSAmIzM0O2hjbGdlX21haW4uYyYjMzQ7LCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIEhDTEdFIChsaWtlbHkgYSBoYXJkd2FyZSBjb21wb25lbnQgb3IgZHJpdmVyKS4gQW5kIHRoZW4gSSBzZWUgdGhhdCBgaW5pdF9hZV9kZXZgIGlzIHJlc29sdmVkIHRvIGBoY2xnZV9pbml0X2FlX2RldmAuIEFoYSEgU28sIHdpdGhpbiB0aGUgSENMR0UgY29kZSwgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBBRSAocHJlc3VtYWJseSAmIzM0O0F1dG8gRXhwb3N1cmUmIzM0OyBvciBhIHNpbWlsYXIgZnVuY3Rpb24pIGlzIGBoY2xnZV9pbml0X2FlX2RldmAuIFRoaXMgd2lsbCBjb250YWluIGFsbCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgc2V0dGluZ3MsIGNsb2NrIGNvbmZpZ3VyYXRpb25zLCBETUEgc2V0dXAsIGFuZCBldmVyeXRoaW5nIGVsc2UgbmVlZGVkIHRvIGJyaW5nIHRoZSBBRSBkZXZpY2UgdXAgdG8gYSB1c2FibGUgc3RhdGUgd2l0aGluIHRoZSBIQ0xHRSBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozk2MDA6XHRcbjk2MDE6XHRcdHJldCA9IGhjbGdlX21hY19pbml0KGhkZXYpO1xuOTYwMjpcdFx0aWYgKHJldCkge1xuOTYwMzpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtNYWMgaW5pdCBlcnJvciwgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG45NjA0Olx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjA1Olx0XHR9XG45NjA2Olx0XG45NjA3Olx0XHRyZXQgPSBoY2xnZV9jb25maWdfdHNvKGhkZXYsIEhDTEdFX1RTT19NU1NfTUlOLCBIQ0xHRV9UU09fTVNTX01BWCk7XG45NjA4Olx0XHRpZiAocmV0KSB7XG45NjA5Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0VuYWJsZSB0c28gZmFpbCwgcmV0ID0lZFxcblwmIzM0OywgcmV0KTtcbjk2MTA6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2MTE6XHRcdH1cbjk2MTI6XHRcbjk2MTM6XHRcdHJldCA9IGhjbGdlX2NvbmZpZ19ncm8oaGRldik7XG45NjE0Olx0XHRpZiAocmV0KVxuOTYxNTpcdFx0XHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xuOTYxNjpcdFxuOTYxNzpcdFx0cmV0ID0gaGNsZ2VfaW5pdF92bGFuX2NvbmZpZyhoZGV2KTtcbjk2MTg6XHRcdGlmIChyZXQpIHtcbjk2MTk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkxBTiBpbml0IGZhaWwsIHJldCA9JWRcXG5cJiMzNDssIHJldCk7XG45NjIwOlx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjIxOlx0XHR9XG45NjIyOlx0XG45NjIzOlx0XHRyZXQgPSBoY2xnZV90bV9zY2hkX2luaXQoaGRldik7XG45NjI0Olx0XHRpZiAocmV0KSB7XG45NjI1Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3RtIHNjaGQgaW5pdCBmYWlsLCByZXQgPSVkXFxuXCYjMzQ7LCByZXQpO1xuOTYyNjpcdFx0XHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xuOTYyNzpcdFx0fVxuOTYyODpcdFxuOTYyOTpcdFx0cmV0ID0gaGNsZ2VfY29tbV9yc3NfaW5pdF9jZmcoXHUwMDI2aGRldi1cdTAwM2V2cG9ydC1cdTAwM2VuaWMsIGhkZXYtXHUwMDNlYWVfZGV2LFxuOTYzMDpcdFx0XHRcdFx0ICAgICAgXHUwMDI2aGRldi1cdTAwM2Vyc3NfY2ZnKTtcbjk2MzE6XHRcdGlmIChyZXQpIHtcbjk2MzI6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgcnNzIGNmZywgcmV0ID0gJWRcXG5cJiMzNDssIHJldCk7XG45NjMzOlx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjM0Olx0XHR9XG45NjM1Olx0XG45NjM2Olx0XHRyZXQgPSBoY2xnZV9yc3NfaW5pdF9odyhoZGV2KTtcbjk2Mzc6XHRcdGlmIChyZXQpIHtcbjk2Mzg6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7UnNzIGluaXQgZmFpbCwgcmV0ID0lZFxcblwmIzM0OywgcmV0KTtcbjk2Mzk6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2NDA6XHRcdH1cbjk2NDE6XHRcbjk2NDI6XHRcdHJldCA9IGluaXRfbWdyX3RibChoZGV2KTtcbjk2NDM6XHRcdGlmIChyZXQpIHtcbjk2NDQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7bWFuYWdlciB0YWJsZSBpbml0IGZhaWwsIHJldCA9JWRcXG5cJiMzNDssIHJldCk7XG45NjQ1Olx0XHRcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XG45NjQ2Olx0XHR9XG45NjQ3Olx0XG45NjQ4Olx0XHRyZXQgPSBoY2xnZV9pbml0X2ZkX2NvbmZpZyhoZGV2KTtcbjk2NDk6XHRcdGlmIChyZXQpIHtcbjk2NTA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbjk2NTE6XHRcdFx0XHRcJiMzNDtmZCB0YWJsZSBpbml0IGZhaWwsIHJldD0lZFxcblwmIzM0OywgcmV0KTtcbjk2NTI6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2NTM6XHRcdH1cbjk2NTQ6XHRcbjk2NTU6XHRcdHJldCA9IGhjbGdlX3B0cF9pbml0KGhkZXYpO1xuOTY1NjpcdFx0aWYgKHJldClcbjk2NTc6XHRcdFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcbjk2NTg6XHRcbjk2NTk6XHRcdHJldCA9IGhjbGdlX3VwZGF0ZV9wb3J0X2luZm8oaGRldik7XG45NjYwOlx0XHRpZiAocmV0KVxuOTY2MTpcdFx0XHRnb3RvIGVycl9wdHBfdW5pbml0O1xuOTY2MjpcdFxuOTY2MzpcdFx0aWYgKGhkZXYtXHUwMDNlaHcubWFjLm1lZGlhX3R5cGUgIT0gSE5BRTNfTUVESUFfVFlQRV9DT1BQRVIpIHtcbjk2NjQ6XHRcdFx0aGRldi1cdTAwM2Vody5tYWMucmVxX2F1dG9uZWcgPSBoZGV2LVx1MDAzZWh3Lm1hYy5hdXRvbmVnO1xuOTY2NTpcdFx0XHRpZiAoaGRldi1cdTAwM2Vody5tYWMuYXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgXHUwMDI2XHUwMDI2XG45NjY2Olx0XHRcdCAgICBoZGV2LVx1MDAzZWh3Lm1hYy5zcGVlZCAhPSBTUEVFRF9VTktOT1dOKVxuOTY2NzpcdFx0XHRcdGhkZXYtXHUwMDNlaHcubWFjLnJlcV9zcGVlZCA9IGhkZXYtXHUwMDNlaHcubWFjLnNwZWVkO1xuOTY2ODpcdFx0fVxuOTY2OTpcdFxuOTY3MDpcdFx0cmV0ID0gaGNsZ2Vfc2V0X2F1dG9uZWdfc3BlZWRfZHVwKGhkZXYpO1xuOTY3MTpcdFx0aWYgKHJldCkge1xuOTY3MjpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuOTY3MzpcdFx0XHRcdFwmIzM0O2ZhaWxlZCB0byBzZXQgYXV0b25lZyBzcGVlZCBkdXBsZXgsIHJldCA9ICVkXFxuXCYjMzQ7LCByZXQpO1xuOTY3NDpcdFx0XHRnb3RvIGVycl9wdHBfdW5pbml0O1xuOTY3NTpcdFx0fVxuOTY3NjpcdFxuOTY3NzpcdFx0SU5JVF9LRklGTyhoZGV2LVx1MDAzZW1hY190bmxfbG9nKTtcbjk2Nzg6XHRcbjk2Nzk6XHRcdGhjbGdlX2RjYl9vcHNfc2V0KGhkZXYpO1xuOTY4MDpcdFxuOTY4MTpcdFx0dGltZXJfc2V0dXAoXHUwMDI2aGRldi1cdTAwM2VyZXNldF90aW1lciwgaGNsZ2VfcmVzZXRfdGltZXIsIDApO1xuOTY4MjpcdFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2aGRldi1cdTAwM2VzZXJ2aWNlX3Rhc2ssIGhjbGdlX3NlcnZpY2VfdGFzayk7XG45NjgzOlx0XG45Njg0Olx0XHRoY2xnZV9jbGVhcl9hbGxfZXZlbnRfY2F1c2UoaGRldik7XG45Njg1Olx0XHRoY2xnZV9jbGVhcl9yZXNldHRpbmdfc3RhdGUoaGRldik7XG45Njg2Olx0XG45Njg3Olx0XHQvKiBMb2cgYW5kIGNsZWFyIHRoZSBodyBlcnJvcnMgdGhvc2UgYWxyZWFkeSBvY2N1cnJlZCAqL1xuOTY4ODpcdFx0aWYgKGhuYWUzX2Rldl9yYXNfaW1wX3N1cHBvcnRlZChoZGV2KSlcbjk2ODk6XHRcdFx0aGNsZ2VfaGFuZGxlX29jY3VycmVkX2Vycm9yKGhkZXYpO1xuOTY5MDpcdFx0ZWxzZVxuOTY5MTpcdFx0XHRoY2xnZV9oYW5kbGVfYWxsX2huc19od19lcnJvcnMoYWVfZGV2KTtcbjk2OTI6XHRcbjk2OTM6XHRcdC8qIHJlcXVlc3QgZGVsYXllZCByZXNldCBmb3IgdGhlIGVycm9yIHJlY292ZXJ5IGJlY2F1c2UgYW4gaW1tZWRpYXRlXG45Njk0Olx0XHQgKiBnbG9iYWwgcmVzZXQgb24gYSBQRiBhZmZlY3RpbmcgcGVuZGluZyBpbml0aWFsaXphdGlvbiBvZiBvdGhlciBQRnNcbjk2OTU6XHRcdCAqL1xuOTY5NjpcdFx0aWYgKGFlX2Rldi1cdTAwM2Vod19lcnJfcmVzZXRfcmVxKSB7XG45Njk3Olx0XHRcdGVudW0gaG5hZTNfcmVzZXRfdHlwZSByZXNldF9sZXZlbDtcbjk2OTg6XHRcbjk2OTk6XHRcdFx0cmVzZXRfbGV2ZWwgPSBoY2xnZV9nZXRfcmVzZXRfbGV2ZWwoYWVfZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyNQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gTG9va2luZyBjbG9zZXIgYXQgdGhpcyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZ1bmN0aW9uLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCYjMzk7cyBkb2luZyBhICpsb3QqIG9mIGxvdy1sZXZlbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSBzZWUgaXQgc2VuZGluZyBhIGJ1bmNoIG9mIGNvbW1hbmRzIGRpcmVjdGx5IHRvIHRoZSBoYXJkd2FyZSDigJMgdXNpbmcgYGhjbGdlX2NtZF9zZW5kYCwgbmF0dXJhbGx5LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCBvciBpc24mIzM5O3QgcmVzcG9uZGluZywgdGhvc2UgY29tbWFuZCB0cmFuc21pc3Npb25zIGFyZSBnb2luZyB0byB0aW1lIG91dCwgb3Igc2ltcGx5IGZhaWwgb3V0cmlnaHQuIFdlJiMzOTtyZSBnb2luZyB0byBnZXQgc29tZSB0ZWxsdGFsZSBlcnJvcnMuCgpTbywgd2hlcmUgZG9lcyB0aGF0IGxlYWQ/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGhjbGdlX2NtZF9zZW5kYCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBhbmQgaW1wb3J0YW50bHksIGl0cyBlcnJvciBoYW5kbGluZy4gVGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgbGlrZWx5IGZpbmQgdGhlIGtleSB0byBwaW5wb2ludGluZyB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgaGFyZHdhcmUtcmVsYXRlZCBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hjbGdlX2NtZF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgaW5pdGlhbGx5IGZvY3VzZWQgb24gYGhjbGdlX2NtZC5jYCwgYnV0IHNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHF1aXRlIHJpZ2h0LiBJIGhhdmUgYSBodW5jaCB0aGF0IHRoZSBmdW5jdGlvbiBJJiMzOTttIGxvb2tpbmcgZm9yLCBzcGVjaWZpY2FsbHkgdGhlIGBoY2xnZV9jbWRfc2VuZGAgY2FsbCwgbWlnaHQgYmUgbG9jYXRlZCBpbiBhIGRpZmZlcmVudCBmaWxlIGFsdG9nZXRoZXIuIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgc2VhcmNoLiBMZXQgbWUgcGl2b3QgYW5kIGluc3RlYWQgb2YgYXNzdW1pbmcsIGRpcmVjdGx5IHNlYXJjaCBmb3IgdGhlIGZ1bmN0aW9uIGBoY2xnZV9jbWRfc2VuZGAuIFRoaXMgd2lsbCBnaXZlIG1lIGEgbW9yZSBhY2N1cmF0ZSBwaWN0dXJlIG9mIHdoZXJlIGl0JiMzOTtzIGFjdHVhbGx5IGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgdG8gZWZmaWNpZW50bHkgbG9jYXRlIHRoZSByZWxldmFudCBjb2RlIHNlY3Rpb25zIGFuZCBJJiMzOTtsbCBzZWUgd2hhdCB0aGUgcmVzdWx0cyB0ZWxsIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaGNsZ2VfY21kX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmg9OTAyPXN0cnVjdCBoY2xnZV9odztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaDo5MDM6aW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaC05MDQtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0zMDI9c3RhdGljIGNvbnN0IHN0cnVjdCBoY2xnZV9tYWNfbWdyX3RibF9lbnRyeV9jbWQgaGNsZ2VfbWdyX3RhYmxlW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMTktICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMjA6aW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgzMwoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgUmV2aWV3IG9mIGBoY2xnZV9jbWRfc2VuZGAqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgaGNsZ2VfY21kX3NlbmRgIGZ1bmN0aW9uLCBhbmQgSSYjMzk7bSBob21pbmcgaW4gb24gaXRzIGRlZmluaXRpb24gd2l0aGluIGBoY2xnZV9tYWluLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHBvdGVudGlhbCBoZWFkYWNoZXMpIGxpa2VseSByZXNpZGUuIEkmIzM5O20gZXNzZW50aWFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZTsgdW5kZXJzdGFuZGluZyAqaG93KiBhIGNvbW1hbmQgZ2V0cyBzZW50IGlzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5dGhpbmcgZWxzZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIGNvbW1hbmQgYW5kIGNvbnRyb2wgcGF0aC4gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgcGFja2V0IGZvcm1hdHRpbmcsIGhhcmR3YXJlIGludGVyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIHJldHJ5IGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJIGFtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBhbnkgYW5kIGFsbCBjb21tYW5kcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRpbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pXG4gMzIxOlx0e1xuIDMyMjpcdFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aHctXHUwMDNlaHcsIGRlc2MsIG51bSk7XG4gMzIzOlx0fVxuIDMyNDpcdFxuIDMyNTpcdHN0YXRpYyB2b2lkIGhjbGdlX3RyYWNlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4gMzI2Olx0XHRcdFx0XHQgaW50IG51bSwgYm9vbCBpc19zcGVjaWFsKVxuIDMyNzpcdHtcbiAzMjg6XHRcdGludCBpO1xuIDMyOTpcdFxuIDMzMDpcdFx0dHJhY2VfaGNsZ2VfcGZfY21kX3NlbmQoaHcsIGRlc2MsIDAsIG51bSk7XG4gMzMxOlx0XG4gMzMyOlx0XHRpZiAoIWlzX3NwZWNpYWwpIHtcbiAzMzM6XHRcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnVtOyBpJiM0MzsmIzQzOylcbiAzMzQ6XHRcdFx0XHR0cmFjZV9oY2xnZV9wZl9jbWRfc2VuZChodywgXHUwMDI2ZGVzY1tpXSwgaSwgbnVtKTtcbiAzMzU6XHRcdH0gZWxzZSB7XG4gMzM2Olx0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG51bTsgaSYjNDM7JiM0MzspXG4gMzM3Olx0XHRcdFx0dHJhY2VfaGNsZ2VfcGZfc3BlY2lhbF9jbWRfc2VuZChodywgKF9fbGUzMiAqKVx1MDAyNmRlc2NbaV0sXG4gMzM4Olx0XHRcdFx0XHRcdFx0XHRpLCBudW0pO1xuIDMzOTpcdFx0fVxuIDM0MDpcdH1cbiAzNDE6XHRcbiAzNDI6XHRzdGF0aWMgdm9pZCBoY2xnZV90cmFjZV9jbWRfZ2V0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG4gMzQzOlx0XHRcdFx0XHRpbnQgbnVtLCBib29sIGlzX3NwZWNpYWwpXG4gMzQ0Olx0e1xuIDM0NTpcdFx0aW50IGk7XG4gMzQ2Olx0XG4gMzQ3Olx0XHRpZiAoIUhDTEdFX0NPTU1fU0VORF9TWU5DKGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlZmxhZykpKVxuIDM0ODpcdFx0XHRyZXR1cm47XG4gMzQ5Olx0XG4gMzUwOlx0XHR0cmFjZV9oY2xnZV9wZl9jbWRfZ2V0KGh3LCBkZXNjLCAwLCBudW0pO1xuIDM1MTpcdFxuIDM1MjpcdFx0aWYgKCFpc19zcGVjaWFsKSB7XG4gMzUzOlx0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG51bTsgaSYjNDM7JiM0MzspXG4gMzU0Olx0XHRcdFx0dHJhY2VfaGNsZ2VfcGZfY21kX2dldChodywgXHUwMDI2ZGVzY1tpXSwgaSwgbnVtKTtcbiAzNTU6XHRcdH0gZWxzZSB7XG4gMzU2Olx0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG51bTsgaSYjNDM7JiM0MzspXG4gMzU3Olx0XHRcdFx0dHJhY2VfaGNsZ2VfcGZfc3BlY2lhbF9jbWRfZ2V0KGh3LCAoX19sZTMyICopXHUwMDI2ZGVzY1tpXSxcbiAzNTg6XHRcdFx0XHRcdFx0XHQgICAgICAgaSwgbnVtKTtcbiAzNTk6XHRcdH1cbiAzNjA6XHR9XG4gMzYxOlx0XG4gMzYyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBoY2xnZV9jb21tX2NtcV9vcHMgaGNsZ2VfY21xX29wcyA9IHtcbiAzNjM6XHRcdC50cmFjZV9jbWRfc2VuZCA9IGhjbGdlX3RyYWNlX2NtZF9zZW5kLFxuIDM2NDpcdFx0LnRyYWNlX2NtZF9nZXQgPSBoY2xnZV90cmFjZV9jbWRfZ2V0LFxuIDM2NTpcdH07XG4gMzY2Olx0XG4gMzY3Olx0c3RhdGljIGludCBoY2xnZV9tYWNfdXBkYXRlX3N0YXRzX2RlZmVjdGl2ZShzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuIDM2ODpcdHtcbiAzNjk6XHQjZGVmaW5lIEhDTEdFX01BQ19DTURfTlVNIDIxXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTM0CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6CgoqKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gQ2FsbDogaGNsZ2VfY29tbV9jbWRfc2VuZCoqCgpSaWdodCwgc28gdGhlIHN5c3RlbSBpcyBjYWxsaW5nIGBoY2xnZV9jb21tX2NtZF9zZW5kYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IGZ1bmN0aW9uIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29tbWFuZCBzZW5kaW5nLCBhbmQgdGhlICYjMzQ7aGNsZ2UmIzM0OyBwcmVmaXggc3Ryb25nbHkgcG9pbnRzIHRvIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIGEgc3BlY2lmaWMgSGFyZHdhcmUgQ29uZmlndXJhdGlvbiBMYW5ndWFnZSBHRSAoR2xvYmFsIEVudmlyb25tZW50KSBjb21tdW5pY2F0aW9uIG1vZHVsZS4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIGtub3cgdGhlIGxpa2VseSBwdXJwb3NlIGFuZCBzdHJ1Y3R1cmUuCgpEZXBlbmRpbmcgb24gdGhlIHByZXZpb3VzIGNvbnRleHQsIHdoaWNoIEkmIzM5O2xsIGFzc3VtZSBpcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpbywgdGhlIG1vZHVsZSB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggbGlrZWx5IHJlcXVpcmVzIHNwZWNpZmljIG1lc3NhZ2VzIGFuZCBkYXRhIHRvIGJlIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIGRlYnVnZ2luZywgY29uZmlndXJhdGlvbiwgb3IgY29udHJvbD8gS25vd2luZyB0aGF0LCBhbmQgbG9va2luZyBhdCB0aGUgY29tbWFuZCwgSSYjMzk7ZCB0aGVuIGNvbnNpZGVyOiB3aGF0IGRvZXMgdGhlIGNvbW1hbmQgKmRvKj8gSXMgaXQgYSBxdWVyeSwgYSBzZXQgY29tbWFuZCwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gVGhlIG5hdHVyZSBvZiB0aGUgY29tbWFuZCB3b3VsZCBpbmRpY2F0ZSB0byBtZSB3aGF0JiMzOTtzIGdvaW5nIG9uLCBhbmQgZnJvbSB0aGVyZSBJIHdvdWxkIGluZmVyIHRoZSBuZXh0IHN0ZXBzLCBhbmQgcG90ZW50aWFsIGlzc3VlcyBvciBkZXNpZ24gZGVjaXNpb25zLgoKRnJvbSB0aGUgbWVyZSBjYWxsaW5nIG9mIHRoYXQgZnVuY3Rpb24sIEkgY2FuIGluZmVyIGEgY2VydGFpbiBkZWdyZWUgb2YgY29tcGxleGl0eS4gSXQgbXVzdCByZXF1aXJlIGEgc3BlY2lmaWMgZm9ybWF0IG9yIHN0cnVjdHVyZSBvZiBjb21tYW5kcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGxldmVsIG9mIGF1dGhlbnRpY2F0aW9uIG9yIGF1dGhvcml6YXRpb24uIFdoYXQgZGF0YSBpcyBpdCBiZWluZyBzZW50PyBXaGF0IGlzIGl0cyByZXNwb25zZT8gSXMgdGhlcmUgZXJyb3IgaGFuZGxpbmcgYnVpbHQgaW50byB0aGUgc2VuZGluZyBtZWNoYW5pc20sIG9yIGlzIHRoYXQgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbD8gVGhlc2UgYXJlIHNvbWUgb2YgdGhlIG1vc3QgcHJvbWluZW50IHF1ZXN0aW9ucyBJIHdvdWxkIGJlIHN0YXJ0aW5nIHRvIHdvcmsgdGhyb3VnaCB3aGVuIEkgc2VlIHRoaXMgbGluZSBvZiBjb2RlLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBvaW50IGluIHRoZSBzeXN0ZW0mIzM5O3MgZXhlY3V0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoY2xnZV9jb21tX2NtZF9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03OD1pbnQgaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTEwMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MTAxOlx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0xMDItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM9MjI4PWludCBoY2xnZV9jb21tX2NtZF9xdWVyeV92ZXJzaW9uX2FuZF9jYXBhYmlsaXR5KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTIzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MjQwOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTI0MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz00MzU9c3RhdGljIGludCBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDY0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzo0NjU6ICogaGNsZ2VfY29tbV9jbWRfc2VuZCAtIHNlbmQgY29tbWFuZCB0byBjb21tYW5kIHF1ZXVlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2Ni0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNDcyLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDczOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ3NC1cdFx0XHRpbnQgbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTIxLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NTIyOkVYUE9SVF9TWU1CT0xfR1BMKGhjbGdlX2NvbW1fY21kX3NlbmQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy01MjMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaD00ODU9aW50IGhjbGdlX2NvbW1fYWxsb2NfY21kX3F1ZXVlKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgaW50IHJpbmdfdHlwZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oOjQ4NjppbnQgaGNsZ2VfY29tbV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODctXHRcdFx0aW50IG51bSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz04ND1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3RjX21vZGUoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCB1MTYgKnRjX29mZnNldCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTExMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTExOlx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTExMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0xNTE9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc190dXBsZShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjE3NTpcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xNzYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0yNzY9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbmRpcl90YWJsZShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDQtXHRcdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MzA1Olx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMzA2LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zMTc9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbnB1dF90dXBsZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMzODpcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFx1MDAyNmRlc2MsIDEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM9MzgzPWludCBoY2xnZV9jb21tX3NldF9yc3NfYWxnb19rZXkoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBjb25zdCB1OCBoZnVuYyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTQxMS1cdFx0a2V5X29mZnNldCYjNDM7JiM0Mzs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjQxMjpcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTQxMy1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM9NTg9aW50IGhjbGdlX2NvbW1fdHFwc191cGRhdGVfc3RhdHMoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzItXHRcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cdTAwM2VpbmRleCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjczOlx0XHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcdTAwMjZkZXNjLCAxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzQtXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg2LVx0XHRkZXNjLmRhdGFbMF0gPSBjcHVfdG9fbGUzMih0cXAtXHUwMDNlaW5kZXgpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYzo4NzpcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXHUwMDI2ZGVzYywgMSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg4LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jPTM0NDI9aW50IGhjbGdlX2hhbmRsZV92Zl9xdWV1ZV9lcnJfcmFzKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jLTM0NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmM6MzQ2MDpcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoXHUwMDI2aGRldi1cdTAwM2Vody5odywgZGVzYywgMik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfZXJyLmMtMzQ2MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTMyMD1pbnQgaGNsZ2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsIGludCBudW0pXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjMyMjpcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKFx1MDAyNmh3LVx1MDAzZWh3LCBkZXNjLCBudW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMjMtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz01MD1pbnQgaGNsZ2V2Zl9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2V2Zl9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTUxLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzo1MjpcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKFx1MDAyNmh3LVx1MDAzZWh3LCBkZXNjLCBudW0pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTUzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNzQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEcml2ZXIgUHJvYmUgRmFpbHVyZSoqCgpPa2F5LCBzbyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBoYXJkd2FyZSYjMzk7cyBjb21tYW5kIHF1ZXVlLiBNYWtlcyBzZW5zZS4gSWYgdGhlIGhhcmR3YXJlIGlzbiYjMzk7dCByZXNwb25kaW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHRpbWVvdXQgb3IgZXJyb3Igb3V0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpc3N1ZS4gQW5kIGlmIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZW4gYGhjbGdlX2luaXRfYWVfZGV2YCBmYWlscywgYW5kICpib29tKiwgdGhlIGRyaXZlciBwcm9iZSBoaXRzIGEgcm9hZGJsb2NrIGFuZCBmYWlscy4gU3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBmb3IgZGVidWdnaW5nIGRldmljZSBkcml2ZXIgZmFpbHVyZXMuCgpCdXQgd2FpdCBhIG1pbnV0ZeKApnN5ei1wY2kgY2FuIGVtdWxhdGUgUENJIGRldmljZXMsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGEgd2F5IGFyb3VuZCB0aGlzLiBUaGUgY2hhbGxlbmdlIHdpdGggZW11bGF0aW9uLCB0aG91Z2gsIGlzIHRoYXQgc3l6a2FsbGVyIG5lZWRzIHZlcnkgcHJlY2lzZSBpbmZvcm1hdGlvbjogdGhlIGV4YWN0IFBDSSBkZXZpY2UgSUQgYW5kIHRoZSBzcGVjaWZpYyByZWdpc3RlcnMgdG8gZW11bGF0ZS4gSXQmIzM5O3MgYSBzaWduaWZpY2FudCB1bmRlcnRha2luZyB0byBzZXQgdGhhdCB1cCBjb3JyZWN0bHksIGVzcGVjaWFsbHkgd2l0aG91dCB0aGUgaGFyZHdhcmUgZGlyZWN0bHkgcHJlc2VudC4KClNvLCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgYWxyZWFkeSBoYXZlIGEgc3BlY2lmaWMgZW11bGF0aW9uIHNldHVwIGZvciB0aGlzIEhOUzMgZGV2aWNlPyBUaGF0IHdvdWxkIGJlIGEgaHVnZSBzaG9ydGN1dC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIEhOUzMuIFRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcCDigJMgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZSBzeXprYWxsZXIgcmVwb3NpdG9yeSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2huczMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhOUzMgRHJpdmVyIGFuZCBTeXprYWxsZXIgSW50ZWdyYXRpb24qKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB0aGF0IHN5emthbGxlciBkZXNjcmlwdGlvbnMgYXJlbiYjMzk7dCBhY3R1YWxseSAqaW4qIHRoZSBrZXJuZWwgdHJlZSwgcmlnaHQ/IFRoZXkmIzM5O3JlIGV4dGVybmFsLCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoYXQgdGVzdGluZyBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBmaW5kIHNvbWUgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBITlMzIGhhcmR3YXJlIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZj8gSnVzdCB0byBjbGFyaWZ5LCBubywgaXQmIzM5O3MgYSBkZWRpY2F0ZWQgaGFyZHdhcmUgZHJpdmVyLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3IgZnV6emluZzogQ2FuIGV0aHRvb2wgY29tbWFuZHMgZXZlbiBiZSByZWFjaGVkIGlmIHRoZSBkZXZpY2UgcHJvYmUgZmFpbHM/IEl0JiMzOTtzIGhpZ2hseSB1bmxpa2VseSwgSSBiZWxpZXZlLiBUaGUgZXRodG9vbCBjb21tYW5kcyBhcmUgcm91dGVkIHRvIHRoZSBuZXRkZXYsIGFuZCB0aGF0IGBuZXRkZXZgIGlzIG9ubHkgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIHByb2JlLiBTbywgdGhhdCYjMzk7cyBub3QgYSBsaWtlbHkgdnVsbmVyYWJpbGl0eSBwYXRoLiBTdGlsbCwgSSBzaG91bGQgdmVyaWZ5IHByZWNpc2VseSB3aGVyZSBgcmVnaXN0ZXJfbmV0ZGV2YCBpcyBjYWxsZWQgd2l0aGluIHRoZSBkcml2ZXIuIFRoYXTigJlzIHRoZSBuZXh0IHRoaW5nIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl9uZXRkZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz01Mzc0PXN0YXRpYyBpbnQgaG5zM19jbGllbnRfaW5pdChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtNTQ4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjU0ODM6XHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU0ODQtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9NTUxNz1zdGF0aWMgdm9pZCBobnMzX2NsaWVudF91bmluaXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCBib29sIHJlc2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU1MjItXHRpZiAobmV0ZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfVU5JTklUSUFMSVpFRClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjU1MjM6XHRcdHVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NTI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ5NAoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDI0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSE5TMyBDbGllbnQgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gYGhuczNfY2xpZW50X2luaXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgcmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMga2V5LiBCdXQgYGhuczNfY2xpZW50X2luaXRgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGhuYWUzX2luaXRfY2xpZW50X2luc3RhbmNlYC4gQW5kIHRoYXQsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2YCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgaG5zM19wcm9iZWAuIEl0JiMzOTtzIGEgY2hhaW4sIGFuZCB0aGUgc3VjY2VzcyBvZiB0aGUgd2hvbGUgdGhpbmcgcmVsaWVzIG9uIGVhY2ggc3RlcCB3b3JraW5nLgoKVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyBgaGNsZ2VfaW5pdF9hZV9kZXZgLiBJZiAqdGhhdCogZmFpbHMsIHRoZW4gYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgd2lsbCBhbHNvIGZhaWwsIGFuZCB0aGVuIGBobnMzX2NsaWVudF9pbml0YCB3aWxsICpuZXZlciogZ2V0IGNhbGxlZC4gTWVhbmluZyB0aGUgbmV0ZGV2IHdvbiYjMzk7dCBiZSByZWdpc3RlcmVkLiBBbmQgaWYgdGhlIG5ldGRldiBpc24mIzM5O3QgcmVnaXN0ZXJlZCwgbm8gZXRodG9vbCBjb21tYW5kcyBjYW4gYmUgc2VudCB0byBpdC4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4KClNvLCBpbiBhbiBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLCB3aGljaCBhcmUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGlzIHdob2xlIHBhdGggaXMgbGlrZWx5IGRlYWQgb24gYXJyaXZhbC4gVGhlcmUmIzM5O3Mgbm8gYWN0dWFsIEhOUzMgaGFyZHdhcmUgZm9yIGl0IHRvIGNvbW11bmljYXRlIHdpdGguIFRoZSBgaGNsZ2VfaW5pdF9hZV9kZXZgIGNhbGwgaXMgZ29pbmcgdG8gZmFpbCBiZWNhdXNlIGl0IG5lZWRzIHRvIGV4ZWN1dGUgYSBjb21tYW5kIHRocm91Z2ggYGhjbGdlX2NvbW1fY21kX3NlbmRgLiBObyBoYXJkd2FyZSwgbm8gc3VjY2Vzcy4KCldhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBhcmVuJiMzOTt0IEk/IElzIHRoZXJlICphbnkqIGNoYW5jZSB0aGF0IGBoY2xnZV9pbml0X2FlX2RldmAgY291bGQgc3VjY2VlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlPyBJdCYjMzk7cyByYXJlIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgc3VyZS4gVGltZSB0byBjaGVjayBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgYW5kIHNlZSBpZiBpdCBoYXMgc29tZSBraW5kIG9mIGZhbGxiYWNrIG9yIHZpcnR1YWxpemVkIHBhdGguIEJlY2F1c2UgaWYgaXQgZG9lcywgdGhlbiBzb21lIG9yIGFsbCBvZiB0aGlzIGNvdWxkIGJlIHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdCAqIGhjbGdlX2NvbW1fY21kX3NlbmQgLSBzZW5kIGNvbW1hbmQgdG8gY29tbWFuZCBxdWV1ZVxuIDQ2NjpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0XG4gNDY3Olx0ICogQGRlc2M6IHByZWZpbGxlZCBkZXNjcmlwdG9yIGZvciBkZXNjcmliaW5nIHRoZSBjb21tYW5kXG4gNDY4Olx0ICogQG51bSA6IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUgc2VudFxuIDQ2OTpcdCAqXG4gNDcwOlx0ICogVGhpcyBpcyB0aGUgbWFpbiBzZW5kIGNvbW1hbmQgZm9yIGNvbW1hbmQgcXVldWUsIGl0XG4gNDcxOlx0ICogc2VuZHMgdGhlIHF1ZXVlLCBjbGVhbnMgdGhlIHF1ZXVlLCBldGNcbiA0NzI6XHQgKiovXG4gNDczOlx0aW50IGhjbGdlX2NvbW1fY21kX3NlbmQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcbiA0NzQ6XHRcdFx0XHRpbnQgbnVtKVxuIDQ3NTpcdHtcbiA0NzY6XHRcdGJvb2wgaXNfc3BlY2lhbCA9IGhjbGdlX2NvbW1faXNfc3BlY2lhbF9vcGNvZGUobGUxNl90b19jcHUoZGVzYy1cdTAwM2VvcGNvZGUpKTtcbiA0Nzc6XHRcdHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpjc3EgPSBcdTAwMjZody1cdTAwM2VjbXEuY3NxO1xuIDQ3ODpcdFx0aW50IHJldDtcbiA0Nzk6XHRcdGludCBudGM7XG4gNDgwOlx0XG4gNDgxOlx0XHRpZiAoaHctXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfc2VuZClcbiA0ODI6XHRcdFx0aHctXHUwMDNlY21xLm9wcy50cmFjZV9jbWRfc2VuZChodywgZGVzYywgbnVtLCBpc19zcGVjaWFsKTtcbiA0ODM6XHRcbiA0ODQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZody1cdTAwM2VjbXEuY3NxLmxvY2spO1xuIDQ4NTpcdFxuIDQ4NjpcdFx0aWYgKHRlc3RfYml0KEhDTEdFX0NPTU1fU1RBVEVfQ01EX0RJU0FCTEUsIFx1MDAyNmh3LVx1MDAzZWNvbW1fc3RhdGUpKSB7XG4gNDg3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EubG9jayk7XG4gNDg4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNDg5Olx0XHR9XG4gNDkwOlx0XG4gNDkxOlx0XHRpZiAobnVtIFx1MDAzZSBoY2xnZV9jb21tX3Jpbmdfc3BhY2UoXHUwMDI2aHctXHUwMDNlY21xLmNzcSkpIHtcbiA0OTI6XHRcdFx0LyogSWYgQ01EUSByaW5nIGlzIGZ1bGwsIFNXIEhFQUQgYW5kIEhXIEhFQUQgbWF5IGJlIGRpZmZlcmVudCxcbiA0OTM6XHRcdFx0ICogbmVlZCB1cGRhdGUgdGhlIFNXIEhFQUQgcG9pbnRlciBjc3EtXHUwMDNlbmV4dF90b19jbGVhblxuIDQ5NDpcdFx0XHQgKi9cbiA0OTU6XHRcdFx0Y3NxLVx1MDAzZW5leHRfdG9fY2xlYW4gPVxuIDQ5NjpcdFx0XHRcdGhjbGdlX2NvbW1fcmVhZF9kZXYoaHcsIEhDTEdFX0NPTU1fTklDX0NTUV9IRUFEX1JFRyk7XG4gNDk3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmh3LVx1MDAzZWNtcS5jc3EubG9jayk7XG4gNDk4Olx0XHRcdHJldHVybiAtRUJVU1k7XG4gNDk5Olx0XHR9XG4gNTAwOlx0XG4gNTAxOlx0XHQvKipcbiA1MDI6XHRcdCAqIFJlY29yZCB0aGUgbG9jYXRpb24gb2YgZGVzYyBpbiB0aGUgcmluZyBmb3IgdGhpcyB0aW1lXG4gNTAzOlx0XHQgKiB3aGljaCB3aWxsIGJlIHVzZSBmb3IgaGFyZHdhcmUgdG8gd3JpdGUgYmFja1xuIDUwNDpcdFx0ICovXG4gNTA1Olx0XHRudGMgPSBody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xuIDUwNjpcdFxuIDUwNzpcdFx0aGNsZ2VfY29tbV9jbWRfY29weV9kZXNjKGh3LCBkZXNjLCBudW0pO1xuIDUwODpcdFxuIDUwOTpcdFx0LyogV3JpdGUgdG8gaGFyZHdhcmUgKi9cbiA1MTA6XHRcdGhjbGdlX2NvbW1fd3JpdGVfZGV2KGh3LCBIQ0xHRV9DT01NX05JQ19DU1FfVEFJTF9SRUcsXG4gNTExOlx0XHRcdFx0ICAgICBody1cdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlKTtcbiA1MTI6XHRcbiA1MTM6XHRcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChodywgZGVzYywgbnVtLCBudGMpO1xuIDUxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA4MgoJCQkJCQkJb3V0cHV0OiA1OAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0YCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGBoY2xnZV9jb21tX2NtZF9jaGVja19yZXN1bHRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSwgd2hhdCBpbnB1dHMgaXQgdGFrZXMsIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgbmF0dXJlIG9mIGl0cyByZXN1bHQuIElzIGl0IHByaW1hcmlseSBmb3IgZXJyb3IgY2hlY2tpbmcsIHZhbGlkYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBXaGF0IGFyZSB0aGUgcG9zc2libGUgcmV0dXJuIHZhbHVlcyBhbmQgd2hhdCBkbyB0aGV5IHNpZ25pZnk/IEFyZSB0aGVyZSBhbnkgc2lkZSBlZmZlY3RzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlZmluaXRpb24sIGFueSByZWxhdGVkIGNvbW1lbnRzIGluIHRoZSBjb2RlLCBhbmQgaWRlYWxseSwgYW55IGRvY3VtZW50YXRpb24gdGhhdCBleGlzdHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoaXMgZnVuY3Rpb24gY29tcGxldGVseS4gVGhhdCBtZWFucyBkaWdnaW5nIGludG8gdGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGxvb3BzLCBhbmQgYW55IGV4dGVybmFsIGRlcGVuZGVuY2llcy4gVWx0aW1hdGVseSwgbXkgYWltIGlzIHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGNoZWNrIG9wZXJhdGVzIHNvIEkgY2FuIGFwcGx5IHRoYXQga25vd2xlZGdlIGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQzNTpcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcbiA0MzY6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcbiA0Mzc6XHRcdFx0XHRcdCAgICAgICBpbnQgbnVtLCBpbnQgbnRjKVxuIDQzODpcdHtcbiA0Mzk6XHRcdGJvb2wgaXNfY29tcGxldGVkID0gZmFsc2U7XG4gNDQwOlx0XHRpbnQgaGFuZGxlLCByZXQ7XG4gNDQxOlx0XG4gNDQyOlx0XHQvKiBJZiB0aGUgY29tbWFuZCBpcyBzeW5jLCB3YWl0IGZvciB0aGUgZmlybXdhcmUgdG8gd3JpdGUgYmFjayxcbiA0NDM6XHRcdCAqIGlmIG11bHRpIGRlc2NyaXB0b3JzIHRvIGJlIHNlbnQsIHVzZSB0aGUgZmlyc3Qgb25lIHRvIGNoZWNrXG4gNDQ0Olx0XHQgKi9cbiA0NDU6XHRcdGlmIChIQ0xHRV9DT01NX1NFTkRfU1lOQyhsZTE2X3RvX2NwdShkZXNjLVx1MDAzZWZsYWcpKSlcbiA0NDY6XHRcdFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVx1MDAzZW9wY29kZSksXG4gNDQ3Olx0XHRcdFx0XHRcdCBcdTAwMjZpc19jb21wbGV0ZWQpO1xuIDQ0ODpcdFxuIDQ0OTpcdFx0aWYgKCFpc19jb21wbGV0ZWQpXG4gNDUwOlx0XHRcdHJldCA9IC1FQkFERTtcbiA0NTE6XHRcdGVsc2VcbiA0NTI6XHRcdFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmV0dmFsKGh3LCBkZXNjLCBudW0sIG50Yyk7XG4gNDUzOlx0XG4gNDU0Olx0XHQvKiBDbGVhbiB0aGUgY29tbWFuZCBzZW5kIHF1ZXVlICovXG4gNDU1Olx0XHRoYW5kbGUgPSBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oaHcpO1xuIDQ1NjpcdFx0aWYgKGhhbmRsZSBcdTAwM2MgMClcbiA0NTc6XHRcdFx0cmV0ID0gaGFuZGxlO1xuIDQ1ODpcdFx0ZWxzZSBpZiAoaGFuZGxlICE9IG51bSlcbiA0NTk6XHRcdFx0ZGV2X3dhcm4oXHUwMDI2aHctXHUwMDNlY21xLmNzcS5wZGV2LVx1MDAzZWRldixcbiA0NjA6XHRcdFx0XHQgXCYjMzQ7Y2xlYW5lZCAlZCwgbmVlZCB0byBjbGVhbiAlZFxcblwmIzM0OywgaGFuZGxlLCBudW0pO1xuIDQ2MTpcdFx0cmV0dXJuIHJldDtcbiA0NjI6XHR9XG4gNDYzOlx0XG4gNDY0Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODU0CgkJCQkJCQlvdXRwdXQ6IDEyOAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIGNvZGUgaXMgd2FpdGluZyBmb3IgYSBmaXJtd2FyZSB3cml0ZWJhY2ssIHNwZWNpZmljYWxseSB3aXRoaW4gYGhjbGdlX2NvbW1fd2FpdF9mb3JfcmVzcGAuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgd2UmIzM5O2xsIGhpdCBhIHRpbWVvdXQgYW5kIGdldCBhbiBgLUVCQURFYCBlcnJvci4gVGhpcyBtZWFucyBgaGNsZ2VfaW5pdF9hZV9kZXZgIGZhaWxzLCBhbmQgY29uc2VxdWVudGx5LCB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSB3b24mIzM5O3QgcmVnaXN0ZXIuCgpNeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcywgY291bGQgd2UgZmluZCBhIHdheSB0byBjaXJjdW12ZW50IHRoaXM/IE5vcGUsIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIGl0JiMzOTtzIHByZXR0eSBleHBsaWNpdCB0aGF0IGl0IG5lZWRzICphY3R1YWwqIGhhcmR3YXJlIG9yIGFuIGVtdWxhdG9yLiBJdCB3b24mIzM5O3QgaW5pdGlhbGl6ZSB3aXRob3V0IGVpdGhlci4gU28sIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciByb3V0ZSB0byBgaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXRgLCB3aGljaCBpcyBteSB0YXJnZXQuCgpJIHRyYWNlIHRoZSBjYWxsLCBhbmQgaXTigJlzIGNhbGxlZCBmcm9tIGBobnMzX3NldF90dW5hYmxlYCwgd2hpY2ggaXMgYW4gZXRodG9vbCBjYWxsYmFjay4gTm93LCBldGh0b29sIGNhbGxiYWNrcyBhcmUgb25seSBhY2Nlc3NpYmxlIHdoZW4gdGhlIG5ldGRldiBpcyByZWdpc3RlcmVkLiBBbmQgYXMgd2UmIzM5O3ZlIGVzdGFibGlzaGVkLCB0aGUgbmV0ZGV2IHdvbiYjMzk7dCByZWdpc3RlciB3aXRob3V0IGhhcmR3YXJlLiBUaGF0JiMzOTtzIGl0ISBUaGlzIGNvZGUgcGF0aCwgYmVjYXVzZSBvZiB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeSwgaXMgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdDRSBvciBRRU1VLgoKT2theSwgbGV0IG1lIGNvbmZpcm0uIFRoZSByZXF1aXJlbWVudHMgYXJlIGNsZWFyOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IFRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGUgSGlzaWxpY29uIEhOUzMgdGhhdCBJJiMzOTttIGF3YXJlIG9mLCBhbmQgaXQmIzM5O3MgYSBQQ0llIGRldmljZSwgd2hpY2ggbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUgcmVzcG9uc2VzIHRvIGluaXRpYWxpemUuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGVzZSBlbnZpcm9ubWVudHMuIEJhc2VkIG9uIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSE5TMyBuZXR3b3JrIGRyaXZlciB0byBzdXBwb3J0IHNldHRpbmcgYW5kIGdldHRpbmcgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dCB2aWEgZXRodG9vbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUgKG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMgZHVyaW5nIGZpcm13YXJlIGNvbW11bmljYXRpb24sIG1lYW5pbmcgdGhlIG5ldGRldiBpcyBuZXZlciByZWdpc3RlcmVkIGFuZCB0aGUgbW9kaWZpZWQgZXRodG9vbCBjYWxsYmFja3MgY2Fubm90IGJlIHJlYWNoZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSGlzaWxpY29uIEhOUzMgbmV0d29yayBkcml2ZXIgdG8gc3VwcG9ydCBzZXR0aW5nIGFuZCBnZXR0aW5nIFBGQyBzdG9ybSBwcmV2ZW50aW9uIHRpbWVvdXQgdmlhIGV0aHRvb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYWN0dWFsIGhhcmR3YXJlIChvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBuZXRkZXYuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzIGR1cmluZyBmaXJtd2FyZSBjb21tdW5pY2F0aW9uLCBtZWFuaW5nIHRoZSBuZXRkZXYgaXMgbmV2ZXIgcmVnaXN0ZXJlZCBhbmQgdGhlIG1vZGlmaWVkIGV0aHRvb2wgY2FsbGJhY2tzIGNhbm5vdCBiZSByZWFjaGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIwOjU5OjQ2LjcwMzg4MjI2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODM1ODY1NzQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBITlMzIG5ldHdvcmsgZHJpdmVyIHRvIHN1cHBvcnQgc2V0dGluZyBhbmQgZ2V0dGluZyBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHZpYSBldGh0b29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSAob3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cykgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlciBwcm9iZSBmYWlscyBkdXJpbmcgZmlybXdhcmUgY29tbXVuaWNhdGlvbiwgbWVhbmluZyB0aGUgbmV0ZGV2IGlzIG5ldmVyIHJlZ2lzdGVyZWQgYW5kIHRoZSBtb2RpZmllZCBldGh0b29sIGNhbGxiYWNrcyBjYW5ub3QgYmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIwOjU5OjQ2LjcwMzg5MjIzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3ODM3Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWJkMTJmMGE5MmIyMjRkYjU4MWJhMDNkMmQ2ZDk0MDg4M2VjNTcyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAyMDo1OTo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbmluZGV4IGE4Nzk4ZWVjZDlmYmQwLi40Mjg2YWY5MjM5YjAxNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuaFxcbkBAIC02MDIsNiArNjAyLDEwIEBAIHR5cGVkZWYgaW50ICgqcmVhZF9mdW5jKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpO1xcbiAgKiAgIENvbmZpZyB3YWtlIG9uIGxhblxcbiAgKiBkYmdfZ2V0X3JlYWRfZnVuY1xcbiAgKiAgIFJldHVybiB0aGUgcmVhZCBmdW5jIGZvciBkZWJ1Z2ZzIHNlcSBmaWxlXFxuKyAqIHNldF9wZmNfcHJldmVudGlvbl90b3V0XFxuKyAqICAgU2V0IFBGQyBzdG9ybSBwcmV2ZW50aW9uIHRpbWVvdXRcXG4rICogZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXRcXG4rICogICBHZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxcbiAgKi9cXG4gc3RydWN0IGhuYWUzX2FlX29wcyB7XFxuIFxcdGludCAoKmluaXRfYWVfZGV2KShzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpO1xcbkBAIC04MTAsNiArODE0LDggQEAgc3RydWN0IGhuYWUzX2FlX29wcyB7XFxuIFxcdGludCAoKmh3dHN0YW1wX3NldCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNvbmZpZyxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK1xcdGludCAoKnNldF9wZmNfcHJldmVudGlvbl90b3V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHUxNiB0aW1lcyk7XFxuK1xcdGludCAoKmdldF9wZmNfcHJldmVudGlvbl90b3V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIHUxNiAqdGltZXMpO1xcbiB9O1xcbiBcXG4gc3RydWN0IGhuYWUzX2RjYl9vcHMge1xcbkBAIC04OTEsNiArODk3LDE0IEBAIHN0cnVjdCBobmFlM19yb2NlX3ByaXZhdGVfaW5mbyB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc3RhdGU7XFxuIH07XFxuIFxcbitzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEge1xcbitcXHR1MzIgZGlyO1xcbitcXHR1MzIgZW5hYmxlO1xcbitcXHR1MzIgcGVyaW9kX21zO1xcbitcXHR1MzIgdGltZXM7XFxuK1xcdHUzMiByZWNvdmVyeV9wZXJpb2RfbXM7XFxuK307XFxuK1xcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfQVBQX0xPT1BCQUNLICAgIEJJVCgwKVxcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfUEhZX0xPT1BCQUNLICAgIEJJVCgxKVxcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfU0VSREVTX1NFUklBTF9MT09QQkFDS1xcdEJJVCgyKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxcbmluZGV4IDJjMmEyZjFlMGQ3YTY2Li42ZGRlMDdkZGUxZThlYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxcbkBAIC0zMTQsNiArMzE0LDkgQEAgZW51bSBoY2xnZV9vcGNvZGVfdHlwZSB7XFxuIFxcbiBcXHQvKiBRdWVyeSBsaW5rIGRpYWdub3NpcyBpbmZvIGNvbW1hbmQgKi9cXG4gXFx0SENMR0VfT1BDX1FVRVJZX0xJTktfRElBR05PU0lTXFx0PSAweDcwMkEsXFxuK1xcbitcXHQvKiBDb25maWcgcGF1c2Ugc3Rvcm0gcGFyYW0gY29tbWFuZCAqL1xcbitcXHRIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEgPSAweDcwMTksXFxuIH07XFxuIFxcbiBlbnVtIGhjbGdlX2NvbW1fY21kX3JldHVybl9zdGF0dXMge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXFxuaW5kZXggNDQyZjE1NDc2YWYzMmEuLmU3MzE4ZjIzNjMxNTc2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmNcXG5AQCAtMTg5NSw2ICsxODk1LDEyIEBAIHN0YXRpYyBpbnQgaG5zM19nZXRfdHVuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRjYXNlIEVUSFRPT0xfVFhfQ09QWUJSRUFLX0JVRl9TSVpFOlxcbiBcXHRcXHQqKHUzMiAqKWRhdGEgPSBoLVxcdTAwM2VraW5mby50eF9zcGFyZV9idWZfc2l6ZTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUOlxcbitcXHRcXHRpZiAoIWgtXFx1MDAzZWFlX2FsZ28tXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdFxcdHJldCA9IGgtXFx1MDAzZWFlX2FsZ28tXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0yMDIwLDYgKzIwMjYsMTIgQEAgc3RhdGljIGludCBobnMzX3NldF90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdG5ldGRldl9pbmZvKG5ldGRldiwgXFxcInRoZSBhY3RpdmUgdHggc3BhcmUgYnVmIHNpemUgaXMgJXUsIGR1ZSB0byBwYWdlIG9yZGVyXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICAgcHJpdi1cXHUwMDNlcmluZy1cXHUwMDNldHhfc3BhcmUtXFx1MDAzZWxlbik7XFxuIFxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XFxuK1xcdFxcdGlmICghaC1cXHUwMDNlYWVfYWxnby1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfcGZjX3ByZXZlbnRpb25fdG91dClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0XFx0cmV0ID0gaC1cXHUwMDNlYWVfYWxnby1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfcGZjX3ByZXZlbnRpb25fdG91dChoLCAqKHUxNiAqKWRhdGEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaFxcbmluZGV4IDRjZTkyZGRlZmNkZWQyLi4xYzAyOWRjMzJhYjhmNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcXG5AQCAtODkwLDYgKzg5MCwxNSBAQCBzdHJ1Y3QgaGNsZ2VfcXVlcnlfd29sX3N1cHBvcnRlZF9jbWQge1xcbiBcXHR1OCByc3ZbMjBdO1xcbiB9O1xcbiBcXG4rc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCB7XFxuK1xcdF9fbGUzMiBkaXI7XFxuK1xcdF9fbGUzMiBlbmFibGU7XFxuK1xcdF9fbGUzMiBwZXJpb2RfbXM7XFxuK1xcdF9fbGUzMiB0aW1lcztcXG4rXFx0X19sZTMyIHJlY292ZXJ5X3BlcmlvZF9tcztcXG4rXFx0X19sZTMyIHJzdjtcXG4rfTtcXG4rXFxuIHN0cnVjdCBoY2xnZV9odztcXG4gaW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXFxuaW5kZXggZmM4NTg3YzgwODEzNzEuLmEwOGQ4YTM1YWVmOTg1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jXFxuQEAgLTM1MjQsNiArMzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSlcXG4re1xcbitcXHRzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICpwYXJhX2NtZDtcXG4rXFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChoZGV2LVxcdTAwM2VhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uIFxcdTAwM2MgSE5BRTNfREVWSUNFX1ZFUlNJT05fVjMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGhjbGdlX2NtZF9zZXR1cF9iYXNpY19kZXNjKFxcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsXFxuK1xcdFxcdFxcdFxcdCAgIGZhbHNlKTtcXG4rXFx0cGFyYV9jbWQgPSAoc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqKWRlc2MuZGF0YTtcXG4rXFx0cGFyYV9jbWQtXFx1MDAzZWRpciA9IGNwdV90b19sZTMyKHBhcmEtXFx1MDAzZWRpcik7XFxuK1xcdHBhcmFfY21kLVxcdTAwM2VlbmFibGUgPSBjcHVfdG9fbGUzMihwYXJhLVxcdTAwM2VlbmFibGUpO1xcbitcXHRwYXJhX2NtZC1cXHUwMDNlcGVyaW9kX21zID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNlcGVyaW9kX21zKTtcXG4rXFx0cGFyYV9jbWQtXFx1MDAzZXRpbWVzID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNldGltZXMpO1xcbitcXHRwYXJhX2NtZC1cXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcXG4rXFxuK1xcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFxcdTAwMjZoZGV2LVxcdTAwM2VodywgXFx1MDAyNmRlc2MsIDEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmYWlsZWQgdG8gc2V0IHBmYyBzdG9ybSBwYXJhLCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoc3RydWN0IGhjbGdlX2RldiAqaGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSAqcGFyYSlcXG4re1xcbitcXHRzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICpwYXJhX2NtZDtcXG4rXFx0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChoZGV2LVxcdTAwM2VhZV9kZXYtXFx1MDAzZWRldl92ZXJzaW9uIFxcdTAwM2MgSE5BRTNfREVWSUNFX1ZFUlNJT05fVjMpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGhjbGdlX2NtZF9zZXR1cF9iYXNpY19kZXNjKFxcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsIHRydWUpO1xcbitcXHRwYXJhX2NtZCA9IChzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICopZGVzYy5kYXRhO1xcbitcXHRwYXJhX2NtZC1cXHUwMDNlZGlyID0gY3B1X3RvX2xlMzIocGFyYS1cXHUwMDNlZGlyKTtcXG4rXFx0cmV0ID0gaGNsZ2VfY21kX3NlbmQoXFx1MDAyNmhkZXYtXFx1MDAzZWh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmFpbGVkIHRvIGdldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBhcmEtXFx1MDAzZWVuYWJsZSA9IGxlMzJfdG9fY3B1KHBhcmFfY21kLVxcdTAwM2VlbmFibGUpO1xcbitcXHRwYXJhLVxcdTAwM2VwZXJpb2RfbXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cXHUwMDNlcGVyaW9kX21zKTtcXG4rXFx0cGFyYS1cXHUwMDNldGltZXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cXHUwMDNldGltZXMpO1xcbitcXHRwYXJhLVxcdTAwM2VyZWNvdmVyeV9wZXJpb2RfbXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBkaXIsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhID0gezB9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cGFyYS5kaXIgPSBkaXI7XFxuK1xcdHJldCA9IGhjbGdlX2dldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCBcXHUwMDI2cGFyYSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRwYXJhLmVuYWJsZSA9IGVuYWJsZTtcXG4rXFx0cmV0dXJuIGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCBcXHUwMDI2cGFyYSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaCwgdTE2IHRpbWVzKVxcbit7XFxuK1xcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XFxuK1xcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC1cXHUwMDNlYmFjaztcXG4rXFx0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAodGltZXMgXFx1MDAzZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJ0aW1lcyAldSBzaG91bGQgYmUgbm8gbW9yZSB0aGFuICV1IVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dGltZXMsIEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBhcmEuZGlyID0gSENMR0VfRElSX1RYO1xcbitcXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXFx1MDAyNnBhcmEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cGFyYS5lbmFibGUgPSB0aW1lcyA/IDEgOiAwO1xcbitcXHRwYXJhLnRpbWVzID0gKHUzMil0aW1lcztcXG4rXFx0cmV0ID0gaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFxcdTAwMjZwYXJhKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGhkZXYtXFx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQgPSB0aW1lcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0KHN0cnVjdCBobmFlM19oYW5kbGUgKmgsIHUxNiAqdGltZXMpXFxuK3tcXG4rXFx0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoKTtcXG4rXFx0c3RydWN0IGhjbGdlX2RldiAqaGRldiA9IHZwb3J0LVxcdTAwM2ViYWNrO1xcbitcXHRzdHJ1Y3QgaG5hZTNfcGZjX3N0b3JtX3BhcmEgcGFyYTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBhcmEuZGlyID0gSENMR0VfRElSX1RYO1xcbitcXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXFx1MDAyNnBhcmEpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0KnRpbWVzID0gcGFyYS5lbmFibGUgPyAodTE2KXBhcmEudGltZXMgOiAwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGhjbGdlX3NldF9yZXNldF9wZW5kaW5nKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIGhuYWUzX3Jlc2V0X3R5cGUgcmVzZXRfdHlwZSlcXG4ge1xcbkBAIC00MzE3LDYgKzQ0MzMsMjYgQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuIFxcdHJldHVybiBoY2xnZV9yZXNldF9wcmVwYXJlX3dhaXQoaGRldik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGhjbGdlX3Jlc3RvcmVfcGZjX3N0b3JtX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9IFxcdTAwMjZoZGV2LVxcdTAwM2V2cG9ydFswXS5uaWM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XFxuK1xcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0ZWxzZSBpZiAocmV0KVxcbitcXHRcXHRkZXZfd2FybihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBkaXNhYmxlIHJ4IHBmYyBzdG9ybSBwcmV2ZW50LCByZXQgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0IHJldCk7XFxuK1xcbitcXHRyZXQgPSBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIGhkZXYtXFx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRkZXZfd2FybihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBzZXQgdHggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcmV0KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBoY2xnZV9yZXNldF9yZWJ1aWxkKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuIHtcXG4gXFx0aW50IHJldDtcXG5AQCAtOTI3OCw2ICs5NDE0LDMyIEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF93b2woc3RydWN0IGhjbGdlX2RldiAqaGRldilcXG4gXFx0cmV0dXJuIGhjbGdlX3VwZGF0ZV93b2woaGRldik7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGhjbGdlX2luaXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSA9IFxcdTAwMjZoZGV2LVxcdTAwM2V2cG9ydFswXS5uaWM7XFxuK1xcdHUxNiB0aW1lcztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChoZGV2LCBIQ0xHRV9ESVJfUlgsIGZhbHNlKTtcXG4rXFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRlbHNlIGlmIChyZXQpXFxuK1xcdFxcdGRldl93YXJuKFxcdTAwMjZoZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgcmV0KTtcXG4rXFxuK1xcdHJldCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0KGhhbmRsZSwgXFx1MDAyNnRpbWVzKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfd2FybihcXHUwMDI2aGRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBnZXQgdHggcGZjIHByZXZlbnRpb24gdGltZW91dCwgcmV0ID0gJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCByZXQpO1xcbitcXHRcXHR0aW1lcyA9IEhDTEdFX0RFRkFVTFRfUEZDX1BSRVZFTlRJT05fVE9VVDtcXG4rXFx0fVxcbitcXG4rXFx0aGRldi1cXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dCA9IHRpbWVzO1xcbitcXHRoZGV2LVxcdTAwM2VwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQgPSB0aW1lcztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaGNsZ2VfZ2V0X3dvbChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuIFxcdFxcdFxcdCAgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbiB7XFxuQEAgLTk1NDcsNiArOTcwOSw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbiBcXHRcXHRkZXZfd2FybihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHQgXFxcImZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFxuK1xcdGhjbGdlX2luaXRfcGZjX3ByZXZlbnRpb25fdG91dChoZGV2KTtcXG4rXFxuIFxcdHJldCA9IGhjbGdlX2RldmxpbmtfaW5pdChoZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBlcnJfcHRwX3VuaW5pdDtcXG5AQCAtOTk0Niw2ICsxMDExMCw4IEBAIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcXG4gXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0IFxcXCJmYWlsZWQgdG8gdXBkYXRlIHdvbCBjb25maWcsIHJldCA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbiBcXG4rXFx0aGNsZ2VfcmVzdG9yZV9wZmNfc3Rvcm1fcHJldmVudGlvbl90b3V0KGhkZXYpO1xcbitcXG4gXFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlJlc2V0IGRvbmUsICVzIGRyaXZlciBpbml0aWFsaXphdGlvbiBmaW5pc2hlZC5cXFxcblxcXCIsXFxuIFxcdFxcdCBIQ0xHRV9EUklWRVJfTkFNRSk7XFxuIFxcbkBAIC05OTc3LDYgKzEwMTQzLDEwIEBAIHN0YXRpYyB2b2lkIGhjbGdlX3VuaW5pdF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbiBcXHRoY2xnZV9jb25maWdfbmljX2h3X2Vycm9yKGhkZXYsIGZhbHNlKTtcXG4gXFx0aGNsZ2VfY29uZmlnX3JvY2VlX3Jhc19pbnRlcnJ1cHQoaGRldiwgZmFsc2UpO1xcbiBcXG4rXFx0LyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi9cXG4rXFx0aGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoXFx1MDAyNmhkZXYtXFx1MDAzZXZwb3J0LVxcdTAwM2VuaWMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGhkZXYtXFx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdCk7XFxuK1xcbiBcXHRoY2xnZV9jb21tX2NtZF91bmluaXQoaGRldi1cXHUwMDNlYWVfZGV2LCBcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcpO1xcbiBcXHRoY2xnZV9taXNjX2lycV91bmluaXQoaGRldik7XFxuIFxcdGhjbGdlX2RldmxpbmtfdW5pbml0KGhkZXYpO1xcbkBAIC0xMDUzOSw2ICsxMDcwOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG5hZTNfYWVfb3BzIGhjbGdlX29wcyA9IHtcXG4gXFx0LnNldF93b2wgPSBoY2xnZV9zZXRfd29sLFxcbiBcXHQuaHd0c3RhbXBfZ2V0ID0gaGNsZ2VfcHRwX2dldF9jZmcsXFxuIFxcdC5od3RzdGFtcF9zZXQgPSBoY2xnZV9wdHBfc2V0X2NmZyxcXG4rXFx0LnNldF9wZmNfcHJldmVudGlvbl90b3V0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQsXFxuK1xcdC5nZXRfcGZjX3ByZXZlbnRpb25fdG91dCA9IGhjbGdlX2dldF9wZmNfcHJldmVudGlvbl90b3V0LFxcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBobmFlM19hZV9hbGdvIGFlX2FsZ28gPSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuaW5kZXggNzQxOTQ4MTQyMmMzMTAuLjBjZWU4OTQ3ZjZiNDRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXFxuQEAgLTM0Niw2ICszNDYsMTEgQEAgZW51bSBoY2xnZV9saW5rX2ZhaWxfY29kZSB7XFxuICNkZWZpbmUgSENMR0VfTElOS19TVEFUVVNfRE9XTiAwXFxuICNkZWZpbmUgSENMR0VfTElOS19TVEFUVVNfVVAgICAxXFxuIFxcbisjZGVmaW5lIEhDTEdFX0RJUl9SWCAwXFxuKyNkZWZpbmUgSENMR0VfRElSX1RYIDFcXG4rI2RlZmluZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVFxcdFxcdDIwMDBcXG4rI2RlZmluZSBIQ0xHRV9ERUZBVUxUX1BGQ19QUkVWRU5USU9OX1RPVVRcXHQxMDAwXFxuK1xcbiAjZGVmaW5lIEhDTEdFX1BHX05VTVxcdFxcdDRcXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9TUFxcdDBcXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9EV1JSXFx0MVxcbkBAIC04OTgsNiArOTAzLDggQEAgc3RydWN0IGhjbGdlX2RldiB7XFxuIFxcdHUxNiB2Zl9yc3Nfc2l6ZV9tYXg7XFx0XFx0LyogSFcgZGVmaW5lZCBWRiBtYXggUlNTIHRhc2sgcXVldWUgKi9cXG4gXFx0dTE2IHBmX3Jzc19zaXplX21heDtcXHRcXHQvKiBIVyBkZWZpbmVkIFBGIG1heCBSU1MgdGFzayBxdWV1ZSAqL1xcbiBcXHR1MzIgdHhfc3BhcmVfYnVmX3NpemU7XFx0XFx0LyogSFcgZGVmaW5lZCBUWCBzcGFyZSBidWZmZXIgc2l6ZSAqL1xcbitcXHR1MTYgcGZjX3ByZXZlbnRpb25fdG91dDtcXHQvKiBVc2VyIGNvbmZpZywgcmVzdG9yZWQgYWZ0ZXIgcmVzZXQgKi9cXG4rXFx0dTE2IHBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdDsgLyogSFcgZGVmYXVsdCwgdG8gYXZvaWQgc3RhbGUgc3RhdGUgKi9cXG4gXFxuIFxcdHUxNiBmZGlyX3BmX2ZpbHRlcl9jb3VudDsgLyogTnVtIG9mIGd1YXJhbnRlZWQgZmlsdGVycyBmb3IgdGhpcyBQRiAqL1xcbiBcXHR1MTYgbnVtX2FsbG9jX3Zwb3J0O1xcdFxcdC8qIE51bSB2cG9ydHMgdGhpcyBkcml2ZXIgc3VwcG9ydHMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjA6NTk6NDcuMTMyNDY0MDIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDc5MzAwNjYwMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSE5TMyBuZXR3b3JrIGRyaXZlciB0byBzdXBwb3J0IHNldHRpbmcgYW5kIGdldHRpbmcgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dCB2aWEgZXRodG9vbC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFBDSSBkcml2ZXIgdGhhdCByZXF1aXJlcyBhY3R1YWwgaGFyZHdhcmUgKG9yIGEgZGVkaWNhdGVkIGVtdWxhdG9yLCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgcmVnaXN0ZXIgdGhlIG5ldGRldi4gV2l0aG91dCB0aGUgaGFyZHdhcmUsIHRoZSBkcml2ZXIgcHJvYmUgZmFpbHMgZHVyaW5nIGZpcm13YXJlIGNvbW11bmljYXRpb24sIG1lYW5pbmcgdGhlIG5ldGRldiBpcyBuZXZlciByZWdpc3RlcmVkIGFuZCB0aGUgbW9kaWZpZWQgZXRodG9vbCBjYWxsYmFja3MgY2Fubm90IGJlIHJlYWNoZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGViZDEyZjBhOTJiMjI0ZGI1ODFiYTAzZDJkNmQ5NDA4ODNlYzU3MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAyMDo1OTo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5pbmRleCBhODc5OGVlY2Q5ZmJkMC4uNDI4NmFmOTIzOWIwMTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oXG5AQCAtNjAyLDYgKzYwMiwxMCBAQCB0eXBlZGVmIGludCAoKnJlYWRfZnVuYykoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKTtcbiAgKiAgIENvbmZpZyB3YWtlIG9uIGxhblxuICAqIGRiZ19nZXRfcmVhZF9mdW5jXG4gICogICBSZXR1cm4gdGhlIHJlYWQgZnVuYyBmb3IgZGVidWdmcyBzZXEgZmlsZVxuKyAqIHNldF9wZmNfcHJldmVudGlvbl90b3V0XG4rICogICBTZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxuKyAqIGdldF9wZmNfcHJldmVudGlvbl90b3V0XG4rICogICBHZXQgUEZDIHN0b3JtIHByZXZlbnRpb24gdGltZW91dFxuICAqL1xuIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqaW5pdF9hZV9kZXYpKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XG5AQCAtODEwLDYgKzgxNCw4IEBAIHN0cnVjdCBobmFlM19hZV9vcHMge1xuIFx0aW50ICgqaHd0c3RhbXBfc2V0KShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXG4gXHRcdFx0ICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjb25maWcsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXHRpbnQgKCpzZXRfcGZjX3ByZXZlbnRpb25fdG91dCkoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlLCB1MTYgdGltZXMpO1xuK1x0aW50ICgqZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQpKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgdTE2ICp0aW1lcyk7XG4gfTtcbiBcbiBzdHJ1Y3QgaG5hZTNfZGNiX29wcyB7XG5AQCAtODkxLDYgKzg5NywxNCBAQCBzdHJ1Y3QgaG5hZTNfcm9jZV9wcml2YXRlX2luZm8ge1xuIFx0dW5zaWduZWQgbG9uZyBzdGF0ZTtcbiB9O1xuIFxuK3N0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSB7XG4rXHR1MzIgZGlyO1xuK1x0dTMyIGVuYWJsZTtcbitcdHUzMiBwZXJpb2RfbXM7XG4rXHR1MzIgdGltZXM7XG4rXHR1MzIgcmVjb3ZlcnlfcGVyaW9kX21zO1xuK307XG4rXG4gI2RlZmluZSBITkFFM19TVVBQT1JUX0FQUF9MT09QQkFDSyAgICBCSVQoMClcbiAjZGVmaW5lIEhOQUUzX1NVUFBPUlRfUEhZX0xPT1BCQUNLICAgIEJJVCgxKVxuICNkZWZpbmUgSE5BRTNfU1VQUE9SVF9TRVJERVNfU0VSSUFMX0xPT1BCQUNLXHRCSVQoMilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxuaW5kZXggMmMyYTJmMWUwZDdhNjYuLjZkZGUwN2RkZTFlOGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaFxuQEAgLTMxNCw2ICszMTQsOSBAQCBlbnVtIGhjbGdlX29wY29kZV90eXBlIHtcbiBcbiBcdC8qIFF1ZXJ5IGxpbmsgZGlhZ25vc2lzIGluZm8gY29tbWFuZCAqL1xuIFx0SENMR0VfT1BDX1FVRVJZX0xJTktfRElBR05PU0lTXHQ9IDB4NzAyQSxcbitcbitcdC8qIENvbmZpZyBwYXVzZSBzdG9ybSBwYXJhbSBjb21tYW5kICovXG4rXHRIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEgPSAweDcwMTksXG4gfTtcbiBcbiBlbnVtIGhjbGdlX2NvbW1fY21kX3JldHVybl9zdGF0dXMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19ldGh0b29sLmNcbmluZGV4IDQ0MmYxNTQ3NmFmMzJhLi5lNzMxOGYyMzYzMTU3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2V0aHRvb2wuY1xuQEAgLTE4OTUsNiArMTg5NSwxMiBAQCBzdGF0aWMgaW50IGhuczNfZ2V0X3R1bmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdGNhc2UgRVRIVE9PTF9UWF9DT1BZQlJFQUtfQlVGX1NJWkU6XG4gXHRcdCoodTMyICopZGF0YSA9IGgtXHUwMDNla2luZm8udHhfc3BhcmVfYnVmX3NpemU7XG4gXHRcdGJyZWFrO1xuK1x0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XG4rXHRcdGlmICghaC1cdTAwM2VhZV9hbGdvLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGZjX3ByZXZlbnRpb25fdG91dClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRcdHJldCA9IGgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKHUxNiAqKWRhdGEpO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIFx0XHRicmVhaztcbkBAIC0yMDIwLDYgKzIwMjYsMTIgQEAgc3RhdGljIGludCBobnMzX3NldF90dW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0bmV0ZGV2X2luZm8obmV0ZGV2LCBcInRoZSBhY3RpdmUgdHggc3BhcmUgYnVmIHNpemUgaXMgJXUsIGR1ZSB0byBwYWdlIG9yZGVyXFxuXCIsXG4gXHRcdFx0XHQgICAgcHJpdi1cdTAwM2VyaW5nLVx1MDAzZXR4X3NwYXJlLVx1MDAzZWxlbik7XG4gXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFVEhUT09MX1BGQ19QUkVWRU5USU9OX1RPVVQ6XG4rXHRcdGlmICghaC1cdTAwM2VhZV9hbGdvLVx1MDAzZW9wcy1cdTAwM2VzZXRfcGZjX3ByZXZlbnRpb25fdG91dClcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRcdHJldCA9IGgtXHUwMDNlYWVfYWxnby1cdTAwM2VvcHMtXHUwMDNlc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQoaCwgKih1MTYgKilkYXRhKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmhcbmluZGV4IDRjZTkyZGRlZmNkZWQyLi4xYzAyOWRjMzJhYjhmNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9jbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oXG5AQCAtODkwLDYgKzg5MCwxNSBAQCBzdHJ1Y3QgaGNsZ2VfcXVlcnlfd29sX3N1cHBvcnRlZF9jbWQge1xuIFx0dTggcnN2WzIwXTtcbiB9O1xuIFxuK3N0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQge1xuK1x0X19sZTMyIGRpcjtcbitcdF9fbGUzMiBlbmFibGU7XG4rXHRfX2xlMzIgcGVyaW9kX21zO1xuK1x0X19sZTMyIHRpbWVzO1xuK1x0X19sZTMyIHJlY292ZXJ5X3BlcmlvZF9tcztcbitcdF9fbGUzMiByc3Y7XG4rfTtcbitcbiBzdHJ1Y3QgaGNsZ2VfaHc7XG4gaW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xuaW5kZXggZmM4NTg3YzgwODEzNzEuLmEwOGQ4YTM1YWVmOTg1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1xuQEAgLTM1MjQsNiArMzUyNCwxMjIgQEAgc3RhdGljIGludCBoY2xnZV9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsIGludCB2ZixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbnQgaGNsZ2Vfc2V0X3BmY19zdG9ybV9wYXJhKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhICpwYXJhKVxuK3tcbitcdHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kO1xuK1x0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoaGRldi1cdTAwM2VhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRoY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYyhcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsXG4rXHRcdFx0XHQgICBmYWxzZSk7XG4rXHRwYXJhX2NtZCA9IChzdHJ1Y3QgaGNsZ2VfcGZjX3N0b3JtX3BhcmFfY21kICopZGVzYy5kYXRhO1xuK1x0cGFyYV9jbWQtXHUwMDNlZGlyID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VkaXIpO1xuK1x0cGFyYV9jbWQtXHUwMDNlZW5hYmxlID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VlbmFibGUpO1xuK1x0cGFyYV9jbWQtXHUwMDNlcGVyaW9kX21zID0gY3B1X3RvX2xlMzIocGFyYS1cdTAwM2VwZXJpb2RfbXMpO1xuK1x0cGFyYV9jbWQtXHUwMDNldGltZXMgPSBjcHVfdG9fbGUzMihwYXJhLVx1MDAzZXRpbWVzKTtcbitcdHBhcmFfY21kLVx1MDAzZXJlY292ZXJ5X3BlcmlvZF9tcyA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbitcbitcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFx1MDAyNmhkZXYtXHUwMDNlaHcsIFx1MDAyNmRlc2MsIDEpO1xuK1x0aWYgKHJldClcbitcdFx0ZGV2X2VycihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmFpbGVkIHRvIHNldCBwZmMgc3Rvcm0gcGFyYSwgcmV0ID0gJWRcXG5cIiwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhICpwYXJhKVxuK3tcbitcdHN0cnVjdCBoY2xnZV9wZmNfc3Rvcm1fcGFyYV9jbWQgKnBhcmFfY21kO1xuK1x0c3RydWN0IGhjbGdlX2Rlc2MgZGVzYztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoaGRldi1cdTAwM2VhZV9kZXYtXHUwMDNlZGV2X3ZlcnNpb24gXHUwMDNjIEhOQUUzX0RFVklDRV9WRVJTSU9OX1YzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRoY2xnZV9jbWRfc2V0dXBfYmFzaWNfZGVzYyhcdTAwMjZkZXNjLCBIQ0xHRV9PUENfQ0ZHX1BBVVNFX1NUT1JNX1BBUkEsIHRydWUpO1xuK1x0cGFyYV9jbWQgPSAoc3RydWN0IGhjbGdlX3BmY19zdG9ybV9wYXJhX2NtZCAqKWRlc2MuZGF0YTtcbitcdHBhcmFfY21kLVx1MDAzZWRpciA9IGNwdV90b19sZTMyKHBhcmEtXHUwMDNlZGlyKTtcbitcdHJldCA9IGhjbGdlX2NtZF9zZW5kKFx1MDAyNmhkZXYtXHUwMDNlaHcsIFx1MDAyNmRlc2MsIDEpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmYWlsZWQgdG8gZ2V0IHBmYyBzdG9ybSBwYXJhLCByZXQgPSAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cGFyYS1cdTAwM2VlbmFibGUgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cdTAwM2VlbmFibGUpO1xuK1x0cGFyYS1cdTAwM2VwZXJpb2RfbXMgPSBsZTMyX3RvX2NwdShwYXJhX2NtZC1cdTAwM2VwZXJpb2RfbXMpO1xuK1x0cGFyYS1cdTAwM2V0aW1lcyA9IGxlMzJfdG9fY3B1KHBhcmFfY21kLVx1MDAzZXRpbWVzKTtcbitcdHBhcmEtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zID0gbGUzMl90b19jcHUocGFyYV9jbWQtXHUwMDNlcmVjb3ZlcnlfcGVyaW9kX21zKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGhjbGdlX2VuYWJsZV9wZmNfc3Rvcm1fcHJldmVudChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuK1x0XHRcdFx0XHQgIGludCBkaXIsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhID0gezB9O1xuK1x0aW50IHJldDtcbitcbitcdHBhcmEuZGlyID0gZGlyO1xuK1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBhcmEuZW5hYmxlID0gZW5hYmxlO1xuK1x0cmV0dXJuIGhjbGdlX3NldF9wZmNfc3Rvcm1fcGFyYShoZGV2LCBcdTAwMjZwYXJhKTtcbit9XG4rXG4rc3RhdGljIGludCBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCB1MTYgdGltZXMpXG4re1xuK1x0c3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydCA9IGhjbGdlX2dldF92cG9ydChoKTtcbitcdHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYgPSB2cG9ydC1cdTAwM2ViYWNrO1xuK1x0c3RydWN0IGhuYWUzX3BmY19zdG9ybV9wYXJhIHBhcmE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHRpbWVzIFx1MDAzZSBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJ0aW1lcyAldSBzaG91bGQgYmUgbm8gbW9yZSB0aGFuICV1IVxcblwiLFxuK1x0XHRcdHRpbWVzLCBIQ0xHRV9NQVhfUEZDX1BSRVZFTlRJT05fVE9VVCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0cGFyYS5kaXIgPSBIQ0xHRV9ESVJfVFg7XG4rXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXHUwMDI2cGFyYSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cGFyYS5lbmFibGUgPSB0aW1lcyA/IDEgOiAwO1xuK1x0cGFyYS50aW1lcyA9ICh1MzIpdGltZXM7XG4rXHRyZXQgPSBoY2xnZV9zZXRfcGZjX3N0b3JtX3BhcmEoaGRldiwgXHUwMDI2cGFyYSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aGRldi1cdTAwM2VwZmNfcHJldmVudGlvbl90b3V0ID0gdGltZXM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dChzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoLCB1MTYgKnRpbWVzKVxuK3tcbitcdHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQgPSBoY2xnZV9nZXRfdnBvcnQoaCk7XG4rXHRzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2ID0gdnBvcnQtXHUwMDNlYmFjaztcbitcdHN0cnVjdCBobmFlM19wZmNfc3Rvcm1fcGFyYSBwYXJhO1xuK1x0aW50IHJldDtcbitcbitcdHBhcmEuZGlyID0gSENMR0VfRElSX1RYO1xuK1x0cmV0ID0gaGNsZ2VfZ2V0X3BmY19zdG9ybV9wYXJhKGhkZXYsIFx1MDAyNnBhcmEpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCp0aW1lcyA9IHBhcmEuZW5hYmxlID8gKHUxNilwYXJhLnRpbWVzIDogMDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCBoY2xnZV9zZXRfcmVzZXRfcGVuZGluZyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2LFxuIFx0XHRcdFx0ICAgIGVudW0gaG5hZTNfcmVzZXRfdHlwZSByZXNldF90eXBlKVxuIHtcbkBAIC00MzE3LDYgKzQ0MzMsMjYgQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9wcmVwYXJlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXG4gXHRyZXR1cm4gaGNsZ2VfcmVzZXRfcHJlcGFyZV93YWl0KGhkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBoY2xnZV9yZXN0b3JlX3BmY19zdG9ybV9wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XG4rXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuK1x0XHRyZXR1cm47XG4rXHRlbHNlIGlmIChyZXQpXG4rXHRcdGRldl93YXJuKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rXG4rXHRyZXQgPSBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIGhkZXYtXHUwMDNlcGZjX3ByZXZlbnRpb25fdG91dCk7XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfd2FybihcdTAwMjZoZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdCBcImZhaWxlZCB0byBzZXQgdHggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgaGNsZ2VfcmVzZXRfcmVidWlsZChzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxuIHtcbiBcdGludCByZXQ7XG5AQCAtOTI3OCw2ICs5NDE0LDMyIEBAIHN0YXRpYyBpbnQgaGNsZ2VfaW5pdF93b2woc3RydWN0IGhjbGdlX2RldiAqaGRldilcbiBcdHJldHVybiBoY2xnZV91cGRhdGVfd29sKGhkZXYpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBoY2xnZV9pbml0X3BmY19wcmV2ZW50aW9uX3RvdXQoc3RydWN0IGhjbGdlX2RldiAqaGRldilcbit7XG4rXHRzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZoZGV2LVx1MDAzZXZwb3J0WzBdLm5pYztcbitcdHUxNiB0aW1lcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBoY2xnZV9lbmFibGVfcGZjX3N0b3JtX3ByZXZlbnQoaGRldiwgSENMR0VfRElSX1JYLCBmYWxzZSk7XG4rXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuK1x0XHRyZXR1cm47XG4rXHRlbHNlIGlmIChyZXQpXG4rXHRcdGRldl93YXJuKFx1MDAyNmhkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiZmFpbGVkIHRvIGRpc2FibGUgcnggcGZjIHN0b3JtIHByZXZlbnQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rXG4rXHRyZXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dChoYW5kbGUsIFx1MDAyNnRpbWVzKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X3dhcm4oXHUwMDI2aGRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJmYWlsZWQgdG8gZ2V0IHR4IHBmYyBwcmV2ZW50aW9uIHRpbWVvdXQsIHJldCA9ICVkXFxuXCIsXG4rXHRcdFx0IHJldCk7XG4rXHRcdHRpbWVzID0gSENMR0VfREVGQVVMVF9QRkNfUFJFVkVOVElPTl9UT1VUO1xuK1x0fVxuK1xuK1x0aGRldi1cdTAwM2VwZmNfcHJldmVudGlvbl90b3V0ID0gdGltZXM7XG4rXHRoZGV2LVx1MDAzZXBmY19wcmV2ZW50aW9uX3RvdXRfZGVmYXVsdCA9IHRpbWVzO1xuK31cbitcbiBzdGF0aWMgdm9pZCBoY2xnZV9nZXRfd29sKHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSxcbiBcdFx0XHQgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbClcbiB7XG5AQCAtOTU0Nyw2ICs5NzA5LDggQEAgc3RhdGljIGludCBoY2xnZV9pbml0X2FlX2RldihzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYpXG4gXHRcdGRldl93YXJuKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdCBcImZhaWxlZCB0byB3YWtlIG9uIGxhbiBpbml0LCByZXQgPSAlZFxcblwiLCByZXQpO1xuIFxuK1x0aGNsZ2VfaW5pdF9wZmNfcHJldmVudGlvbl90b3V0KGhkZXYpO1xuK1xuIFx0cmV0ID0gaGNsZ2VfZGV2bGlua19pbml0KGhkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfcHRwX3VuaW5pdDtcbkBAIC05OTQ2LDYgKzEwMTEwLDggQEAgc3RhdGljIGludCBoY2xnZV9yZXNldF9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxuIFx0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiBcdFx0XHQgXCJmYWlsZWQgdG8gdXBkYXRlIHdvbCBjb25maWcsIHJldCA9ICVkXFxuXCIsIHJldCk7XG4gXG4rXHRoY2xnZV9yZXN0b3JlX3BmY19zdG9ybV9wcmV2ZW50aW9uX3RvdXQoaGRldik7XG4rXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJSZXNldCBkb25lLCAlcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmluaXNoZWQuXFxuXCIsXG4gXHRcdCBIQ0xHRV9EUklWRVJfTkFNRSk7XG4gXG5AQCAtOTk3Nyw2ICsxMDE0MywxMCBAQCBzdGF0aWMgdm9pZCBoY2xnZV91bmluaXRfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldilcbiBcdGhjbGdlX2NvbmZpZ19uaWNfaHdfZXJyb3IoaGRldiwgZmFsc2UpO1xuIFx0aGNsZ2VfY29uZmlnX3JvY2VlX3Jhc19pbnRlcnJ1cHQoaGRldiwgZmFsc2UpO1xuIFxuK1x0LyogUmVzdG9yZSBodyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG5leHQgaW5pdGlhbGl6YXRpb24gKi9cbitcdGhjbGdlX3NldF9wZmNfcHJldmVudGlvbl90b3V0KFx1MDAyNmhkZXYtXHUwMDNldnBvcnQtXHUwMDNlbmljLFxuK1x0XHRcdFx0ICAgICAgaGRldi1cdTAwM2VwZmNfcHJldmVudGlvbl90b3V0X2RlZmF1bHQpO1xuK1xuIFx0aGNsZ2VfY29tbV9jbWRfdW5pbml0KGhkZXYtXHUwMDNlYWVfZGV2LCBcdTAwMjZoZGV2LVx1MDAzZWh3Lmh3KTtcbiBcdGhjbGdlX21pc2NfaXJxX3VuaW5pdChoZGV2KTtcbiBcdGhjbGdlX2RldmxpbmtfdW5pbml0KGhkZXYpO1xuQEAgLTEwNTM5LDYgKzEwNzA5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBobmFlM19hZV9vcHMgaGNsZ2Vfb3BzID0ge1xuIFx0LnNldF93b2wgPSBoY2xnZV9zZXRfd29sLFxuIFx0Lmh3dHN0YW1wX2dldCA9IGhjbGdlX3B0cF9nZXRfY2ZnLFxuIFx0Lmh3dHN0YW1wX3NldCA9IGhjbGdlX3B0cF9zZXRfY2ZnLFxuK1x0LnNldF9wZmNfcHJldmVudGlvbl90b3V0ID0gaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXQsXG4rXHQuZ2V0X3BmY19wcmV2ZW50aW9uX3RvdXQgPSBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dCxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgaG5hZTNfYWVfYWxnbyBhZV9hbGdvID0ge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5pbmRleCA3NDE5NDgxNDIyYzMxMC4uMGNlZTg5NDdmNmI0NGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5oXG5AQCAtMzQ2LDYgKzM0NiwxMSBAQCBlbnVtIGhjbGdlX2xpbmtfZmFpbF9jb2RlIHtcbiAjZGVmaW5lIEhDTEdFX0xJTktfU1RBVFVTX0RPV04gMFxuICNkZWZpbmUgSENMR0VfTElOS19TVEFUVVNfVVAgICAxXG4gXG4rI2RlZmluZSBIQ0xHRV9ESVJfUlggMFxuKyNkZWZpbmUgSENMR0VfRElSX1RYIDFcbisjZGVmaW5lIEhDTEdFX01BWF9QRkNfUFJFVkVOVElPTl9UT1VUXHRcdDIwMDBcbisjZGVmaW5lIEhDTEdFX0RFRkFVTFRfUEZDX1BSRVZFTlRJT05fVE9VVFx0MTAwMFxuK1xuICNkZWZpbmUgSENMR0VfUEdfTlVNXHRcdDRcbiAjZGVmaW5lIEhDTEdFX1NDSF9NT0RFX1NQXHQwXG4gI2RlZmluZSBIQ0xHRV9TQ0hfTU9ERV9EV1JSXHQxXG5AQCAtODk4LDYgKzkwMyw4IEBAIHN0cnVjdCBoY2xnZV9kZXYge1xuIFx0dTE2IHZmX3Jzc19zaXplX21heDtcdFx0LyogSFcgZGVmaW5lZCBWRiBtYXggUlNTIHRhc2sgcXVldWUgKi9cbiBcdHUxNiBwZl9yc3Nfc2l6ZV9tYXg7XHRcdC8qIEhXIGRlZmluZWQgUEYgbWF4IFJTUyB0YXNrIHF1ZXVlICovXG4gXHR1MzIgdHhfc3BhcmVfYnVmX3NpemU7XHRcdC8qIEhXIGRlZmluZWQgVFggc3BhcmUgYnVmZmVyIHNpemUgKi9cbitcdHUxNiBwZmNfcHJldmVudGlvbl90b3V0O1x0LyogVXNlciBjb25maWcsIHJlc3RvcmVkIGFmdGVyIHJlc2V0ICovXG4rXHR1MTYgcGZjX3ByZXZlbnRpb25fdG91dF9kZWZhdWx0OyAvKiBIVyBkZWZhdWx0LCB0byBhdm9pZCBzdGFsZSBzdGF0ZSAqL1xuIFxuIFx0dTE2IGZkaXJfcGZfZmlsdGVyX2NvdW50OyAvKiBOdW0gb2YgZ3VhcmFudGVlZCBmaWx0ZXJzIGZvciB0aGlzIFBGICovXG4gXHR1MTYgbnVtX2FsbG9jX3Zwb3J0O1x0XHQvKiBOdW0gdnBvcnRzIHRoaXMgZHJpdmVyIHN1cHBvcnRzICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMDo1OTo0Ny4xMzI0NjYzMTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzY0NDk5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUEZDIFN0b3JtIFByZXZlbnRpb24gUGF0Y2ggZm9yIHRoZSBITlMzIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBjb21pbmcgaW4gdGhhdCBhZGRzIHRoZSBhYmlsaXR5IHRvIHNldCBhbmQgZ2V0IHRoZSBQcmlvcml0eSBGbG93IENvbnRyb2wgKFBGQykgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHdpdGhpbiB0aGUgSE5TMyBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgaXQgcHJpbWFyaWx5IHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZXRodG9vbC5jYCB0byBhZGQgdGhlIG5lY2Vzc2FyeSBgRVRIVE9PTF9QRkNfUFJFVkVOVElPTl9UT1VUYCBob29rcyBmb3IgYGhuczNfZ2V0X3R1bmFibGVgIGFuZCBgaG5zM19zZXRfdHVuYWJsZWAuIFRoZW4sIG9uIHRoZSBIQ0xHRSBQRiBzaWRlLCAgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNgIGdldHMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdldCBhbmQgc2V0IGZ1bmN0aW9ucywgbmFtZWx5IGBoY2xnZV9zZXRfcGZjX3ByZXZlbnRpb25fdG91dGAgYW5kIGBoY2xnZV9nZXRfcGZjX3ByZXZlbnRpb25fdG91dGAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGZ1enogdGhpcz8gVGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpcyBgaG5zM2AsIHdoaWNoIEkgcmVtZW1iZXIgaXMgYSBQQ0kgZHJpdmVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYWNjZXNzaWJpbGl0eSBvZiB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlcnMgYXJlIG9mdGVuIGRpZmZpY3VsdCB0byByZWFjaCBkaXJlY3RseSB1bmxlc3Mgd2UncmUgdXNpbmcgc29tZXRoaW5nIGxpa2UgUUVNVSB3aXRoIHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiBvciBsZXZlcmFnaW5nIHRvb2xzIGxpa2Ugc3l6LXVzYi9zeXotcGNpLlxuXG5XYWl0IGEgbWludXRlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdyDigJMgYHN5ei1wY2lgISBCdXQgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIGl0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgSGlzaWxpY29uIEhOUzM/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaG5zM2AgaXMgaW5kZWVkIGEgUENJIGRyaXZlciB0byBjb25maXJtIG15IGZ1enppbmcgYXBwcm9hY2guIExldCdzIHNlZS4uLiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY2AgaXMgcGFydCBvZiB0aGUgYGhuczNgIGRyaXZlciwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBwYXJlbnQgZGlyZWN0b3J5IGZvciB0aGUgUENJIGRyaXZlciBpbnN0YW50aWF0aW9uLiBJIHNob3VsZCBzZWFyY2ggZm9yIGBwY2lfZHJpdmVyYCBkZWNsYXJhdGlvbnMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczNgIGRpcmVjdG9yeSB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTk1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjA6NTk6NTMuODk2OTY4ODEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzI1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzM1NT1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoaG5zM19wbV9vcHMsIGhuczNfc3VzcGVuZCwgaG5zM19yZXN1bWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzM1NzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaG5zM19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzM1OC1cXHQubmFtZSAgICAgPSBobnMzX2RyaXZlcl9uYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMDo1OTo1My45NTkzMDE1NDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTcyNDU2Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgVGhpcyBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gaXQncyBjb25maXJtZWQsIHRoaXMgaXMgYSBQQ0kgZHJpdmVyLiBUaGUgbmV4dCBxdWVzdGlvbiwgbmF0dXJhbGx5LCBpcyB3aGV0aGVyIG9yIG5vdCBpdCdzIHN1c2NlcHRpYmxlIHRvIGZ1enppbmcuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIFBDSSBkZXZpY2UgYmUgZnV6emVkIHVzaW5nIGBzeXotcGNpYD8gSSBrbm93IHRoYXQncyB0aGUgY29tbW9uIGFwcHJvYWNoLCBlc3BlY2lhbGx5IHdoZW4gdGhlIFBDSSBJRHMgYXJlIGtub3duIGFuZCBzeXprYWxsZXIgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gUENJIGRldmljZXMgb2Z0ZW4gKmNhbiogYmUgZW11bGF0ZWQgb3IgZnV6emVkIHRoaXMgd2F5LlxuXG5Ib3dldmVyLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgdXN1YWwgaHVyZGxlcy4gU3BlY2lmaWNhbGx5LCBjb25zaWRlcmluZyBteSBleHBlcmllbmNlLCBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLCBwYXJ0aWN1bGFybHkgY29tcGxleCBvbmVzIGxpa2UgbmV0d29yayBjYXJkcywgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBtZWFuaW5nZnVsbHkgZnV6eiB3aXRob3V0IGEgcm9idXN0IGVtdWxhdG9yLiBFdmVuIHRob3VnaCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCBpdCdzIG9mdGVuIG5vdCBlbm91Z2ggb24gaXRzIG93bi5cblxuTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSBzb21ldGhpbmcgaW1wb3J0YW50IGFib3V0IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSXQgbWVudGlvbnMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIgVGhpcyByYWlzZXMgYSByZWQgZmxhZy4gSXMgdGhlcmUgYSBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSBvcHRpb24gc3BlY2lmaWNhbGx5IGZvciBIaXNpbGljb24gSE5TMz8gSSBkb24ndCByZWNhbGwgc2VlaW5nIG9uZSwgYW5kIHRoYXTigJlzIGEgcHJvYmxlbS5cblxuQ2FuIGBzeXotcGNpYCBldmVuICpyZWFjaCogdGhpcyB0aGluZz8gSXQgY2FuIGNlcnRhaW5seSBwcm9iZSBpdCwgYnV0IGdldHRpbmcgdGhlIGRldmljZSBzZXQgdXAgdG8gYSBwb2ludCB3aGVyZSBgZXRodG9vbGAgY29tbWFuZHMgY2FuIGV2ZW4gYmUgc2VudCB0byB0aGUgbmV0ZGV2IHJlcXVpcmVzIGEgKnN1Y2Nlc3NmdWwqIHByb2JlLiBBbmQsIHdpdGggdGhlc2Uga2luZHMgb2YgY29tcGxleCBuZXR3b3JrIGNhcmRzLCBwcm9iZSBmYWlsdXJlcyBhcmUgdGhlIG5vcm0gdW5sZXNzIHRoZSBoYXJkd2FyZSBpcyBwaHlzaWNhbGx5IHByZXNlbnQgb3IgcGVyZmVjdGx5IGVtdWxhdGVkLiBQcm9iZXMgZmFpbCBiZWNhdXNlIHRoZXkgb2Z0ZW4gaW52b2x2ZSByZWFkaW5nIGhhcmR3YXJlIHJlZ2lzdGVycywgd2FpdGluZyBmb3Igc3BlY2lmaWMgYml0cyB0byBiZSBzZXQsIGFuZCBvdGhlciBoYXJkd2FyZS1kZXBlbmRlbnQgb3BlcmF0aW9ucy5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYGhjbGdlX21haW4uY2AgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQncyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDowMC4xMzE3NjEyMTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2NjM3NTQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjAwLjE5MjQzNjkzOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1Nzg3MDQ3NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyBEb3duIHRoZSBQRiBEcml2ZXIgaW4gdGhlIEhDTEdFIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBwcmltYXJ5IFBGIChQaHlzaWNhbCBGdW5jdGlvbikgZHJpdmVyIGlzIHdpdGhpbiB0aGUgSENMR0UgY29kZS4gSW5pdGlhbGx5LCBteSBpbnN0aW5jdHMgcGluZ2VkIGBoY2xnZV9tYWluLmNgIGFzIGEgbGlrZWx5IGNvbnRlbmRlci4gSXQgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludCBmb3IgZHJpdmVyIGZ1bmN0aW9uYWxpdHkuIEJ1dCwgSSBrbm93IHRoZXNlIHRoaW5ncyBjYW4gYmUgc3RydWN0dXJlZCBpbiBhIHZhcmlldHkgb2Ygd2F5cywgc28gSSBzaG91bGRuJ3QganVtcCB0byBjb25jbHVzaW9ucy4gSXQncyBiZXN0IHRvIHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIG90aGVyIGNhbmRpZGF0ZXMuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGxvb2sgYXQgYGhuczNfZW5ldC5jYCBhcyB3ZWxsLiBUaGF0IGZpbGUgbmFtZSBsb29rcyBsaWtlIGEgc3Ryb25nIGNhbmRpZGF0ZSB0byBiZSBhIG1vcmUgZGV0YWlsZWQgaW1wbGVtZW50YXRpb24gb2YgZXRoZXJuZXQgZnVuY3Rpb25zLiBHaXZlbiB0aGUgSE5TMyBhcmNoaXRlY3R1cmUsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IGl0cyBoYW5kbGluZyBzb21lIHBvcnRpb24gb2YgdGhlIFBGIGRyaXZlci4gSSBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSBhbmQgY29uZmlybSB3aGljaCBmaWxlIGNvbnRhaW5zIHRoZSBjcml0aWNhbCBQRi1yZWxhdGVkIGNvZGUuIEknbGwgbmVlZCB0byBkaWcgaW50byBib3RoIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgYW5kIGRhdGEgcGxhbmUgaW50ZXJhY3Rpb25zIGFuZCBwaW4gZG93biB0aGUgdHJ1ZSBQRiBkcml2ZXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDoyNS45Nzk0ODc1MTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE1NTU2NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9MzEzMD1zdGF0aWMgdm9pZCBobnMzX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMxNDU6LyogaG5zM19wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE0Ni0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNDgtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYzozMTQ5OiAqIGhuczNfcHJvYmUgaW5pdGlhbGl6ZXMgYSBQRiBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1MC0gKiBUaGUgT1MgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyaW5nIG9mIHRoZSBQRiBwcml2YXRlIHN0cnVjdHVyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE1NTpzdGF0aWMgaW50IGhuczNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtMzE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMzU3PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBobnMzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMzNTktXFx0LmlkX3RhYmxlID0gaG5zM19wY2lfdGJsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjMzNjA6XFx0LnByb2JlICAgID0gaG5zM19wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMzYxLVxcdC5yZW1vdmUgICA9IGhuczNfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM9NTM3ND1zdGF0aWMgaW50IGhuczNfY2xpZW50X2luaXQoc3RydWN0IGhuYWUzX2hhbmRsZSAqaGFuZGxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtNTQ4NC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6NTQ4NTpcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldiwgXFxcInByb2JlIHJlZ2lzdGVyIG5ldGRldiBmYWlsIVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmMtNTQ4Ni1cXHRcXHRnb3RvIG91dF9yZWdfbmV0ZGV2X2ZhaWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjI2LjA0MTA1NTcwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzIzMTU0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBobnMzX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IGBobnMzX3Byb2JlYCBpcyBhbGwgYWJvdXQuIE5vIGFzc3VtcHRpb25zLCBqdXN0IHB1cmUsIG9iamVjdGl2ZSBhbmFseXNpcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBncmFzcCBvbiBpdHMgZnVuY3Rpb24gYW5kIHB1cnBvc2UsIHdpdGhvdXQgYW55IHByZWNvbmNlaXZlZCBub3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gZGlzc2VjdCBhbmQgYW5hbHl6ZS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyB0aGluZyAqYWN0dWFsbHkqIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDoyOC45NzMzNzU1MjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNTUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTU1OlxcdHN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4zMTU2OlxcdHtcXG4zMTU3OlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldjtcXG4zMTU4OlxcdFxcdGludCByZXQ7XFxuMzE1OTpcXHRcXG4zMTYwOlxcdFxcdGFlX2RldiA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFlX2RldiksIEdGUF9LRVJORUwpO1xcbjMxNjE6XFx0XFx0aWYgKCFhZV9kZXYpXFxuMzE2MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMTYzOlxcdFxcbjMxNjQ6XFx0XFx0YWVfZGV2LVxcdTAwM2VwZGV2ID0gcGRldjtcXG4zMTY1OlxcdFxcdGFlX2Rldi1cXHUwMDNlZmxhZyA9IGVudC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuMzE2NjpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWVfZGV2KTtcXG4zMTY3OlxcdFxcbjMxNjg6XFx0XFx0cmV0ID0gaG5hZTNfcmVnaXN0ZXJfYWVfZGV2KGFlX2Rldik7XFxuMzE2OTpcXHRcXHRpZiAocmV0KVxcbjMxNzA6XFx0XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbjMxNzE6XFx0XFxuMzE3MjpcXHRcXHRyZXR1cm4gcmV0O1xcbjMxNzM6XFx0fVxcbjMxNzQ6XFx0XFxuMzE3NTpcXHQvKipcXG4zMTc2OlxcdCAqIGhuczNfY2xlYW5fdmZfY29uZmlnXFxuMzE3NzpcXHQgKiBAcGRldjogcG9pbnRlciB0byBhIHBjaV9kZXYgc3RydWN0dXJlXFxuMzE3ODpcXHQgKiBAbnVtX3ZmczogbnVtYmVyIG9mIFZGcyBhbGxvY2F0ZWRcXG4zMTc5OlxcdCAqXFxuMzE4MDpcXHQgKiBDbGVhbiByZXNpZHVhbCB2ZiBjb25maWcgYWZ0ZXIgZGlzYWJsZSBzcmlvdlxcbjMxODE6XFx0ICoqL1xcbjMxODI6XFx0c3RhdGljIHZvaWQgaG5zM19jbGVhbl92Zl9jb25maWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxcbjMxODM6XFx0e1xcbjMxODQ6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbjMxODU6XFx0XFxuMzE4NjpcXHRcXHRpZiAoYWVfZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWNsZWFuX3ZmX2NvbmZpZylcXG4zMTg3OlxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzLVxcdTAwM2VjbGVhbl92Zl9jb25maWcoYWVfZGV2LCBudW1fdmZzKTtcXG4zMTg4OlxcdH1cXG4zMTg5OlxcdFxcbjMxOTA6XFx0LyogaG5zM19yZW1vdmUgLSBEZXZpY2UgcmVtb3ZhbCByb3V0aW5lXFxuMzE5MTpcXHQgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3RcXG4zMTkyOlxcdCAqL1xcbjMxOTM6XFx0c3RhdGljIHZvaWQgaG5zM19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuMzE5NDpcXHR7XFxuMzE5NTpcXHRcXHRzdHJ1Y3QgaG5hZTNfYWVfZGV2ICphZV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMzE5NjpcXHRcXG4zMTk3OlxcdFxcdGlmIChobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSlcXG4zMTk4OlxcdFxcdFxcdGhuczNfZGlzYWJsZV9zcmlvdihwZGV2KTtcXG4zMTk5OlxcdFxcbjMyMDA6XFx0XFx0aG5hZTNfdW5yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcXG4zMjAxOlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTtcXG4zMjAyOlxcdH1cXG4zMjAzOlxcdFxcbjMyMDQ6XFx0LyoqXFxuMzIwNTpcXHQgKiBobnMzX3BjaV9zcmlvdl9jb25maWd1cmVcXG4zMjA2OlxcdCAqIEBwZGV2OiBwb2ludGVyIHRvIGEgcGNpX2RldiBzdHJ1Y3R1cmVcXG4zMjA3OlxcdCAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzIHRvIGFsbG9jYXRlXFxuMzIwODpcXHQgKlxcbjMyMDk6XFx0ICogRW5hYmxlIG9yIGNoYW5nZSB0aGUgbnVtYmVyIG9mIFZGcy4gQ2FsbGVkIHdoZW4gdGhlIHVzZXIgdXBkYXRlcyB0aGUgbnVtYmVyXFxuMzIxMDpcXHQgKiBvZiBWRnMgaW4gc3lzZnMuXFxuMzIxMTpcXHQgKiovXFxuMzIxMjpcXHRzdGF0aWMgaW50IGhuczNfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuMzIxMzpcXHR7XFxuMzIxNDpcXHRcXHRpbnQgcmV0O1xcbjMyMTU6XFx0XFxuMzIxNjpcXHRcXHRpZiAoIShobnMzX2lzX3BoeXNfZnVuYyhwZGV2KSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19QQ0lfSU9WKSkpIHtcXG4zMjE3OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJDYW4gbm90IGNvbmZpZyBTUklPVlxcXFxuXFxcIik7XFxuMzIxODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjE5OlxcdFxcdH1cXG4zMjIwOlxcdFxcbjMyMjE6XFx0XFx0aWYgKG51bV92ZnMpIHtcXG4zMjIyOlxcdFxcdFxcdHJldCA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7XFxuMzIyMzpcXHRcXHRcXHRpZiAocmV0KVxcbjMyMjQ6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiU1JJT1YgZW5hYmxlIGZhaWxlZCAlZFxcXFxuXFxcIiwgcmV0KTtcXG4zMjI1OlxcdFxcdFxcdGVsc2VcXG4zMjI2OlxcdFxcdFxcdFxcdHJldHVybiBudW1fdmZzO1xcbjMyMjc6XFx0XFx0fSBlbHNlIGlmICghcGNpX3Zmc19hc3NpZ25lZChwZGV2KSkge1xcbjMyMjg6XFx0XFx0XFx0aW50IG51bV92ZnNfcHJlID0gcGNpX251bV92ZihwZGV2KTtcXG4zMjI5OlxcdFxcbjMyMzA6XFx0XFx0XFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XFxuMzIzMTpcXHRcXHRcXHRobnMzX2NsZWFuX3ZmX2NvbmZpZyhwZGV2LCBudW1fdmZzX3ByZSk7XFxuMzIzMjpcXHRcXHR9IGVsc2Uge1xcbjMyMzM6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4zMjM0OlxcdFxcdFxcdFxcdCBcXFwiVW5hYmxlIHRvIGZyZWUgVkZzIGJlY2F1c2Ugc29tZSBhcmUgYXNzaWduZWQgdG8gVk1zLlxcXFxuXFxcIik7XFxuMzIzNTpcXHRcXHR9XFxuMzIzNjpcXHRcXG4zMjM3OlxcdFxcdHJldHVybiAwO1xcbjMyMzg6XFx0fVxcbjMyMzk6XFx0XFxuMzI0MDpcXHRzdGF0aWMgdm9pZCBobnMzX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbjMyNDE6XFx0e1xcbjMyNDI6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xcbjMyNDM6XFx0XFxuMzI0NDpcXHRcXHRobmFlM191bnJlZ2lzdGVyX2FlX2RldihhZV9kZXYpO1xcbjMyNDU6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbjMyNDY6XFx0XFxuMzI0NzpcXHRcXHRpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9QT1dFUl9PRkYpXFxuMzI0ODpcXHRcXHRcXHRwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7XFxuMzI0OTpcXHR9XFxuMzI1MDpcXHRcXG4zMjUxOlxcdHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaG5zM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4zMjUyOlxcdHtcXG4zMjUzOlxcdFxcdHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjMyNTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjI4Ljk3MzY0NzQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0MzU0MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBgaG5zM19wcm9iZWAgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gYGhuczNfcHJvYmVgIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGF0IGxlYXN0IG9uIHRoZSBzdXJmYWNlLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgaXQgbG9va3MgbGlrZSBhbGwgaXQncyBkb2luZyBpcyBhbGxvY2F0aW5nIGFuIGBhZV9kZXZgIHN0cnVjdHVyZSBhbmQgdGhlbiBpbW1lZGlhdGVseSBwYXNzaW5nIGl0IG9mZiB0byBgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2YCBmdW5jdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBwYXR0ZXJuLCB1c3VhbGx5IGluZGljYXRpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCByZWdpc3RyYXRpb24gd2l0aCB0aGUgc3lzdGVtLiBJdCdzIGFsbW9zdCB0b28gc2ltcGxlLCB3aGljaCBpcyBtYWtpbmcgbWUgd2FudCB0byBkZWx2ZSBkZWVwZXIsIHNwZWNpZmljYWxseSBpbnRvIHdoYXQgYGhuYWUzX3JlZ2lzdGVyX2FlX2RldmAgaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIHRvIHRoaXMgYWxsb2NhdGVkIGBhZV9kZXZgIG5vdywgYW5kIHdoYXQgdGhhdCByZWdpc3RyYXRpb24gcHJvY2VzcyBlbnRhaWxzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbiBsaWtlbHkgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjMyLjE0ODAwNjIzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxMzkwMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhuYWUzX3JlZ2lzdGVyX2FlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jPTMwND1FWFBPUlRfU1lNQk9MKGhuYWUzX3VucmVnaXN0ZXJfYWVfYWxnbyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zMDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYzozMDY6LyogaG5hZTNfcmVnaXN0ZXJfYWVfZGV2IC0gcmVnaXN0ZXJzIGEgQUUgZGV2aWNlIHRvIGhuYWUzIGZyYW1ld29ya1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzA3LSAqIEBhZV9kZXY6IHRoZSBBRSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzA5LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmM6MzEwOmludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmMtMzY5LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5jOjM3MDpFWFBPUlRfU1lNQk9MKGhuYWUzX3JlZ2lzdGVyX2FlX2Rldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5hZTMuYy0zNzEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oPTk3Mj1zdGF0aWMgaW5saW5lIHZvaWQgaG5hZTNfZm9ybWF0X21hY19hZGRyKGNoYXIgKmZvcm1hdF9tYWNfYWRkcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmgtOTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmg6OTgxOmludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obmFlMy5oLTk4Mi12b2lkIGhuYWUzX3VucmVnaXN0ZXJfYWVfZGV2KHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2Rldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYz0zMTU1PXN0YXRpYyBpbnQgaG5zM19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTMxNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6MzE2ODpcXHRyZXQgPSBobmFlM19yZWdpc3Rlcl9hZV9kZXYoYWVfZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy0zMTY5LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAwOjMyLjQxOTQxMjgyOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODkxNzcwNzkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipJbml0aWFsIFRob3VnaHRzIG9uIFJlZ2lzdGVyaW5nIGEgRGV2aWNlKipcblxuQWxyaWdodCwgdGhlIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGBobmFlM19yZWdpc3Rlcl9hZV9kZXZgIGZ1bmN0aW9uLiBUaGlzIGlzIGxpa2VseSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IsIHdlbGwsICpyZWdpc3RlcmluZyogYSBkZXZpY2UsIHNwZWNpZmljYWxseSBvbmUgcmVsYXRlZCB0byB0aGUgaG5hZTMgZHJpdmVyIGFuZCwgSSdtIGd1ZXNzaW5nLCBhbiBcIkFFXCIgZGV2aWNlIHR5cGUuIFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyB0aGlzIG1pZ2h0IGJlIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSBhY2NlbGVyYXRvciBvciBjb3Byb2Nlc3NvciBvbiB0aGUgcGxhdGZvcm0uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgcmVnaXN0cmF0aW9uIGlzIGEgY3JpdGljYWwgcGllY2UsIGFuZCBsaWtlbHkgaW52b2x2ZXM6XG5cbiogICAqKlJlc291cmNlIEFsbG9jYXRpb246KiogRGVmaW5pbmcgYW5kIG9idGFpbmluZyBuZWNlc3NhcnkgcmVzb3VyY2VzIGZyb20gdGhlIGtlcm5lbCAtIG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgbGluZXMsIERNQSBjaGFubmVscywgZXRjLiAtIGFsbCBvZiB3aGljaCBhcmUgY3JpdGljYWwgZm9yIHRoZSBoYXJkd2FyZSdzIGludGVyYWN0aW9uIHdpdGggdGhlIHN5c3RlbS4gSSBoYXZlIHRvIHRoaW5rIGFib3V0IGhvdyB0aGlzIGRldmljZSB3b3VsZCBhY2Nlc3Mgc2hhcmVkIHJlc291cmNlcy5cbiogICAqKkRyaXZlciBJbml0aWFsaXphdGlvbjoqKiBTZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcyB3aXRoaW4gdGhlIGRyaXZlciB0byBtYW5hZ2UgdGhpcyBwYXJ0aWN1bGFyIGRldmljZSBpbnN0YW5jZS4gVGhpcyBpbmNsdWRlcyB0aGluZ3MgbGlrZTogZGV2aWNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIHBvaW50ZXJzIHRvIHRoZSBkZXZpY2UncyBoYXJkd2FyZSByZWdpc3RlcnMsIGFuZCBpbnRlcm5hbCBzdGF0ZSB2YXJpYWJsZXMuXG4qICAgKipLZXJuZWwgSW50ZWdyYXRpb246KiogUmVnaXN0ZXJpbmcgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgc3Vic3lzdGVtcywgd2hpY2ggb2Z0ZW4gbWVhbnMgc2V0dGluZyB1cCBkZXZpY2Ugbm9kZXMsIHJlZ2lzdGVyaW5nIHdpdGggcG93ZXIgbWFuYWdlbWVudCwgYW5kIHByb3ZpZGluZyBjYWxsYmFja3MgdG8gdGhlIHN5c3RlbS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgdGhlIGNyZWF0aW9uIG9mIGEgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIG1heWJlIGV2ZW4gYSBjaGFyYWN0ZXIgb3IgYmxvY2sgZGV2aWNlLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGV4Y2VwdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIHRoZSBjb25kaXRpb25zLlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBzZXJpZXMgb2YgY2FsbHMgdG8ga2VybmVsIEFQSXMgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIChsaWtlIGBrbWFsbG9jYCwgYGlvcmVtYXBgLCBldGMuKSwgaW50ZXJydXB0IG1hbmFnZW1lbnQgKGByZXF1ZXN0X2lycWAsIGBmcmVlX2lycWApLCBkZXZpY2UgdHJlZSBsb29rdXBzIChpZiBhcHBsaWNhYmxlKSwgYW5kIHBvdGVudGlhbGx5IGEgY2FsbCB0byBhIHBsYXRmb3JtLXNwZWNpZmljIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbi4gSSBhbSBhbHNvIGxvb2tpbmcgdG8gc2VlIGhvdyBkZXZpY2Utc3BlY2lmaWMgZGF0YSBpcyBsaW5rZWQgdG8gdGhlIGtlcm5lbCBkYXRhLCBsaWtlbHkgd2l0aCBzb21lIHN0cnVjdHVyZSBwb2ludGVyLiBUaGUgZnVuY3Rpb24gcHJvYmFibHkgYWxzbyB3aWxsIGhhbmRsZSBzb21lIHNvcnQgb2YgY2xlYW51cCBwcm9jZXNzLCBpbiBjYXNlIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMgbWlkd2F5LCB0byBhdm9pZCByZXNvdXJjZSBsZWFrcy4gTm93LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBhbmQgc3RhcnQgcmVhZGluZyB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzEsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMDo1MS4zMzcxMjQ5MDRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huYWUzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzEwOlxcdGludCBobmFlM19yZWdpc3Rlcl9hZV9kZXYoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2KVxcbiAzMTE6XFx0e1xcbiAzMTI6XFx0XFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbiAzMTM6XFx0XFx0c3RydWN0IGhuYWUzX2FlX2FsZ28gKmFlX2FsZ287XFxuIDMxNDpcXHRcXHRzdHJ1Y3QgaG5hZTNfY2xpZW50ICpjbGllbnQ7XFxuIDMxNTpcXHRcXHRpbnQgcmV0O1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRpZiAoIWFlX2RldilcXG4gMzE4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZobmFlM19jb21tb25fbG9jayk7XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmFlX2Rldi1cXHUwMDNlbm9kZSwgXFx1MDAyNmhuYWUzX2FlX2Rldl9saXN0KTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0LyogQ2hlY2sgaWYgdGhlcmUgYXJlIG1hdGNoZWQgYWVfYWxnbyAqL1xcbiAzMjU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShhZV9hbGdvLCBcXHUwMDI2aG5hZTNfYWVfYWxnb19saXN0LCBub2RlKSB7XFxuIDMyNjpcXHRcXHRcXHRpZCA9IHBjaV9tYXRjaF9pZChhZV9hbGdvLVxcdTAwM2VwZGV2X2lkX3RhYmxlLCBhZV9kZXYtXFx1MDAzZXBkZXYpO1xcbiAzMjc6XFx0XFx0XFx0aWYgKCFpZClcXG4gMzI4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMjk6XFx0XFxuIDMzMDpcXHRcXHRcXHRpZiAoIWFlX2FsZ28tXFx1MDAzZW9wcykge1xcbiAzMzE6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2YWVfZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIFxcXCJhZV9hbGdvIG9wcyBhcmUgbnVsbFxcXFxuXFxcIik7XFxuIDMzMjpcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4gMzMzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gMzM0OlxcdFxcdFxcdH1cXG4gMzM1OlxcdFxcdFxcdGFlX2Rldi1cXHUwMDNlb3BzID0gYWVfYWxnby1cXHUwMDNlb3BzO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRcXHRyZXQgPSBhZV9kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaW5pdF9hZV9kZXYoYWVfZGV2KTtcXG4gMzM4OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gMzM5OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFlX2Rldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbiAzNDA6XFx0XFx0XFx0XFx0XFx0XFxcImluaXQgYWVfZGV2IGVycm9yLCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gMzQxOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gMzQyOlxcdFxcdFxcdH1cXG4gMzQzOlxcdFxcbiAzNDQ6XFx0XFx0XFx0LyogYWVfZGV2IGluaXQgc2hvdWxkIHNldCBmbGFnICovXFxuIDM0NTpcXHRcXHRcXHRobmFlM19zZXRfYml0KGFlX2Rldi1cXHUwMDNlZmxhZywgSE5BRTNfREVWX0lOSVRFRF9CLCAxKTtcXG4gMzQ2OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDc6XFx0XFx0fVxcbiAzNDg6XFx0XFxuIDM0OTpcXHRcXHQvKiBjaGVjayB0aGUgY2xpZW50IGxpc3QgZm9yIHRoZSBtYXRjaCB3aXRoIHRoaXMgYWVfZGV2IHR5cGUgYW5kXFxuIDM1MDpcXHRcXHQgKiBpbml0aWFsaXplIHRoZSBmaWd1cmUgb3V0IGNsaWVudCBpbnN0YW5jZVxcbiAzNTE6XFx0XFx0ICovXFxuIDM1MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgXFx1MDAyNmhuYWUzX2NsaWVudF9saXN0LCBub2RlKSB7XFxuIDM1MzpcXHRcXHRcXHRyZXQgPSBobmFlM19pbml0X2NsaWVudF9pbnN0YW5jZShjbGllbnQsIGFlX2Rldik7XFxuIDM1NDpcXHRcXHRcXHRpZiAocmV0KVxcbiAzNTU6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2YWVfZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuIDM1NjpcXHRcXHRcXHRcXHRcXHRcXFwibWF0Y2ggYW5kIGluc3RhbnRpYXRpb24gZmFpbGVkLCByZXQgPSAlZFxcXFxuXFxcIixcXG4gMzU3OlxcdFxcdFxcdFxcdFxcdHJldCk7XFxuIDM1ODpcXHRcXHR9XFxuIDM1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MDA6NTEuMzM3MjMyMDU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDQ5OTY4OTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb2RlIHNuaXBwZXQsIGV4cHJlc3NlZCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbml0aWFsaXNpbmcgdGhlIEFFIERldmljZSoqXG5cblJpZ2h0LCBzbyBJIHNlZSBhIGZ1bmN0aW9uIGNhbGw6IGBhZV9kZXYtXHUwMDNlb3BzLVx1MDAzZWluaXRfYWVfZGV2KGFlX2RldilgLiAgTG9va3MgbGlrZSB3ZSdyZSBjYWxsaW5nIGEgZnVuY3Rpb24gcG9pbnRlciwgYGluaXRfYWVfZGV2YCwgd2hpY2ggaXMgcGFydCBvZiBhIHNldCBvZiBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBhbiBgYWVfZGV2YCBzdHJ1Y3R1cmUuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZTsgYSBnZW5lcmljIGludGVyZmFjZSB3aXRoIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogYGluaXRfYWVfZGV2YCBhY3R1YWxseSAqZG9lcyogaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LlxuXG5CYXNlZCBvbiB0aGUgZmlsZSByZWZlcmVuY2UgXCJoY2xnZV9tYWluLmNcIiwgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGFuIEhDTEdFIChsaWtlbHkgYSBoYXJkd2FyZSBjb21wb25lbnQgb3IgZHJpdmVyKS4gQW5kIHRoZW4gSSBzZWUgdGhhdCBgaW5pdF9hZV9kZXZgIGlzIHJlc29sdmVkIHRvIGBoY2xnZV9pbml0X2FlX2RldmAuIEFoYSEgU28sIHdpdGhpbiB0aGUgSENMR0UgY29kZSwgdGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHRoZSBBRSAocHJlc3VtYWJseSBcIkF1dG8gRXhwb3N1cmVcIiBvciBhIHNpbWlsYXIgZnVuY3Rpb24pIGlzIGBoY2xnZV9pbml0X2FlX2RldmAuIFRoaXMgd2lsbCBjb250YWluIGFsbCB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgcmVnaXN0ZXIgc2V0dGluZ3MsIGNsb2NrIGNvbmZpZ3VyYXRpb25zLCBETUEgc2V0dXAsIGFuZCBldmVyeXRoaW5nIGVsc2UgbmVlZGVkIHRvIGJyaW5nIHRoZSBBRSBkZXZpY2UgdXAgdG8gYSB1c2FibGUgc3RhdGUgd2l0aGluIHRoZSBIQ0xHRSBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODc2LCJPdXRwdXRUb2tlbnMiOjU3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMToyMS43ODcyMDM2NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjk2MDA6XFx0XFxuOTYwMTpcXHRcXHRyZXQgPSBoY2xnZV9tYWNfaW5pdChoZGV2KTtcXG45NjAyOlxcdFxcdGlmIChyZXQpIHtcXG45NjAzOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1hYyBpbml0IGVycm9yLCByZXQgPSAlZFxcXFxuXFxcIiwgcmV0KTtcXG45NjA0OlxcdFxcdFxcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XFxuOTYwNTpcXHRcXHR9XFxuOTYwNjpcXHRcXG45NjA3OlxcdFxcdHJldCA9IGhjbGdlX2NvbmZpZ190c28oaGRldiwgSENMR0VfVFNPX01TU19NSU4sIEhDTEdFX1RTT19NU1NfTUFYKTtcXG45NjA4OlxcdFxcdGlmIChyZXQpIHtcXG45NjA5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkVuYWJsZSB0c28gZmFpbCwgcmV0ID0lZFxcXFxuXFxcIiwgcmV0KTtcXG45NjEwOlxcdFxcdFxcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XFxuOTYxMTpcXHRcXHR9XFxuOTYxMjpcXHRcXG45NjEzOlxcdFxcdHJldCA9IGhjbGdlX2NvbmZpZ19ncm8oaGRldik7XFxuOTYxNDpcXHRcXHRpZiAocmV0KVxcbjk2MTU6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjE2OlxcdFxcbjk2MTc6XFx0XFx0cmV0ID0gaGNsZ2VfaW5pdF92bGFuX2NvbmZpZyhoZGV2KTtcXG45NjE4OlxcdFxcdGlmIChyZXQpIHtcXG45NjE5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlZMQU4gaW5pdCBmYWlsLCByZXQgPSVkXFxcXG5cXFwiLCByZXQpO1xcbjk2MjA6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjIxOlxcdFxcdH1cXG45NjIyOlxcdFxcbjk2MjM6XFx0XFx0cmV0ID0gaGNsZ2VfdG1fc2NoZF9pbml0KGhkZXYpO1xcbjk2MjQ6XFx0XFx0aWYgKHJldCkge1xcbjk2MjU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwidG0gc2NoZCBpbml0IGZhaWwsIHJldCA9JWRcXFxcblxcXCIsIHJldCk7XFxuOTYyNjpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk2Mjc6XFx0XFx0fVxcbjk2Mjg6XFx0XFxuOTYyOTpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX3Jzc19pbml0X2NmZyhcXHUwMDI2aGRldi1cXHUwMDNldnBvcnQtXFx1MDAzZW5pYywgaGRldi1cXHUwMDNlYWVfZGV2LFxcbjk2MzA6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmhkZXYtXFx1MDAzZXJzc19jZmcpO1xcbjk2MzE6XFx0XFx0aWYgKHJldCkge1xcbjk2MzI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGluaXQgcnNzIGNmZywgcmV0ID0gJWRcXFxcblxcXCIsIHJldCk7XFxuOTYzMzpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk2MzQ6XFx0XFx0fVxcbjk2MzU6XFx0XFxuOTYzNjpcXHRcXHRyZXQgPSBoY2xnZV9yc3NfaW5pdF9odyhoZGV2KTtcXG45NjM3OlxcdFxcdGlmIChyZXQpIHtcXG45NjM4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIlJzcyBpbml0IGZhaWwsIHJldCA9JWRcXFxcblxcXCIsIHJldCk7XFxuOTYzOTpcXHRcXHRcXHRnb3RvIGVycl9tZGlvYnVzX3VucmVnO1xcbjk2NDA6XFx0XFx0fVxcbjk2NDE6XFx0XFxuOTY0MjpcXHRcXHRyZXQgPSBpbml0X21ncl90YmwoaGRldik7XFxuOTY0MzpcXHRcXHRpZiAocmV0KSB7XFxuOTY0NDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJtYW5hZ2VyIHRhYmxlIGluaXQgZmFpbCwgcmV0ID0lZFxcXFxuXFxcIiwgcmV0KTtcXG45NjQ1OlxcdFxcdFxcdGdvdG8gZXJyX21kaW9idXNfdW5yZWc7XFxuOTY0NjpcXHRcXHR9XFxuOTY0NzpcXHRcXG45NjQ4OlxcdFxcdHJldCA9IGhjbGdlX2luaXRfZmRfY29uZmlnKGhkZXYpO1xcbjk2NDk6XFx0XFx0aWYgKHJldCkge1xcbjk2NTA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjk2NTE6XFx0XFx0XFx0XFx0XFxcImZkIHRhYmxlIGluaXQgZmFpbCwgcmV0PSVkXFxcXG5cXFwiLCByZXQpO1xcbjk2NTI6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjUzOlxcdFxcdH1cXG45NjU0OlxcdFxcbjk2NTU6XFx0XFx0cmV0ID0gaGNsZ2VfcHRwX2luaXQoaGRldik7XFxuOTY1NjpcXHRcXHRpZiAocmV0KVxcbjk2NTc6XFx0XFx0XFx0Z290byBlcnJfbWRpb2J1c191bnJlZztcXG45NjU4OlxcdFxcbjk2NTk6XFx0XFx0cmV0ID0gaGNsZ2VfdXBkYXRlX3BvcnRfaW5mbyhoZGV2KTtcXG45NjYwOlxcdFxcdGlmIChyZXQpXFxuOTY2MTpcXHRcXHRcXHRnb3RvIGVycl9wdHBfdW5pbml0O1xcbjk2NjI6XFx0XFxuOTY2MzpcXHRcXHRpZiAoaGRldi1cXHUwMDNlaHcubWFjLm1lZGlhX3R5cGUgIT0gSE5BRTNfTUVESUFfVFlQRV9DT1BQRVIpIHtcXG45NjY0OlxcdFxcdFxcdGhkZXYtXFx1MDAzZWh3Lm1hYy5yZXFfYXV0b25lZyA9IGhkZXYtXFx1MDAzZWh3Lm1hYy5hdXRvbmVnO1xcbjk2NjU6XFx0XFx0XFx0aWYgKGhkZXYtXFx1MDAzZWh3Lm1hYy5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSBcXHUwMDI2XFx1MDAyNlxcbjk2NjY6XFx0XFx0XFx0ICAgIGhkZXYtXFx1MDAzZWh3Lm1hYy5zcGVlZCAhPSBTUEVFRF9VTktOT1dOKVxcbjk2Njc6XFx0XFx0XFx0XFx0aGRldi1cXHUwMDNlaHcubWFjLnJlcV9zcGVlZCA9IGhkZXYtXFx1MDAzZWh3Lm1hYy5zcGVlZDtcXG45NjY4OlxcdFxcdH1cXG45NjY5OlxcdFxcbjk2NzA6XFx0XFx0cmV0ID0gaGNsZ2Vfc2V0X2F1dG9uZWdfc3BlZWRfZHVwKGhkZXYpO1xcbjk2NzE6XFx0XFx0aWYgKHJldCkge1xcbjk2NzI6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LFxcbjk2NzM6XFx0XFx0XFx0XFx0XFxcImZhaWxlZCB0byBzZXQgYXV0b25lZyBzcGVlZCBkdXBsZXgsIHJldCA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbjk2NzQ6XFx0XFx0XFx0Z290byBlcnJfcHRwX3VuaW5pdDtcXG45Njc1OlxcdFxcdH1cXG45Njc2OlxcdFxcbjk2Nzc6XFx0XFx0SU5JVF9LRklGTyhoZGV2LVxcdTAwM2VtYWNfdG5sX2xvZyk7XFxuOTY3ODpcXHRcXG45Njc5OlxcdFxcdGhjbGdlX2RjYl9vcHNfc2V0KGhkZXYpO1xcbjk2ODA6XFx0XFxuOTY4MTpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2aGRldi1cXHUwMDNlcmVzZXRfdGltZXIsIGhjbGdlX3Jlc2V0X3RpbWVyLCAwKTtcXG45NjgyOlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZoZGV2LVxcdTAwM2VzZXJ2aWNlX3Rhc2ssIGhjbGdlX3NlcnZpY2VfdGFzayk7XFxuOTY4MzpcXHRcXG45Njg0OlxcdFxcdGhjbGdlX2NsZWFyX2FsbF9ldmVudF9jYXVzZShoZGV2KTtcXG45Njg1OlxcdFxcdGhjbGdlX2NsZWFyX3Jlc2V0dGluZ19zdGF0ZShoZGV2KTtcXG45Njg2OlxcdFxcbjk2ODc6XFx0XFx0LyogTG9nIGFuZCBjbGVhciB0aGUgaHcgZXJyb3JzIHRob3NlIGFscmVhZHkgb2NjdXJyZWQgKi9cXG45Njg4OlxcdFxcdGlmIChobmFlM19kZXZfcmFzX2ltcF9zdXBwb3J0ZWQoaGRldikpXFxuOTY4OTpcXHRcXHRcXHRoY2xnZV9oYW5kbGVfb2NjdXJyZWRfZXJyb3IoaGRldik7XFxuOTY5MDpcXHRcXHRlbHNlXFxuOTY5MTpcXHRcXHRcXHRoY2xnZV9oYW5kbGVfYWxsX2huc19od19lcnJvcnMoYWVfZGV2KTtcXG45NjkyOlxcdFxcbjk2OTM6XFx0XFx0LyogcmVxdWVzdCBkZWxheWVkIHJlc2V0IGZvciB0aGUgZXJyb3IgcmVjb3ZlcnkgYmVjYXVzZSBhbiBpbW1lZGlhdGVcXG45Njk0OlxcdFxcdCAqIGdsb2JhbCByZXNldCBvbiBhIFBGIGFmZmVjdGluZyBwZW5kaW5nIGluaXRpYWxpemF0aW9uIG9mIG90aGVyIFBGc1xcbjk2OTU6XFx0XFx0ICovXFxuOTY5NjpcXHRcXHRpZiAoYWVfZGV2LVxcdTAwM2Vod19lcnJfcmVzZXRfcmVxKSB7XFxuOTY5NzpcXHRcXHRcXHRlbnVtIGhuYWUzX3Jlc2V0X3R5cGUgcmVzZXRfbGV2ZWw7XFxuOTY5ODpcXHRcXG45Njk5OlxcdFxcdFxcdHJlc2V0X2xldmVsID0gaGNsZ2VfZ2V0X3Jlc2V0X2xldmVsKGFlX2RldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MDE6MjEuNzg3ODM0MTY1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjM5ODA0MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIExvb2tpbmcgY2xvc2VyIGF0IHRoaXMgYGhjbGdlX2luaXRfYWVfZGV2YCBmdW5jdGlvbiwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGRvaW5nIGEgKmxvdCogb2YgbG93LWxldmVsIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLiBJIHNlZSBpdCBzZW5kaW5nIGEgYnVuY2ggb2YgY29tbWFuZHMgZGlyZWN0bHkgdG8gdGhlIGhhcmR3YXJlIOKAkyB1c2luZyBgaGNsZ2VfY21kX3NlbmRgLCBuYXR1cmFsbHkuIFRoYXQncyBhIGNydWNpYWwgcG9pbnQuIElmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBvciBpc24ndCByZXNwb25kaW5nLCB0aG9zZSBjb21tYW5kIHRyYW5zbWlzc2lvbnMgYXJlIGdvaW5nIHRvIHRpbWUgb3V0LCBvciBzaW1wbHkgZmFpbCBvdXRyaWdodC4gV2UncmUgZ29pbmcgdG8gZ2V0IHNvbWUgdGVsbHRhbGUgZXJyb3JzLlxuXG5Tbywgd2hlcmUgZG9lcyB0aGF0IGxlYWQ/IFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGhjbGdlX2NtZF9zZW5kYCBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBhbmQgaW1wb3J0YW50bHksIGl0cyBlcnJvciBoYW5kbGluZy4gVGhhdCdzIHdoZXJlIHdlJ2xsIGxpa2VseSBmaW5kIHRoZSBrZXkgdG8gcGlucG9pbnRpbmcgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IGhhcmR3YXJlLXJlbGF0ZWQgaXNzdWVzLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uIGlzIHVwIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyNSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MDE6MjUuMjUxODE4MDE4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjQwNzA2MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNsZ2VfY21kX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMToyNS4zNDQyMzYyNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MTEwNzU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgaW5pdGlhbGx5IGZvY3VzZWQgb24gYGhjbGdlX2NtZC5jYCwgYnV0IHNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcXVpdGUgcmlnaHQuIEkgaGF2ZSBhIGh1bmNoIHRoYXQgdGhlIGZ1bmN0aW9uIEknbSBsb29raW5nIGZvciwgc3BlY2lmaWNhbGx5IHRoZSBgaGNsZ2VfY21kX3NlbmRgIGNhbGwsIG1pZ2h0IGJlIGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQgZmlsZSBhbHRvZ2V0aGVyLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlIGluIG15IHNlYXJjaC4gTGV0IG1lIHBpdm90IGFuZCBpbnN0ZWFkIG9mIGFzc3VtaW5nLCBkaXJlY3RseSBzZWFyY2ggZm9yIHRoZSBmdW5jdGlvbiBgaGNsZ2VfY21kX3NlbmRgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgYWNjdXJhdGUgcGljdHVyZSBvZiB3aGVyZSBpdCdzIGFjdHVhbGx5IGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBwcm9qZWN0LiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCB0byBlZmZpY2llbnRseSBsb2NhdGUgdGhlIHJlbGV2YW50IGNvZGUgc2VjdGlvbnMgYW5kIEknbGwgc2VlIHdoYXQgdGhlIHJlc3VsdHMgdGVsbCBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNTQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMToyOC40OTUzNDcxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTM2NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBoY2xnZV9jbWRfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zM1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmg9OTAyPXN0cnVjdCBoY2xnZV9odztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfY21kLmg6OTAzOmludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2NtZC5oLTkwNC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzAyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNsZ2VfbWFjX21ncl90YmxfZW50cnlfY21kIGhjbGdlX21ncl90YWJsZVtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0zMTktICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MzIwOmludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjI4LjU1NTQ5MTIyNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NTExNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW50ZXJuYWwgUmV2aWV3IG9mIGBoY2xnZV9jbWRfc2VuZGAqKlxuXG5BbHJpZ2h0LCBteSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBoY2xnZV9jbWRfc2VuZGAgZnVuY3Rpb24sIGFuZCBJJ20gaG9taW5nIGluIG9uIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgaGNsZ2VfbWFpbi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgaGVhZGFjaGVzKSBsaWtlbHkgcmVzaWRlLiBJJ20gZXNzZW50aWFsbHkgdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZTsgdW5kZXJzdGFuZGluZyAqaG93KiBhIGNvbW1hbmQgZ2V0cyBzZW50IGlzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5dGhpbmcgZWxzZS4gVGhpcyBpcyBsaWtlbHkgdGhlIGNvcmUgb2YgdGhlIGNvbW1hbmQgYW5kIGNvbnRyb2wgcGF0aC4gSSBleHBlY3QgdG8gZmluZCB0aGUgYWN0dWFsIG1lY2hhbmlzbSBmb3IgcGFja2V0IGZvcm1hdHRpbmcsIGhhcmR3YXJlIGludGVyYWN0aW9uLCBlcnJvciBoYW5kbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIHJldHJ5IGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJIGFtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBpbml0aWFsIGVudHJ5IHBvaW50IGZvciBhbnkgYW5kIGFsbCBjb21tYW5kcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MzMsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMTozMS42OTIwMDg0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0aW50IGhjbGdlX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9odyAqaHcsIHN0cnVjdCBoY2xnZV9kZXNjICpkZXNjLCBpbnQgbnVtKVxcbiAzMjE6XFx0e1xcbiAzMjI6XFx0XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXFx1MDAyNmh3LVxcdTAwM2VodywgZGVzYywgbnVtKTtcXG4gMzIzOlxcdH1cXG4gMzI0OlxcdFxcbiAzMjU6XFx0c3RhdGljIHZvaWQgaGNsZ2VfdHJhY2VfY21kX3NlbmQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gMzI2OlxcdFxcdFxcdFxcdFxcdCBpbnQgbnVtLCBib29sIGlzX3NwZWNpYWwpXFxuIDMyNzpcXHR7XFxuIDMyODpcXHRcXHRpbnQgaTtcXG4gMzI5OlxcdFxcbiAzMzA6XFx0XFx0dHJhY2VfaGNsZ2VfcGZfY21kX3NlbmQoaHcsIGRlc2MsIDAsIG51bSk7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdGlmICghaXNfc3BlY2lhbCkge1xcbiAzMzM6XFx0XFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjIG51bTsgaSsrKVxcbiAzMzQ6XFx0XFx0XFx0XFx0dHJhY2VfaGNsZ2VfcGZfY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjW2ldLCBpLCBudW0pO1xcbiAzMzU6XFx0XFx0fSBlbHNlIHtcXG4gMzM2OlxcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBudW07IGkrKylcXG4gMzM3OlxcdFxcdFxcdFxcdHRyYWNlX2hjbGdlX3BmX3NwZWNpYWxfY21kX3NlbmQoaHcsIChfX2xlMzIgKilcXHUwMDI2ZGVzY1tpXSxcXG4gMzM4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGksIG51bSk7XFxuIDMzOTpcXHRcXHR9XFxuIDM0MDpcXHR9XFxuIDM0MTpcXHRcXG4gMzQyOlxcdHN0YXRpYyB2b2lkIGhjbGdlX3RyYWNlX2NtZF9nZXQoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gMzQzOlxcdFxcdFxcdFxcdFxcdGludCBudW0sIGJvb2wgaXNfc3BlY2lhbClcXG4gMzQ0OlxcdHtcXG4gMzQ1OlxcdFxcdGludCBpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRpZiAoIUhDTEdFX0NPTU1fU0VORF9TWU5DKGxlMTZfdG9fY3B1KGRlc2MtXFx1MDAzZWZsYWcpKSlcXG4gMzQ4OlxcdFxcdFxcdHJldHVybjtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0dHJhY2VfaGNsZ2VfcGZfY21kX2dldChodywgZGVzYywgMCwgbnVtKTtcXG4gMzUxOlxcdFxcbiAzNTI6XFx0XFx0aWYgKCFpc19zcGVjaWFsKSB7XFxuIDM1MzpcXHRcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnVtOyBpKyspXFxuIDM1NDpcXHRcXHRcXHRcXHR0cmFjZV9oY2xnZV9wZl9jbWRfZ2V0KGh3LCBcXHUwMDI2ZGVzY1tpXSwgaSwgbnVtKTtcXG4gMzU1OlxcdFxcdH0gZWxzZSB7XFxuIDM1NjpcXHRcXHRcXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnVtOyBpKyspXFxuIDM1NzpcXHRcXHRcXHRcXHR0cmFjZV9oY2xnZV9wZl9zcGVjaWFsX2NtZF9nZXQoaHcsIChfX2xlMzIgKilcXHUwMDI2ZGVzY1tpXSxcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpLCBudW0pO1xcbiAzNTk6XFx0XFx0fVxcbiAzNjA6XFx0fVxcbiAzNjE6XFx0XFxuIDM2MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGhjbGdlX2NvbW1fY21xX29wcyBoY2xnZV9jbXFfb3BzID0ge1xcbiAzNjM6XFx0XFx0LnRyYWNlX2NtZF9zZW5kID0gaGNsZ2VfdHJhY2VfY21kX3NlbmQsXFxuIDM2NDpcXHRcXHQudHJhY2VfY21kX2dldCA9IGhjbGdlX3RyYWNlX2NtZF9nZXQsXFxuIDM2NTpcXHR9O1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRzdGF0aWMgaW50IGhjbGdlX21hY191cGRhdGVfc3RhdHNfZGVmZWN0aXZlKHN0cnVjdCBoY2xnZV9kZXYgKmhkZXYpXFxuIDM2ODpcXHR7XFxuIDM2OTpcXHQjZGVmaW5lIEhDTEdFX01BQ19DTURfTlVNIDIxXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjMxLjY5MjQ2OTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NzkwOTU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsOiBoY2xnZV9jb21tX2NtZF9zZW5kKipcblxuUmlnaHQsIHNvIHRoZSBzeXN0ZW0gaXMgY2FsbGluZyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAuIFRoYXQncyB0aGUga2V5LiBUaGF0IGZ1bmN0aW9uIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb21tYW5kIHNlbmRpbmcsIGFuZCB0aGUgXCJoY2xnZVwiIHByZWZpeCBzdHJvbmdseSBwb2ludHMgdG8gaXRzIGludGVncmF0aW9uIGludG8gYSBzcGVjaWZpYyBIYXJkd2FyZSBDb25maWd1cmF0aW9uIExhbmd1YWdlIEdFIChHbG9iYWwgRW52aXJvbm1lbnQpIGNvbW11bmljYXRpb24gbW9kdWxlLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMuIEkga25vdyB0aGUgbGlrZWx5IHB1cnBvc2UgYW5kIHN0cnVjdHVyZS5cblxuRGVwZW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0LCB3aGljaCBJJ2xsIGFzc3VtZSBpcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBzY2VuYXJpbywgdGhlIG1vZHVsZSB0aGlzIGNvZGUgaW50ZXJhY3RzIHdpdGggbGlrZWx5IHJlcXVpcmVzIHNwZWNpZmljIG1lc3NhZ2VzIGFuZCBkYXRhIHRvIGJlIHNldC4gSXMgdGhpcyByZWxhdGVkIHRvIGRlYnVnZ2luZywgY29uZmlndXJhdGlvbiwgb3IgY29udHJvbD8gS25vd2luZyB0aGF0LCBhbmQgbG9va2luZyBhdCB0aGUgY29tbWFuZCwgSSdkIHRoZW4gY29uc2lkZXI6IHdoYXQgZG9lcyB0aGUgY29tbWFuZCAqZG8qPyBJcyBpdCBhIHF1ZXJ5LCBhIHNldCBjb21tYW5kLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBUaGUgbmF0dXJlIG9mIHRoZSBjb21tYW5kIHdvdWxkIGluZGljYXRlIHRvIG1lIHdoYXQncyBnb2luZyBvbiwgYW5kIGZyb20gdGhlcmUgSSB3b3VsZCBpbmZlciB0aGUgbmV4dCBzdGVwcywgYW5kIHBvdGVudGlhbCBpc3N1ZXMgb3IgZGVzaWduIGRlY2lzaW9ucy5cblxuRnJvbSB0aGUgbWVyZSBjYWxsaW5nIG9mIHRoYXQgZnVuY3Rpb24sIEkgY2FuIGluZmVyIGEgY2VydGFpbiBkZWdyZWUgb2YgY29tcGxleGl0eS4gSXQgbXVzdCByZXF1aXJlIGEgc3BlY2lmaWMgZm9ybWF0IG9yIHN0cnVjdHVyZSBvZiBjb21tYW5kcywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGxldmVsIG9mIGF1dGhlbnRpY2F0aW9uIG9yIGF1dGhvcml6YXRpb24uIFdoYXQgZGF0YSBpcyBpdCBiZWluZyBzZW50PyBXaGF0IGlzIGl0cyByZXNwb25zZT8gSXMgdGhlcmUgZXJyb3IgaGFuZGxpbmcgYnVpbHQgaW50byB0aGUgc2VuZGluZyBtZWNoYW5pc20sIG9yIGlzIHRoYXQgaGFuZGxlZCBhdCBhIGhpZ2hlciBsZXZlbD8gVGhlc2UgYXJlIHNvbWUgb2YgdGhlIG1vc3QgcHJvbWluZW50IHF1ZXN0aW9ucyBJIHdvdWxkIGJlIHN0YXJ0aW5nIHRvIHdvcmsgdGhyb3VnaCB3aGVuIEkgc2VlIHRoaXMgbGluZSBvZiBjb2RlLiBJdCdzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHN5c3RlbSdzIGV4ZWN1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzQsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjM1LjQ3MDM4MzE2MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NTg4OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjbGdlX2NvbW1fY21kX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz03OD1pbnQgaGNsZ2VfY29tbV9maXJtd2FyZV9jb21wYXRfY29uZmlnKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6MTAxOlxcdHJldHVybiBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0xMDItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYz0yMjg9aW50IGhjbGdlX2NvbW1fY21kX3F1ZXJ5X3ZlcnNpb25fYW5kX2NhcGFiaWxpdHkoc3RydWN0IGhuYWUzX2FlX2RldiAqYWVfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy0yMzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYzoyNDA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtMjQxLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jPTQzNT1zdGF0aWMgaW50IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjQ2NTogKiBoY2xnZV9jb21tX2NtZF9zZW5kIC0gc2VuZCBjb21tYW5kIHRvIGNvbW1hbmQgcXVldWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTQ2Ni0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzItICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmM6NDczOmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuYy00NzQtXFx0XFx0XFx0aW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmMtNTIxLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jOjUyMjpFWFBPUlRfU1lNQk9MX0dQTChoY2xnZV9jb21tX2NtZF9zZW5kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX2NtZC5jLTUyMy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg9NDg1PWludCBoY2xnZV9jb21tX2FsbG9jX2NtZF9xdWV1ZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIGludCByaW5nX3R5cGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmg6NDg2OmludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9jbWQuaC00ODctXFx0XFx0XFx0aW50IG51bSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTg0PWludCBoY2xnZV9jb21tX3NldF9yc3NfdGNfbW9kZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsIHUxNiAqdGNfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0xMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYzoxMTE6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTEyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTE1MT1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX3R1cGxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM6MTc1OlxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTE3Ni1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jPTI3Nj1pbnQgaGNsZ2VfY29tbV9zZXRfcnNzX2luZGlyX3RhYmxlKHN0cnVjdCBobmFlM19hZV9kZXYgKmFlX2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtMzA0LVxcdFxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMwNTpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMDYtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYz0zMTc9aW50IGhjbGdlX2NvbW1fc2V0X3Jzc19pbnB1dF90dXBsZShzdHJ1Y3QgaGNsZ2VfY29tbV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jLTMzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjMzODpcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy0zMzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmM9MzgzPWludCBoY2xnZV9jb21tX3NldF9yc3NfYWxnb19rZXkoc3RydWN0IGhjbGdlX2NvbW1faHcgKmh3LCBjb25zdCB1OCBoZnVuYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fcnNzLmMtNDExLVxcdFxcdGtleV9vZmZzZXQrKztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3Jzcy5jOjQxMjpcXHRcXHRyZXQgPSBoY2xnZV9jb21tX2NtZF9zZW5kKGh3LCBcXHUwMDI2ZGVzYywgMSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV9yc3MuYy00MTMtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYz01OD1pbnQgaGNsZ2VfY29tbV90cXBzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaG5hZTNfaGFuZGxlICpoYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTcyLVxcdFxcdGRlc2MuZGF0YVswXSA9IGNwdV90b19sZTMyKHRxcC1cXHUwMDNlaW5kZXgpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmM6NzM6XFx0XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChodywgXFx1MDAyNmRlc2MsIDEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fdHFwX3N0YXRzLmMtNzQtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19jb21tb24vaGNsZ2VfY29tbV90cXBfc3RhdHMuYy04Ni1cXHRcXHRkZXNjLmRhdGFbMF0gPSBjcHVfdG9fbGUzMih0cXAtXFx1MDAzZWluZGV4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jOjg3OlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX3NlbmQoaHcsIFxcdTAwMjZkZXNjLCAxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2NvbW1vbi9oY2xnZV9jb21tX3RxcF9zdGF0cy5jLTg4LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYz0zNDQyPWludCBoY2xnZV9oYW5kbGVfdmZfcXVldWVfZXJyX3JhcyhzdHJ1Y3QgaGNsZ2VfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jLTM0NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX2Vyci5jOjM0NjA6XFx0cmV0ID0gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aGRldi1cXHUwMDNlaHcuaHcsIGRlc2MsIDIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9lcnIuYy0zNDYxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MzIwPWludCBoY2xnZV9jbWRfc2VuZChzdHJ1Y3QgaGNsZ2VfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzozMjI6XFx0cmV0dXJuIGhjbGdlX2NvbW1fY21kX3NlbmQoXFx1MDAyNmh3LVxcdTAwM2VodywgZGVzYywgbnVtKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jLTMyMy19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM9NTA9aW50IGhjbGdldmZfY21kX3NlbmQoc3RydWN0IGhjbGdldmZfaHcgKmh3LCBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYywgaW50IG51bSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNTEte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYzo1MjpcXHRyZXR1cm4gaGNsZ2VfY29tbV9jbWRfc2VuZChcXHUwMDI2aHctXFx1MDAzZWh3LCBkZXNjLCBudW0pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy01My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjM1LjcxNjAwOTkyOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDExNjY3OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRHJpdmVyIFByb2JlIEZhaWx1cmUqKlxuXG5Pa2F5LCBzbyBgaGNsZ2VfY29tbV9jbWRfc2VuZGAgaXMgdGhlIGtleSBmdW5jdGlvbiBoZXJlIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBoYXJkd2FyZSdzIGNvbW1hbmQgcXVldWUuIE1ha2VzIHNlbnNlLiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcmVzcG9uZGluZywgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byB0aW1lb3V0IG9yIGVycm9yIG91dC4gVGhhdCdzIGEgY2xhc3NpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBpc3N1ZS4gQW5kIGlmIGBoY2xnZV9jb21tX2NtZF9zZW5kYCBmYWlscyBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHRoZW4gYGhjbGdlX2luaXRfYWVfZGV2YCBmYWlscywgYW5kICpib29tKiwgdGhlIGRyaXZlciBwcm9iZSBoaXRzIGEgcm9hZGJsb2NrIGFuZCBmYWlscy4gU3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBmb3IgZGVidWdnaW5nIGRldmljZSBkcml2ZXIgZmFpbHVyZXMuXG5cbkJ1dCB3YWl0IGEgbWludXRl4oCmc3l6LXBjaSBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgcmlnaHQ/IFRoYXQgY291bGQgYmUgYSB3YXkgYXJvdW5kIHRoaXMuIFRoZSBjaGFsbGVuZ2Ugd2l0aCBlbXVsYXRpb24sIHRob3VnaCwgaXMgdGhhdCBzeXprYWxsZXIgbmVlZHMgdmVyeSBwcmVjaXNlIGluZm9ybWF0aW9uOiB0aGUgZXhhY3QgUENJIGRldmljZSBJRCBhbmQgdGhlIHNwZWNpZmljIHJlZ2lzdGVycyB0byBlbXVsYXRlLiBJdCdzIGEgc2lnbmlmaWNhbnQgdW5kZXJ0YWtpbmcgdG8gc2V0IHRoYXQgdXAgY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdpdGhvdXQgdGhlIGhhcmR3YXJlIGRpcmVjdGx5IHByZXNlbnQuXG5cblNvLCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBzeXprYWxsZXIgYWxyZWFkeSBoYXZlIGEgc3BlY2lmaWMgZW11bGF0aW9uIHNldHVwIGZvciB0aGlzIEhOUzMgZGV2aWNlPyBUaGF0IHdvdWxkIGJlIGEgaHVnZSBzaG9ydGN1dC4gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGV4aXN0aW5nIHN5emthbGxlciBkZXNjcmlwdGlvbiBmb3IgSE5TMy4gVGhhdCdzIHRoZSBuZXh0IHN0ZXAg4oCTIGxldCdzIHNlZSB3aGF0J3MgaW4gdGhlIHN5emthbGxlciByZXBvc2l0b3J5IGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzc0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjQxLjEyNzY4MTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjE5MjExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJobnMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAxOjQxLjIxNjkxMDYwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjE2MjQ5MzkxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhOUzMgRHJpdmVyIGFuZCBTeXprYWxsZXIgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBhcmVuJ3QgYWN0dWFsbHkgKmluKiB0aGUga2VybmVsIHRyZWUsIHJpZ2h0PyBUaGV5J3JlIGV4dGVybmFsLCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoYXQgdGVzdGluZyBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gSSBmaW5kIHNvbWUgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBITlMzIGhhcmR3YXJlIHdpdGhpbiB0aGUga2VybmVsIGl0c2VsZj8gSnVzdCB0byBjbGFyaWZ5LCBubywgaXQncyBhIGRlZGljYXRlZCBoYXJkd2FyZSBkcml2ZXIuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3IgZnV6emluZzogQ2FuIGV0aHRvb2wgY29tbWFuZHMgZXZlbiBiZSByZWFjaGVkIGlmIHRoZSBkZXZpY2UgcHJvYmUgZmFpbHM/IEl0J3MgaGlnaGx5IHVubGlrZWx5LCBJIGJlbGlldmUuIFRoZSBldGh0b29sIGNvbW1hbmRzIGFyZSByb3V0ZWQgdG8gdGhlIG5ldGRldiwgYW5kIHRoYXQgYG5ldGRldmAgaXMgb25seSByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseSBhZnRlciBhIHN1Y2Nlc3NmdWwgcHJvYmUuIFNvLCB0aGF0J3Mgbm90IGEgbGlrZWx5IHZ1bG5lcmFiaWxpdHkgcGF0aC4gU3RpbGwsIEkgc2hvdWxkIHZlcmlmeSBwcmVjaXNlbHkgd2hlcmUgYHJlZ2lzdGVyX25ldGRldmAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgZHJpdmVyLiBUaGF04oCZcyB0aGUgbmV4dCB0aGluZyB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMTo1Ny4zNzk0MDc4OTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzgwNzA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVnaXN0ZXJfbmV0ZGV2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTUzNzQ9c3RhdGljIGludCBobnMzX2NsaWVudF9pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU0ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM19lbmV0LmM6NTQ4MzpcXHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NDg0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jPTU1MTc9c3RhdGljIHZvaWQgaG5zM19jbGllbnRfdW5pbml0KHN0cnVjdCBobmFlM19oYW5kbGUgKmhhbmRsZSwgYm9vbCByZXNldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jLTU1MjItXFx0aWYgKG5ldGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19VTklOSVRJQUxJWkVEKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfZW5ldC5jOjU1MjM6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzX2VuZXQuYy01NTI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMTo1OC40MTc0OTA1MjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgxMDc1MTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSE5TMyBDbGllbnQgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBoZXJlJ3Mgd2hhdCdzIGhhcHBlbmluZy4gYGhuczNfY2xpZW50X2luaXRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgcmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRldmljZSwgd2hpY2ggaXMga2V5LiBCdXQgYGhuczNfY2xpZW50X2luaXRgIGl0c2VsZiBpcyBjYWxsZWQgYnkgYGhuYWUzX2luaXRfY2xpZW50X2luc3RhbmNlYC4gQW5kIHRoYXQsIGluIHR1cm4sIGlzIHRyaWdnZXJlZCBieSBgaG5hZTNfcmVnaXN0ZXJfYWVfZGV2YCwgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBgaG5zM19wcm9iZWAuIEl0J3MgYSBjaGFpbiwgYW5kIHRoZSBzdWNjZXNzIG9mIHRoZSB3aG9sZSB0aGluZyByZWxpZXMgb24gZWFjaCBzdGVwIHdvcmtpbmcuXG5cblRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgYGhjbGdlX2luaXRfYWVfZGV2YC4gSWYgKnRoYXQqIGZhaWxzLCB0aGVuIGBobmFlM19yZWdpc3Rlcl9hZV9kZXZgIHdpbGwgYWxzbyBmYWlsLCBhbmQgdGhlbiBgaG5zM19jbGllbnRfaW5pdGAgd2lsbCAqbmV2ZXIqIGdldCBjYWxsZWQuIE1lYW5pbmcgdGhlIG5ldGRldiB3b24ndCBiZSByZWdpc3RlcmVkLiBBbmQgaWYgdGhlIG5ldGRldiBpc24ndCByZWdpc3RlcmVkLCBubyBldGh0b29sIGNvbW1hbmRzIGNhbiBiZSBzZW50IHRvIGl0LiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLlxuXG5TbywgaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVSwgd2hpY2ggYXJlIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyB3aG9sZSBwYXRoIGlzIGxpa2VseSBkZWFkIG9uIGFycml2YWwuIFRoZXJlJ3Mgbm8gYWN0dWFsIEhOUzMgaGFyZHdhcmUgZm9yIGl0IHRvIGNvbW11bmljYXRlIHdpdGguIFRoZSBgaGNsZ2VfaW5pdF9hZV9kZXZgIGNhbGwgaXMgZ29pbmcgdG8gZmFpbCBiZWNhdXNlIGl0IG5lZWRzIHRvIGV4ZWN1dGUgYSBjb21tYW5kIHRocm91Z2ggYGhjbGdlX2NvbW1fY21kX3NlbmRgLiBObyBoYXJkd2FyZSwgbm8gc3VjY2Vzcy5cblxuV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEknbSBtaXNzaW5nIHNvbWV0aGluZywgYXJlbid0IEk/IElzIHRoZXJlICphbnkqIGNoYW5jZSB0aGF0IGBoY2xnZV9pbml0X2FlX2RldmAgY291bGQgc3VjY2VlZCAqd2l0aG91dCogdGhlIGhhcmR3YXJlPyBJdCdzIHJhcmUgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgYGhjbGdlX2NvbW1fY21kX3NlbmRgIGFuZCBzZWUgaWYgaXQgaGFzIHNvbWUga2luZCBvZiBmYWxsYmFjayBvciB2aXJ0dWFsaXplZCBwYXRoLiBCZWNhdXNlIGlmIGl0IGRvZXMsIHRoZW4gc29tZSBvciBhbGwgb2YgdGhpcyBjb3VsZCBiZSByZWFjaGFibGUuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ5NCwiT3V0cHV0VG9rZW5zIjo1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMjowNC4yMjgyNDU5MTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDY1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDY1OlxcdCAqIGhjbGdlX2NvbW1fY21kX3NlbmQgLSBzZW5kIGNvbW1hbmQgdG8gY29tbWFuZCBxdWV1ZVxcbiA0NjY6XFx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3RcXG4gNDY3OlxcdCAqIEBkZXNjOiBwcmVmaWxsZWQgZGVzY3JpcHRvciBmb3IgZGVzY3JpYmluZyB0aGUgY29tbWFuZFxcbiA0Njg6XFx0ICogQG51bSA6IHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUgc2VudFxcbiA0Njk6XFx0ICpcXG4gNDcwOlxcdCAqIFRoaXMgaXMgdGhlIG1haW4gc2VuZCBjb21tYW5kIGZvciBjb21tYW5kIHF1ZXVlLCBpdFxcbiA0NzE6XFx0ICogc2VuZHMgdGhlIHF1ZXVlLCBjbGVhbnMgdGhlIHF1ZXVlLCBldGNcXG4gNDcyOlxcdCAqKi9cXG4gNDczOlxcdGludCBoY2xnZV9jb21tX2NtZF9zZW5kKHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodywgc3RydWN0IGhjbGdlX2Rlc2MgKmRlc2MsXFxuIDQ3NDpcXHRcXHRcXHRcXHRpbnQgbnVtKVxcbiA0NzU6XFx0e1xcbiA0NzY6XFx0XFx0Ym9vbCBpc19zcGVjaWFsID0gaGNsZ2VfY29tbV9pc19zcGVjaWFsX29wY29kZShsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpKTtcXG4gNDc3OlxcdFxcdHN0cnVjdCBoY2xnZV9jb21tX2NtcV9yaW5nICpjc3EgPSBcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3E7XFxuIDQ3ODpcXHRcXHRpbnQgcmV0O1xcbiA0Nzk6XFx0XFx0aW50IG50YztcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0aWYgKGh3LVxcdTAwM2VjbXEub3BzLnRyYWNlX2NtZF9zZW5kKVxcbiA0ODI6XFx0XFx0XFx0aHctXFx1MDAzZWNtcS5vcHMudHJhY2VfY21kX3NlbmQoaHcsIGRlc2MsIG51bSwgaXNfc3BlY2lhbCk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmICh0ZXN0X2JpdChIQ0xHRV9DT01NX1NUQVRFX0NNRF9ESVNBQkxFLCBcXHUwMDI2aHctXFx1MDAzZWNvbW1fc3RhdGUpKSB7XFxuIDQ4NzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHctXFx1MDAzZWNtcS5jc3EubG9jayk7XFxuIDQ4ODpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobnVtIFxcdTAwM2UgaGNsZ2VfY29tbV9yaW5nX3NwYWNlKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcSkpIHtcXG4gNDkyOlxcdFxcdFxcdC8qIElmIENNRFEgcmluZyBpcyBmdWxsLCBTVyBIRUFEIGFuZCBIVyBIRUFEIG1heSBiZSBkaWZmZXJlbnQsXFxuIDQ5MzpcXHRcXHRcXHQgKiBuZWVkIHVwZGF0ZSB0aGUgU1cgSEVBRCBwb2ludGVyIGNzcS1cXHUwMDNlbmV4dF90b19jbGVhblxcbiA0OTQ6XFx0XFx0XFx0ICovXFxuIDQ5NTpcXHRcXHRcXHRjc3EtXFx1MDAzZW5leHRfdG9fY2xlYW4gPVxcbiA0OTY6XFx0XFx0XFx0XFx0aGNsZ2VfY29tbV9yZWFkX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX0hFQURfUkVHKTtcXG4gNDk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZody1cXHUwMDNlY21xLmNzcS5sb2NrKTtcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDQ5OTpcXHRcXHR9XFxuIDUwMDpcXHRcXG4gNTAxOlxcdFxcdC8qKlxcbiA1MDI6XFx0XFx0ICogUmVjb3JkIHRoZSBsb2NhdGlvbiBvZiBkZXNjIGluIHRoZSByaW5nIGZvciB0aGlzIHRpbWVcXG4gNTAzOlxcdFxcdCAqIHdoaWNoIHdpbGwgYmUgdXNlIGZvciBoYXJkd2FyZSB0byB3cml0ZSBiYWNrXFxuIDUwNDpcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdG50YyA9IGh3LVxcdTAwM2VjbXEuY3NxLm5leHRfdG9fdXNlO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRoY2xnZV9jb21tX2NtZF9jb3B5X2Rlc2MoaHcsIGRlc2MsIG51bSk7XFxuIDUwODpcXHRcXG4gNTA5OlxcdFxcdC8qIFdyaXRlIHRvIGhhcmR3YXJlICovXFxuIDUxMDpcXHRcXHRoY2xnZV9jb21tX3dyaXRlX2RldihodywgSENMR0VfQ09NTV9OSUNfQ1NRX1RBSUxfUkVHLFxcbiA1MTE6XFx0XFx0XFx0XFx0ICAgICBody1cXHUwMDNlY21xLmNzcS5uZXh0X3RvX3VzZSk7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdChodywgZGVzYywgbnVtLCBudGMpO1xcbiA1MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAyOjA0LjIyODM2MTA0OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDg4MjczOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdGAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYGhjbGdlX2NvbW1fY21kX2NoZWNrX3Jlc3VsdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlLCB3aGF0IGlucHV0cyBpdCB0YWtlcywgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBkZXRlcm1pbmVzIHRoZSBuYXR1cmUgb2YgaXRzIHJlc3VsdC4gSXMgaXQgcHJpbWFyaWx5IGZvciBlcnJvciBjaGVja2luZywgdmFsaWRhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFdoYXQgYXJlIHRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFuZCB3aGF0IGRvIHRoZXkgc2lnbmlmeT8gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbidzIGRlZmluaXRpb24sIGFueSByZWxhdGVkIGNvbW1lbnRzIGluIHRoZSBjb2RlLCBhbmQgaWRlYWxseSwgYW55IGRvY3VtZW50YXRpb24gdGhhdCBleGlzdHMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBmdW5jdGlvbiBjb21wbGV0ZWx5LiBUaGF0IG1lYW5zIGRpZ2dpbmcgaW50byB0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgbG9vcHMsIGFuZCBhbnkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLiBVbHRpbWF0ZWx5LCBteSBhaW0gaXMgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoaXMgY2hlY2sgb3BlcmF0ZXMgc28gSSBjYW4gYXBwbHkgdGhhdCBrbm93bGVkZ2UgaW4gbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDgyLCJPdXRwdXRUb2tlbnMiOjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMjoxMS43MTY2NDAwNjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNfY29tbW9uL2hjbGdlX2NvbW1fY21kLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDM1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDM1OlxcdHN0YXRpYyBpbnQgaGNsZ2VfY29tbV9jbWRfY2hlY2tfcmVzdWx0KHN0cnVjdCBoY2xnZV9jb21tX2h3ICpodyxcXG4gNDM2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaGNsZ2VfZGVzYyAqZGVzYyxcXG4gNDM3OlxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgbnVtLCBpbnQgbnRjKVxcbiA0Mzg6XFx0e1xcbiA0Mzk6XFx0XFx0Ym9vbCBpc19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNDQwOlxcdFxcdGludCBoYW5kbGUsIHJldDtcXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0LyogSWYgdGhlIGNvbW1hbmQgaXMgc3luYywgd2FpdCBmb3IgdGhlIGZpcm13YXJlIHRvIHdyaXRlIGJhY2ssXFxuIDQ0MzpcXHRcXHQgKiBpZiBtdWx0aSBkZXNjcmlwdG9ycyB0byBiZSBzZW50LCB1c2UgdGhlIGZpcnN0IG9uZSB0byBjaGVja1xcbiA0NDQ6XFx0XFx0ICovXFxuIDQ0NTpcXHRcXHRpZiAoSENMR0VfQ09NTV9TRU5EX1NZTkMobGUxNl90b19jcHUoZGVzYy1cXHUwMDNlZmxhZykpKVxcbiA0NDY6XFx0XFx0XFx0aGNsZ2VfY29tbV93YWl0X2Zvcl9yZXNwKGh3LCBsZTE2X3RvX2NwdShkZXNjLVxcdTAwM2VvcGNvZGUpLFxcbiA0NDc6XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZpc19jb21wbGV0ZWQpO1xcbiA0NDg6XFx0XFxuIDQ0OTpcXHRcXHRpZiAoIWlzX2NvbXBsZXRlZClcXG4gNDUwOlxcdFxcdFxcdHJldCA9IC1FQkFERTtcXG4gNDUxOlxcdFxcdGVsc2VcXG4gNDUyOlxcdFxcdFxcdHJldCA9IGhjbGdlX2NvbW1fY21kX2NoZWNrX3JldHZhbChodywgZGVzYywgbnVtLCBudGMpO1xcbiA0NTM6XFx0XFxuIDQ1NDpcXHRcXHQvKiBDbGVhbiB0aGUgY29tbWFuZCBzZW5kIHF1ZXVlICovXFxuIDQ1NTpcXHRcXHRoYW5kbGUgPSBoY2xnZV9jb21tX2NtZF9jc3FfY2xlYW4oaHcpO1xcbiA0NTY6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDNjIDApXFxuIDQ1NzpcXHRcXHRcXHRyZXQgPSBoYW5kbGU7XFxuIDQ1ODpcXHRcXHRlbHNlIGlmIChoYW5kbGUgIT0gbnVtKVxcbiA0NTk6XFx0XFx0XFx0ZGV2X3dhcm4oXFx1MDAyNmh3LVxcdTAwM2VjbXEuY3NxLnBkZXYtXFx1MDAzZWRldixcXG4gNDYwOlxcdFxcdFxcdFxcdCBcXFwiY2xlYW5lZCAlZCwgbmVlZCB0byBjbGVhbiAlZFxcXFxuXFxcIiwgaGFuZGxlLCBudW0pO1xcbiA0NjE6XFx0XFx0cmV0dXJuIHJldDtcXG4gNDYyOlxcdH1cXG4gNDYzOlxcdFxcbiA0NjQ6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjAyOjExLjcxNjc1OTE0OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzM0NTcwOTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBjb2RlIGlzIHdhaXRpbmcgZm9yIGEgZmlybXdhcmUgd3JpdGViYWNrLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBoY2xnZV9jb21tX3dhaXRfZm9yX3Jlc3BgLiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgd2UnbGwgaGl0IGEgdGltZW91dCBhbmQgZ2V0IGFuIGAtRUJBREVgIGVycm9yLiBUaGlzIG1lYW5zIGBoY2xnZV9pbml0X2FlX2RldmAgZmFpbHMsIGFuZCBjb25zZXF1ZW50bHksIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIHdvbid0IHJlZ2lzdGVyLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcywgY291bGQgd2UgZmluZCBhIHdheSB0byBjaXJjdW12ZW50IHRoaXM/IE5vcGUsIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIGl0J3MgcHJldHR5IGV4cGxpY2l0IHRoYXQgaXQgbmVlZHMgKmFjdHVhbCogaGFyZHdhcmUgb3IgYW4gZW11bGF0b3IuIEl0IHdvbid0IGluaXRpYWxpemUgd2l0aG91dCBlaXRoZXIuIFNvLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBvdGhlciByb3V0ZSB0byBgaGNsZ2Vfc2V0X3BmY19wcmV2ZW50aW9uX3RvdXRgLCB3aGljaCBpcyBteSB0YXJnZXQuXG5cbkkgdHJhY2UgdGhlIGNhbGwsIGFuZCBpdOKAmXMgY2FsbGVkIGZyb20gYGhuczNfc2V0X3R1bmFibGVgLCB3aGljaCBpcyBhbiBldGh0b29sIGNhbGxiYWNrLiBOb3csIGV0aHRvb2wgY2FsbGJhY2tzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2hlbiB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQuIEFuZCBhcyB3ZSd2ZSBlc3RhYmxpc2hlZCwgdGhlIG5ldGRldiB3b24ndCByZWdpc3RlciB3aXRob3V0IGhhcmR3YXJlLiBUaGF0J3MgaXQhIFRoaXMgY29kZSBwYXRoLCBiZWNhdXNlIG9mIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LCBpcyB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUuXG5cbk9rYXksIGxldCBtZSBjb25maXJtLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBjbGVhcjogXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cIiBUaGVyZSdzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGUgSGlzaWxpY29uIEhOUzMgdGhhdCBJJ20gYXdhcmUgb2YsIGFuZCBpdCdzIGEgUENJZSBkZXZpY2UsIHdoaWNoIG5lZWRzIHNwZWNpZmljIGhhcmR3YXJlIHJlc3BvbnNlcyB0byBpbml0aWFsaXplLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdGhlc2UgZW52aXJvbm1lbnRzLiBCYXNlZCBvbiB0aGlzLCBJJ20gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDg1NCwiT3V0cHV0VG9rZW5zIjoxMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQyMTowMzoxNS4wNjI0NzUyMjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSGlzaWxpY29uIEhOUzMgbmV0d29yayBkcml2ZXIgdG8gc3VwcG9ydCBzZXR0aW5nIGFuZCBnZXR0aW5nIFBGQyBzdG9ybSBwcmV2ZW50aW9uIHRpbWVvdXQgdmlhIGV0aHRvb2wuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIHRoYXQgcmVxdWlyZXMgYWN0dWFsIGhhcmR3YXJlIChvciBhIGRlZGljYXRlZCBlbXVsYXRvciwgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIHJlZ2lzdGVyIHRoZSBuZXRkZXYuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgZHJpdmVyIHByb2JlIGZhaWxzIGR1cmluZyBmaXJtd2FyZSBjb21tdW5pY2F0aW9uLCBtZWFuaW5nIHRoZSBuZXRkZXYgaXMgbmV2ZXIgcmVnaXN0ZXJlZCBhbmQgdGhlIG1vZGlmaWVkIGV0aHRvb2wgY2FsbGJhY2tzIGNhbm5vdCBiZSByZWFjaGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBITlMzIG5ldHdvcmsgZHJpdmVyIHRvIHN1cHBvcnQgc2V0dGluZyBhbmQgZ2V0dGluZyBQRkMgc3Rvcm0gcHJldmVudGlvbiB0aW1lb3V0IHZpYSBldGh0b29sLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciB0aGF0IHJlcXVpcmVzIGFjdHVhbCBoYXJkd2FyZSAob3IgYSBkZWRpY2F0ZWQgZW11bGF0b3IsIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cykgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCByZWdpc3RlciB0aGUgbmV0ZGV2LiBXaXRob3V0IHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlciBwcm9iZSBmYWlscyBkdXJpbmcgZmlybXdhcmUgY29tbXVuaWNhdGlvbiwgbWVhbmluZyB0aGUgbmV0ZGV2IGlzIG5ldmVyIHJlZ2lzdGVyZWQgYW5kIHRoZSBtb2RpZmllZCBldGh0b29sIGNhbGxiYWNrcyBjYW5ub3QgYmUgcmVhY2hlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4bc9b[1] Phase: Running StartedAt: 2026-06-30 21:05:01 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4bc9b[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-30 21:05:01 +0000 UTC FinishedAt: 2026-06-30 21:05:09 +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,}