Name: series-workflowh6kz2 Phase: Failed StartedAt: 2026-09-04 09:19:20 +0000 UTC FinishedAt: 2026-09-04 10:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh6kz2[0] Phase: Succeeded StartedAt: 2026-09-04 09:19:20 +0000 UTC FinishedAt: 2026-09-04 10:05:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh6kz2[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 09:19:20 +0000 UTC FinishedAt: 2026-09-04 10:05:04 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDNkOWJjMGNkYmQxYjM3NjAxMGQ1ZmY5NGE1YzkyZmE4NjIwNjBlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MDQ6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG5pbmRleCA3M2Y3NDNlNGE4M2Q3Li5mODM0MmE3MWFhYzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmhcbkBAIC0xNzc1LDEwICYjNDM7MTc3NSwxMiBAQCBzdHJ1Y3QgcHRwX2dldF9jYXBfcnNwIHtcbiBcdHU2NCBjYXA7XG4gfTtcbiBcbiYjNDM7I2RlZmluZSBSVlVfTUFYX1JFUFx0NjRcbiYjNDM7XG4gc3RydWN0IGdldF9yZXBfY250X3JzcCB7XG4gXHRzdHJ1Y3QgbWJveF9tc2doZHIgaGRyO1xuIFx0dTE2IHJlcF9jbnQ7XG4tXHR1MTYgcmVwX3BmX21hcFs2NF07XG4mIzQzO1x0dTE2IHJlcF9wZl9tYXBbUlZVX01BWF9SRVBdO1xuIFx0dTY0IHJzdmQ7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jXG5pbmRleCBmZmJhNTZlZThhNjBjLi4zOTJkMDI5NjNmMDcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jXG5AQCAtMzcwOSw2ICYjNDM7MzcwOSwyMCBAQCBzdGF0aWMgdm9pZCBydnVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cnZ1X3VucmVnaXN0ZXJfZGwocnZ1KTtcbiBcdHJ2dV91bnJlZ2lzdGVyX2ludGVycnVwdHMocnZ1KTtcbiBcdHJ2dV9mbHJfd3FfZGVzdHJveShydnUpO1xuJiM0MztcdGlmIChydnUtXHUwMDNlcmVwX2V2dF93cSkge1xuJiM0MztcdFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlcF93cSA9IHJ2dS1cdTAwM2VyZXBfZXZ0X3dxO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5VTEwgdGhlIHBvaW50ZXIgYmVmb3JlIGZsdXNoaW5nIG1ib3hfd3EuICBBbnkgbWJveCBoYW5kbGVyXG4mIzQzO1x0XHQgKiBzdGlsbCBpbiBmbGlnaHQgd2lsbCBzbmFwc2hvdCBOVUxMIHZpYSBSRUFEX09OQ0UoKSBhbmQgcmV0dXJuXG4mIzQzO1x0XHQgKiAtRUlOVkFMIHdpdGhvdXQgY2FsbGluZyBxdWV1ZV93b3JrKCksIHNvIG5vIG5ldyBpdGVtcyBjYW4gYmVcbiYjNDM7XHRcdCAqIGFkZGVkIHRvIHJlcF93cSBhZnRlciBmbHVzaF93b3JrcXVldWUobWJveF93cSkgcmV0dXJucy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShydnUtXHUwMDNlcmVwX2V2dF93cSwgTlVMTCk7XG4mIzQzO1x0XHRmbHVzaF93b3JrcXVldWUocnZ1LVx1MDAzZWFmcGZfd3FfaW5mby5tYm94X3dxKTtcbiYjNDM7XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHJlcF93cSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsdXNoX3dvcmtxdWV1ZShydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfd3EpO1xuJiM0MztcdH1cbiBcdHJ2dV9jZ3hfZXhpdChydnUpO1xuIFx0cnZ1X2Z3ZGF0YV9leGl0KHJ2dSk7XG4gXHRydnVfbWNzX2V4aXQocnZ1KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmNcbmluZGV4IGEyNzgxZTBmNTA0ZTMuLjY5YjI2MGZkZDUyZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xuQEAgLTQ0LDYgJiM0Mzs0NCw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudClcbiBcdGlmIChldmVudC1cdTAwM2VldmVudCBcdTAwMjYgUlZVX0VWRU5UX01BQ19BRERSX0NIQU5HRSlcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KHBmdmYtXHUwMDNlbWFjX2FkZHIsIGV2ZW50LVx1MDAzZWV2dF9kYXRhLm1hYyk7XG4gXG4mIzQzO1x0aWYgKGV2ZW50LVx1MDAzZWV2ZW50IFx1MDAyNiBSVlVfRVZFTlRfUEZWRl9TVEFURSlcbiYjNDM7XHRcdHBmID0gcnZ1X2dldF9wZihydnUtXHUwMDNlcGRldiwgZXZlbnQtXHUwMDNlaGRyLnBjaWZ1bmMpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbiBcdG1zZyA9IG90eDJfbWJveF9hbGxvY19tc2dfcmVwX2V2ZW50X3VwX25vdGlmeShydnUsIHBmKTtcbiBcdGlmICghbXNnKSB7XG5AQCAtNTMsNiAmIzQzOzU1LDEwIEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudClcbiBcbiBcdG1zZy1cdTAwM2VoZHIucGNpZnVuYyA9IGV2ZW50LVx1MDAzZXBjaWZ1bmM7XG4gXHRtc2ctXHUwMDNlZXZlbnQgPSBldmVudC1cdTAwM2VldmVudDtcbiYjNDM7XHRtc2ctXHUwMDNlcGNpZnVuYyA9IGV2ZW50LVx1MDAzZXBjaWZ1bmM7XG4mIzQzO1xuJiM0MztcdGlmIChldmVudC1cdTAwM2VldmVudCBcdTAwMjYgUlZVX0VWRU5UX1BGVkZfU1RBVEUpXG4mIzQzO1x0XHRtc2ctXHUwMDNlaGRyLnBjaWZ1bmMgPSBldmVudC1cdTAwM2VoZHIucGNpZnVuYztcbiBcbiBcdG1lbWNweShcdTAwMjZtc2ctXHUwMDNlZXZ0X2RhdGEsIFx1MDAyNmV2ZW50LVx1MDAzZWV2dF9kYXRhLCBzaXplb2Yoc3RydWN0IHJlcF9ldnRfZGF0YSkpO1xuIFxuQEAgLTk1LDggJiM0MzsxMDEsMTcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF93cV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBpbnQgcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqcmVxLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG1zZ19yc3AgKnJzcClcbiB7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xuIFx0c3RydWN0IHJlcF9ldnRxX2VudCAqcWVudHJ5O1xuIFxuJiM0MztcdHdxID0gUkVBRF9PTkNFKHJ2dS1cdTAwM2VyZXBfZXZ0X3dxKTtcbiYjNDM7XHRpZiAoIXdxKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgdGhlIHJlZ2lzdGVyZWQgcmVwcmVzZW50b3IgUEYgbWF5IHNlbmQgUkVQX0VWRU5UX05PVElGWS4gKi9cbiYjNDM7XHRpZiAocmVxLVx1MDAzZWhkci5wY2lmdW5jICE9IHJ2dS1cdTAwM2VyZXBfcGNpZnVuYylcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuIFx0LyogVGhlIG1haWxib3ggZGlzcGF0Y2hlciBub3JtYWxpc2VzIG9ubHkgdGhlIGhlYWRlciBwY2lmdW5jOyB0aGVcbiBcdCAqIG5lc3RlZCBzdHJ1Y3QgcmVwX2V2ZW50OjpwY2lmdW5jIGJvZHkgZmllbGQgaXMgc2VuZGVyLWNvbnRyb2xsZWRcbiBcdCAqIGFuZCBpcyBsYXRlciB1c2VkIGJ5IHJ2dV9yZXBfdXBfbm90aWZ5KCkgdG8gaW5kZXggcnZ1LVx1MDAzZXBmW10gL1xuQEAgLTEwNSw2ICYjNDM7MTIwLDE0IEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXG4gXHRpZiAoIWlzX3BmX2Z1bmNfdmFsaWQocnZ1LCByZXEtXHUwMDNlcGNpZnVuYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIE9ubHkgQ0dYLW1hcHBlZCBQRnMgYXJlIHByZXNlbnQgaW4gdGhlIHJlcHJlc2VudG9yIG1hcC4gKi9cbiYjNDM7XHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHJlcS1cdTAwM2VwY2lmdW5jKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKChyZXEtXHUwMDNlZXZlbnQgXHUwMDI2IFJWVV9FVkVOVF9QRlZGX1NUQVRFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcnZ1X2dldF9wZihydnUtXHUwMDNlcGRldiwgcmVxLVx1MDAzZWhkci5wY2lmdW5jKSBcdTAwM2U9IHJ2dS1cdTAwM2Vody1cdTAwM2V0b3RhbF9wZnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRxZW50cnkgPSBrbWFsbG9jX29iaigqcWVudHJ5LCBHRlBfQVRPTUlDKTtcbiBcdGlmICghcWVudHJ5KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0xMTMsMzcgJiM0MzsxMzYsMjMgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKnJlcSxcbiBcdHNwaW5fbG9jayhcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfbG9jayk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnFlbnRyeS1cdTAwM2Vub2RlLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfaGVhZCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfbG9jayk7XG4tXHRxdWV1ZV93b3JrKHJ2dS1cdTAwM2VyZXBfZXZ0X3dxLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dF93b3JrKTtcbiYjNDM7XHRxdWV1ZV93b3JrKHdxLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dF93b3JrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgcnZ1X3JlcF9ub3RpZnlfcGZ2Zl9zdGF0ZShzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcbiB7XG4tXHRzdHJ1Y3QgcmVwX2V2ZW50ICpyZXE7XG4tXHRpbnQgcGY7XG4mIzQzO1x0c3RydWN0IHJlcF9ldmVudCByZXEgPSB7IDAgfTtcbiYjNDM7XHRzdHJ1Y3QgbXNnX3JzcCByc3A7XG4gXG4gXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHBjaWZ1bmMpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRwZiA9IHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHJ2dS1cdTAwM2VyZXBfcGNpZnVuYyk7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuLVx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpO1xuLVx0aWYgKCFyZXEpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbi1cdHJlcS1cdTAwM2VoZHIucGNpZnVuYyA9IHJ2dS1cdTAwM2VyZXBfcGNpZnVuYztcbi1cdHJlcS1cdTAwM2VldmVudCB8PSBSVlVfRVZFTlRfUEZWRl9TVEFURTtcbi1cdHJlcS1cdTAwM2VwY2lmdW5jID0gcGNpZnVuYztcbi1cdHJlcS1cdTAwM2VldnRfZGF0YS52Zl9zdGF0ZSA9IGVuYWJsZTtcbi1cbi1cdG90eDJfbWJveF93YWl0X2Zvcl96ZXJvKFx1MDAyNnJ2dS1cdTAwM2VhZnBmX3dxX2luZm8ubWJveF91cCwgcGYpO1xuLVx0b3R4Ml9tYm94X21zZ19zZW5kX3VwKFx1MDAyNnJ2dS1cdTAwM2VhZnBmX3dxX2luZm8ubWJveF91cCwgcGYpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmVxLmhkci5wY2lmdW5jID0gcnZ1LVx1MDAzZXJlcF9wY2lmdW5jO1xuJiM0MztcdHJlcS5ldmVudCA9IFJWVV9FVkVOVF9QRlZGX1NUQVRFO1xuJiM0MztcdHJlcS5wY2lmdW5jID0gcGNpZnVuYztcbiYjNDM7XHRyZXEuZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XG4mIzQzO1x0cmV0dXJuIHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShydnUsIFx1MDAyNnJlcSwgXHUwMDI2cnNwKTtcbiB9XG4gXG4gI2RlZmluZSBSVlVfTEZfUlhfU1RBVFMocmVnKSBcXFxuQEAgLTMyNSw2ICYjNDM7MzM0LDcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcbiBcdHUxNiBzdGFydCA9IHJzd2l0Y2gtXHUwMDNlc3RhcnRfZW50cnk7XG4gXHRzdHJ1Y3QgcnZ1X2h3aW5mbyAqaHcgPSBydnUtXHUwMDNlaHc7XG4gXHR1MTYgcGNpZnVuYywgZW50cnkgPSAwO1xuJiM0MztcdHN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZjtcbiBcdGludCBwZiwgdmYsIG51bXZmcztcbiBcdGludCBlcnIsIG5peGxmLCBpO1xuIFx0dTggcmVwO1xuQEAgLTMzNCwxOSAmIzQzOzM0NCwyMiBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIDApO1xuJiM0MztcdFx0cGZ2ZiA9IHJ2dV9nZXRfcGZ2ZihydnUsIHBjaWZ1bmMpO1xuIFx0XHRydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsIFx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIHRydWUpO1xuIFx0XHRyZXAgPSB0cnVlO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGVyciA9IHJ2dV9yZXBfaW5zdGFsbF9yeF9ydWxlKHJ2dSwgcGNpZnVuYyxcbiBcdFx0XHRcdFx0XHQgICAgICBzdGFydCAmIzQzOyBlbnRyeSwgcmVwKTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9kaXNhYmxlX2xiaztcbiBcdFx0XHRyc3dpdGNoLVx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7XG4gXG4gXHRcdFx0ZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLFxuIFx0XHRcdFx0XHRcdCAgICAgIHN0YXJ0ICYjNDM7IGVudHJ5LCByZXApO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbGJrO1xuIFx0XHRcdHJzd2l0Y2gtXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSYjNDM7JiM0MztdID0gcGNpZnVuYztcbiBcdFx0XHRyZXAgPSBmYWxzZTtcbiBcdFx0fVxuQEAgLTM1NCw5ICYjNDM7MzY3LDEyIEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4gXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzOyB2ZiYjNDM7JiM0MzspIHtcbiBcdFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIHZmICYjNDM7IDEpO1xuJiM0MztcdFx0XHRwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XG4mIzQzO1x0XHRcdGlmICh0ZXN0X2JpdChOSVhMRl9JTklUSUFMSVpFRCwgXHUwMDI2cGZ2Zi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTtcbiBcdFx0XHRydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7XG4gXG4tXHRcdFx0LyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqL1xuJiM0MztcdFx0XHQvKiBTa2lwIGluc3RhbGxpbmcgcnVsZXMgaWYgbml4bGYgaXMgbm90IGF0dGFjaGVkICovXG4gXHRcdFx0ZXJyID0gbml4X2dldF9uaXhsZihydnUsIHBjaWZ1bmMsIFx1MDAyNm5peGxmLCBOVUxMKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMzY2LDMwICYjNDM7MzgyLDM3IEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdGFydCAmIzQzOyBlbnRyeSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHJlcCk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfZGlzYWJsZV9sYms7XG4gXHRcdFx0XHRyc3dpdGNoLVx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7XG4gXG4gXHRcdFx0XHRlcnIgPSBydnVfcmVwX2luc3RhbGxfdHhfcnVsZShydnUsIHBjaWZ1bmMsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdGFydCAmIzQzOyBlbnRyeSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHJlcCk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfZGlzYWJsZV9sYms7XG4gXHRcdFx0XHRyc3dpdGNoLVx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7XG4gXHRcdFx0XHRyZXAgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiBcbi1cdC8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfaGVhZCk7XG4tXHRJTklUX1dPUksoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTtcbi1cdHJ2dS1cdTAwM2VyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O3JlcF9ldnRfd3FcJiMzNDssIFdRX1BFUkNQVSwgMCk7XG4tXHRpZiAoIXJ2dS1cdTAwM2VyZXBfZXZ0X3dxKSB7XG4tXHRcdGRldl9lcnIocnZ1LVx1MDAzZWRldiwgXCYjMzQ7UkVQIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztlcnJfZGlzYWJsZV9sYms6XG4mIzQzO1x0LyogVW5kbyBhbnkgTEJLIGxpbmtzIGVuYWJsZWQgYWJvdmUgYmVmb3JlIHRoZSBNQ0FNIHJ1bGUgZmFpbHVyZS5cbiYjNDM7XHQgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAocGYgPSAxOyBwZiBcdTAwM2MgaHctXHUwMDNldG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4mIzQzO1x0XHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4mIzQzO1x0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmczsgdmYmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgdmYgJiM0MzsgMSk7XG4mIzQzO1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuJiM0MztcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBydnVfcmVwX3VwZGF0ZV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYSlcbkBAIC00NDMsMzUgJiM0Mzs0NjYsOTIgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfZXN3X2NmZyhzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBlc3dfY2ZnX3JlcSAqcmVxLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ2dV9yZXBfZ2V0X3JlcF9tYXAoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGdldF9yZXBfY250X3JzcCAqcnNwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcS1cdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRyc3AtXHUwMDNlcmVwX2NudCA9IHJ2dS1cdTAwM2VyZXBfY250O1xuJiM0MztcdGZvciAocmVwID0gMDsgcmVwIFx1MDAzYyBydnUtXHUwMDNlcmVwX2NudDsgcmVwJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBydnVfbWJveF9oYW5kbGVyX2dldF9yZXBfY250KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IG1zZ19yZXEgKnJlcSxcbiBcdFx0XHRcdCBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApXG4ge1xuLVx0aW50IHBmLCB2ZiwgbnVtdmZzLCBod3ZmLCByZXAgPSAwO1xuJiM0MztcdGludCBwZiwgdmYsIG51bXZmcywgaHd2ZiwgcmVwID0gMCwgY250O1xuJiM0MztcdGludCByZXQgPSAwO1xuIFx0dTE2IHBjaWZ1bmM7XG4mIzQzO1x0dTE2ICptYXA7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uLiBtYm94X3dxIGlzIFdRX1BFUkNQVSBzb1xuJiM0MztcdCAqIGhhbmRsZXJzIGZvciBkaWZmZXJlbnQgUEZzIGNhbiBydW4gY29uY3VycmVudGx5OyB3aXRob3V0IHRoaXNcbiYjNDM7XHQgKiBsb2NrIHR3byBjYWxsZXJzIGNvdWxkIGJvdGggb2JzZXJ2ZSByZXAycGZ2Zl9tYXAgPT0gTlVMTCBhbmRcbiYjNDM7XHQgKiBkb3VibGUtYWxsb2NhdGUgdGhlIHdvcmtxdWV1ZSwgbGVha2luZyBvbmUgcGVybWFuZW50bHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXApIHtcbiYjNDM7XHRcdHJldCA9IHJ2dV9yZXBfZ2V0X3JlcF9tYXAocnZ1LCByZXEsIHJzcCk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXG4gXHRydnUtXHUwMDNlcmVwX3BjaWZ1bmMgPSByZXEtXHUwMDNlaGRyLnBjaWZ1bmM7XG4tXHRyc3AtXHUwMDNlcmVwX2NudCA9IHJ2dS1cdTAwM2VjZ3hfbWFwcGVkX3BmcyAmIzQzOyBydnUtXHUwMDNlY2d4X21hcHBlZF92ZnM7XG4tXHRydnUtXHUwMDNlcmVwX2NudCA9IHJzcC1cdTAwM2VyZXBfY250O1xuJiM0MztcdGNudCA9IG1pbl90KGludCwgcnZ1LVx1MDAzZWNneF9tYXBwZWRfcGZzICYjNDM7IHJ2dS1cdTAwM2VjZ3hfbWFwcGVkX3ZmcyxcbiYjNDM7XHRcdCAgICBSVlVfTUFYX1JFUCk7XG4gXG4tXHRydnUtXHUwMDNlcmVwMnBmdmZfbWFwID0gZGV2bV9remFsbG9jKHJ2dS1cdTAwM2VkZXYsIHJ2dS1cdTAwM2VyZXBfY250ICpcbi1cdFx0XHRcdFx0IHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghcnZ1LVx1MDAzZXJlcDJwZnZmX21hcClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0LyogQWxsb2NhdGUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgc28gdGhlIHBvaW50ZXIgaXMgYWx3YXlzIG5vbi1OVUxMXG4mIzQzO1x0ICogb25jZSBwdWJsaXNoZWQsIGtlZXBpbmcgdGhlIGZhc3QtcGF0aCBjaGVjayBhYm92ZSByZWxpYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtYXAgPSBkZXZtX2t6YWxsb2MocnZ1LVx1MDAzZWRldiwgKGNudCA/OiAxKSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW1hcCkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiBcbiBcdGZvciAocGYgPSAwOyBwZiBcdTAwM2MgcnZ1LVx1MDAzZWh3LVx1MDAzZXRvdGFsX3BmczsgcGYmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHJlcCBcdTAwM2U9IGNudClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4tXHRcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmM7XG4mIzQzO1x0XHRtYXBbcmVwXSA9IHBjaWZ1bmM7XG4gXHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBwY2lmdW5jO1xuIFx0XHRyZXAmIzQzOyYjNDM7O1xuIFx0XHRydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCBcdTAwMjZudW12ZnMsIFx1MDAyNmh3dmYpO1xuLVx0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmczsgdmYmIzQzOyYjNDM7KSB7XG4tXHRcdFx0cnZ1LVx1MDAzZXJlcDJwZnZmX21hcFtyZXBdID0gcGNpZnVuYyB8XG4tXHRcdFx0XHQoKHZmICYjNDM7IDEpIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spO1xuLVx0XHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF07XG4mIzQzO1x0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmcyBcdTAwMjZcdTAwMjYgcmVwIFx1MDAzYyBjbnQ7IHZmJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRtYXBbcmVwXSA9IHBjaWZ1bmMgfCAoKHZmICYjNDM7IDEpIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spO1xuJiM0MztcdFx0XHRyc3AtXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gbWFwW3JlcF07XG4gXHRcdFx0cmVwJiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghY250KSB7XG4mIzQzO1x0XHRydnUtXHUwMDNlcmVwMnBmdmZfbWFwID0gbWFwO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSB3cSBmb3IgaGFuZGxpbmcgUkVQIGV2ZW50cyAqL1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0cV9sb2NrKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfaGVhZCk7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0X3dvcmssIHJ2dV9yZXBfd3FfaGFuZGxlcik7XG4mIzQzO1x0cnZ1LVx1MDAzZXJlcF9ldnRfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7cmVwX2V2dF93cVwmIzM0OywgV1FfVU5CT1VORCwgMCk7XG4mIzQzO1x0aWYgKCFydnUtXHUwMDNlcmVwX2V2dF93cSkge1xuJiM0MztcdFx0ZGV2X2VycihydnUtXHUwMDNlZGV2LCBcJiMzNDtSRVAgd29ya3F1ZXVlIGFsbG9jYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldm1fa2ZyZWUocnZ1LVx1MDAzZWRldiwgbWFwKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJ2dS1cdTAwM2VyZXBfY250ID0gY250O1xuJiM0MztcdHJzcC1cdTAwM2VyZXBfY250ID0gY250O1xuJiM0MztcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXAgPSBtYXA7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cnZ1LVx1MDAzZXJzcmNfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG5pbmRleCA0OWNlMzg2ODVhN2U2Li44YzJjOTg0MDM1MDc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmNcbkBAIC0xMiwxMSAmIzQzOzEyLDE4IEBAIHZvaWQgcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYywgYm9vbCBlbmFibGUpXG4ge1xuIFx0c3RydWN0IHJ2dV9wZnZmICpwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XG4gXHRzdHJ1Y3Qgbml4X2h3ICpuaXhfaHc7XG4mIzQzO1x0aW50IGJsa2FkZHI7XG4gXG4tXHRuaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS1cdTAwM2VodywgcGZ2Zi1cdTAwM2VuaXhfYmxrYWRkcik7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbiYjNDM7XHRibGthZGRyID0gcGZ2Zi1cdTAwM2VuaXhfYmxrYWRkcjtcbiYjNDM7XHRuaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS1cdTAwM2VodywgYmxrYWRkcik7XG4gXHQvKiBFbmFibGUgTEJLIGxpbmtzIHdpdGggY2hhbm5lbCA2MyBmb3IgVFggTUNBTSBydWxlICovXG4tXHRydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBwZnZmLVx1MDAzZW5peF9ibGthZGRyLCBwY2lmdW5jLFxuJiM0MztcdGlmICghbml4X2h3KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0cnZ1X25peF90eF90bDJfY2ZnKHJ2dSwgYmxrYWRkciwgcGNpZnVuYyxcbiBcdFx0XHQgICBcdTAwMjZuaXhfaHctXHUwMDNldHhzY2hbTklYX1RYU0NIX0xWTF9UTDJdLCBlbmFibGUpO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2Vyc3JjX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ2dV9zd2l0Y2hfaW5zdGFsbF9yeF9ydWxlKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsXG5AQCAtMjI5LDggJiM0MzsyMzYsMjAgQEAgdm9pZCBydnVfc3dpdGNoX2Rpc2FibGUoc3RydWN0IHJ2dSAqcnZ1KVxuIFx0aWYgKCFyc3dpdGNoLVx1MDAzZXVzZWRfZW50cmllcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKHJ2dS1cdTAwM2VyZXBfbW9kZSlcbiYjNDM7XHRpZiAocnZ1LVx1MDAzZXJlcF9tb2RlKSB7XG4mIzQzO1x0XHRmb3IgKHBmID0gMTsgcGYgXHUwMDNjIGh3LVx1MDAzZXRvdGFsX3BmczsgcGYmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIDApO1xuJiM0MztcdFx0XHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHRcdFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXHUwMDI2bnVtdmZzLCBOVUxMKTtcbiYjNDM7XHRcdFx0Zm9yICh2ZiA9IDA7IHZmIFx1MDAzYyBudW12ZnM7IHZmJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgdmYgJiM0MzsgMSk7XG4mIzQzO1x0XHRcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0Z290byBmcmVlX2VudHM7XG4mIzQzO1x0fVxuIFxuIFx0Zm9yIChwZiA9IDE7IHBmIFx1MDAzYyBody1cdTAwM2V0b3RhbF9wZnM7IHBmJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcbmluZGV4IDBmNWQ1NjQyZDNmN2EuLmVmNDdlN2UyMTkwMTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuQEAgLTMwMSw2ICYjNDM7MzAxLDEyIEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfc3RhdGVfZXZ0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwcml2LFxuIFx0aW50IHJlcF9pZDtcbiBcbiBcdHJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tXHUwMDNlcGNpZnVuYyk7XG4mIzQzO1x0aWYgKHJlcF9pZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtSRVAgc3RhdGUgZXZlbnQgZm9yIHVua25vd24gcGNpZnVuYyAweCV4IChlcnIgJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VwY2lmdW5jLCByZXBfaWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcdHJlcCA9IHByaXYtXHUwMDNlcmVwc1tyZXBfaWRdO1xuIFx0aWYgKGluZm8tXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUpXG4gXHRcdHJlcC1cdTAwM2VmbGFncyB8PSBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEO1xuQEAgLTQ1OSw2ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBydnVfcmVwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTtcbiBcbiYjNDM7XHRpZiAocmVwLVx1MDAzZXBjaWZ1bmMgXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGV2dC5ldmVudCA9IFJWVV9FVkVOVF9QT1JUX1NUQVRFO1xuIFx0ZXZ0LmV2dF9kYXRhLnBvcnRfc3RhdGUgPSAxO1xuIFx0ZXZ0LnBjaWZ1bmMgPSByZXAtXHUwMDNlcGNpZnVuYztcbkBAIC00NzgsNiAmIzQzOzQ4Nyw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShkZXYpO1xuIFxuJiM0MztcdGlmIChyZXAtXHUwMDNlcGNpZnVuYyBcdTAwMjYgUlZVX1BGVkZfRlVOQ19NQVNLKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0ZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7XG4gXHRldnQucGNpZnVuYyA9IHJlcC1cdTAwM2VwY2lmdW5jO1xuIFx0cnZ1X3JlcF9ub3RpZnlfcGZ2Zihwcml2LCBSVlVfRVZFTlRfUE9SVF9TVEFURSwgXHUwMDI2ZXZ0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbmluZGV4IDViYzllMmM3ZDgwMGIuLmI5OGZlMTkxZTgzYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxuQEAgLTE2LDcgJiM0MzsxNiw2IEBAXG4gXG4gI2RlZmluZSBQQ0lfREVWSURfUlZVX1JFUFx0MHhBMEUwXG4gXG4tI2RlZmluZSBSVlVfTUFYX1JFUFx0T1RYMl9NQVhfQ1FfQ05UXG4gXG4gc3RydWN0IHJlcF9zdGF0cyB7XG4gXHR1NjQgcnhfYnl0ZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDNkOWJjMGNkYmQxYjM3NjAxMGQ1ZmY5NGE1YzkyZmE4NjIwNjBlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTA6MDQ6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmgKaW5kZXggNzNmNzQzZTRhODNkNy4uZjgzNDJhNzFhYWM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaApAQCAtMTc3NSwxMCAmIzQzOzE3NzUsMTIgQEAgc3RydWN0IHB0cF9nZXRfY2FwX3JzcCB7CiAJdTY0IGNhcDsKIH07CiAKJiM0MzsjZGVmaW5lIFJWVV9NQVhfUkVQCTY0CiYjNDM7CiBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwIHsKIAlzdHJ1Y3QgbWJveF9tc2doZHIgaGRyOwogCXUxNiByZXBfY250OwotCXUxNiByZXBfcGZfbWFwWzY0XTsKJiM0MzsJdTE2IHJlcF9wZl9tYXBbUlZVX01BWF9SRVBdOwogCXU2NCByc3ZkOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYwppbmRleCBmZmJhNTZlZThhNjBjLi4zOTJkMDI5NjNmMDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYwpAQCAtMzcwOSw2ICYjNDM7MzcwOSwyMCBAQCBzdGF0aWMgdm9pZCBydnVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCXJ2dV91bnJlZ2lzdGVyX2RsKHJ2dSk7CiAJcnZ1X3VucmVnaXN0ZXJfaW50ZXJydXB0cyhydnUpOwogCXJ2dV9mbHJfd3FfZGVzdHJveShydnUpOwomIzQzOwlpZiAocnZ1LSZndDtyZXBfZXZ0X3dxKSB7CiYjNDM7CQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVwX3dxID0gcnZ1LSZndDtyZXBfZXZ0X3dxOwomIzQzOwomIzQzOwkJLyogTlVMTCB0aGUgcG9pbnRlciBiZWZvcmUgZmx1c2hpbmcgbWJveF93cS4gIEFueSBtYm94IGhhbmRsZXIKJiM0MzsJCSAqIHN0aWxsIGluIGZsaWdodCB3aWxsIHNuYXBzaG90IE5VTEwgdmlhIFJFQURfT05DRSgpIGFuZCByZXR1cm4KJiM0MzsJCSAqIC1FSU5WQUwgd2l0aG91dCBjYWxsaW5nIHF1ZXVlX3dvcmsoKSwgc28gbm8gbmV3IGl0ZW1zIGNhbiBiZQomIzQzOwkJICogYWRkZWQgdG8gcmVwX3dxIGFmdGVyIGZsdXNoX3dvcmtxdWV1ZShtYm94X3dxKSByZXR1cm5zLgomIzQzOwkJICovCiYjNDM7CQlXUklURV9PTkNFKHJ2dS0mZ3Q7cmVwX2V2dF93cSwgTlVMTCk7CiYjNDM7CQlmbHVzaF93b3JrcXVldWUocnZ1LSZndDthZnBmX3dxX2luZm8ubWJveF93cSk7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShyZXBfd3EpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZmx1c2hfd29ya3F1ZXVlKHJ2dS0mZ3Q7YWZwZl93cV9pbmZvLm1ib3hfd3EpOwomIzQzOwl9CiAJcnZ1X2NneF9leGl0KHJ2dSk7CiAJcnZ1X2Z3ZGF0YV9leGl0KHJ2dSk7CiAJcnZ1X21jc19leGl0KHJ2dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMKaW5kZXggYTI3ODFlMGY1MDRlMy4uNjliMjYwZmRkNTJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3JlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuYwpAQCAtNDQsNiAmIzQzOzQ0LDggQEAgc3RhdGljIGludCBydnVfcmVwX3VwX25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKmV2ZW50KQogCWlmIChldmVudC0mZ3Q7ZXZlbnQgJmFtcDsgUlZVX0VWRU5UX01BQ19BRERSX0NIQU5HRSkKIAkJZXRoZXJfYWRkcl9jb3B5KHBmdmYtJmd0O21hY19hZGRyLCBldmVudC0mZ3Q7ZXZ0X2RhdGEubWFjKTsKIAomIzQzOwlpZiAoZXZlbnQtJmd0O2V2ZW50ICZhbXA7IFJWVV9FVkVOVF9QRlZGX1NUQVRFKQomIzQzOwkJcGYgPSBydnVfZ2V0X3BmKHJ2dS0mZ3Q7cGRldiwgZXZlbnQtJmd0O2hkci5wY2lmdW5jKTsKIAltdXRleF9sb2NrKCZhbXA7cnZ1LSZndDttYm94X2xvY2spOwogCW1zZyA9IG90eDJfbWJveF9hbGxvY19tc2dfcmVwX2V2ZW50X3VwX25vdGlmeShydnUsIHBmKTsKIAlpZiAoIW1zZykgewpAQCAtNTMsNiAmIzQzOzU1LDEwIEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudCkKIAogCW1zZy0mZ3Q7aGRyLnBjaWZ1bmMgPSBldmVudC0mZ3Q7cGNpZnVuYzsKIAltc2ctJmd0O2V2ZW50ID0gZXZlbnQtJmd0O2V2ZW50OwomIzQzOwltc2ctJmd0O3BjaWZ1bmMgPSBldmVudC0mZ3Q7cGNpZnVuYzsKJiM0MzsKJiM0MzsJaWYgKGV2ZW50LSZndDtldmVudCAmYW1wOyBSVlVfRVZFTlRfUEZWRl9TVEFURSkKJiM0MzsJCW1zZy0mZ3Q7aGRyLnBjaWZ1bmMgPSBldmVudC0mZ3Q7aGRyLnBjaWZ1bmM7CiAKIAltZW1jcHkoJmFtcDttc2ctJmd0O2V2dF9kYXRhLCAmYW1wO2V2ZW50LSZndDtldnRfZGF0YSwgc2l6ZW9mKHN0cnVjdCByZXBfZXZ0X2RhdGEpKTsKIApAQCAtOTUsOCAmIzQzOzEwMSwxNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3dxX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogaW50IHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKnJlcSwKIAkJCQkgICAgICBzdHJ1Y3QgbXNnX3JzcCAqcnNwKQogewomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJc3RydWN0IHJlcF9ldnRxX2VudCAqcWVudHJ5OwogCiYjNDM7CXdxID0gUkVBRF9PTkNFKHJ2dS0mZ3Q7cmVwX2V2dF93cSk7CiYjNDM7CWlmICghd3EpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogT25seSB0aGUgcmVnaXN0ZXJlZCByZXByZXNlbnRvciBQRiBtYXkgc2VuZCBSRVBfRVZFTlRfTk9USUZZLiAqLwomIzQzOwlpZiAocmVxLSZndDtoZHIucGNpZnVuYyAhPSBydnUtJmd0O3JlcF9wY2lmdW5jKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKIAkvKiBUaGUgbWFpbGJveCBkaXNwYXRjaGVyIG5vcm1hbGlzZXMgb25seSB0aGUgaGVhZGVyIHBjaWZ1bmM7IHRoZQogCSAqIG5lc3RlZCBzdHJ1Y3QgcmVwX2V2ZW50OjpwY2lmdW5jIGJvZHkgZmllbGQgaXMgc2VuZGVyLWNvbnRyb2xsZWQKIAkgKiBhbmQgaXMgbGF0ZXIgdXNlZCBieSBydnVfcmVwX3VwX25vdGlmeSgpIHRvIGluZGV4IHJ2dS0mZ3Q7cGZbXSAvCkBAIC0xMDUsNiAmIzQzOzEyMCwxNCBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqcmVxLAogCWlmICghaXNfcGZfZnVuY192YWxpZChydnUsIHJlcS0mZ3Q7cGNpZnVuYykpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qIE9ubHkgQ0dYLW1hcHBlZCBQRnMgYXJlIHByZXNlbnQgaW4gdGhlIHJlcHJlc2VudG9yIG1hcC4gKi8KJiM0MzsJaWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBydnVfZ2V0X3BmKHJ2dS0mZ3Q7cGRldiwgcmVxLSZndDtwY2lmdW5jKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKChyZXEtJmd0O2V2ZW50ICZhbXA7IFJWVV9FVkVOVF9QRlZGX1NUQVRFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBydnVfZ2V0X3BmKHJ2dS0mZ3Q7cGRldiwgcmVxLSZndDtoZHIucGNpZnVuYykgJmd0Oz0gcnZ1LSZndDtody0mZ3Q7dG90YWxfcGZzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJcWVudHJ5ID0ga21hbGxvY19vYmooKnFlbnRyeSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFxZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTEzLDM3ICYjNDM7MTM2LDIzIEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsCiAJc3Bpbl9sb2NrKCZhbXA7cnZ1LSZndDtyZXBfZXZ0cV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7cWVudHJ5LSZndDtub2RlLCAmYW1wO3J2dS0mZ3Q7cmVwX2V2dHFfaGVhZCk7CiAJc3Bpbl91bmxvY2soJmFtcDtydnUtJmd0O3JlcF9ldnRxX2xvY2spOwotCXF1ZXVlX3dvcmsocnZ1LSZndDtyZXBfZXZ0X3dxLCAmYW1wO3J2dS0mZ3Q7cmVwX2V2dF93b3JrKTsKJiM0MzsJcXVldWVfd29yayh3cSwgJmFtcDtydnUtJmd0O3JlcF9ldnRfd29yayk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBydnVfcmVwX25vdGlmeV9wZnZmX3N0YXRlKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsIGJvb2wgZW5hYmxlKQogewotCXN0cnVjdCByZXBfZXZlbnQgKnJlcTsKLQlpbnQgcGY7CiYjNDM7CXN0cnVjdCByZXBfZXZlbnQgcmVxID0geyAwIH07CiYjNDM7CXN0cnVjdCBtc2dfcnNwIHJzcDsKIAogCWlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcnZ1X2dldF9wZihydnUtJmd0O3BkZXYsIHBjaWZ1bmMpKSkKIAkJcmV0dXJuIDA7CiAKLQlwZiA9IHJ2dV9nZXRfcGYocnZ1LSZndDtwZGV2LCBydnUtJmd0O3JlcF9wY2lmdW5jKTsKLQotCW11dGV4X2xvY2soJmFtcDtydnUtJmd0O21ib3hfbG9jayk7Ci0JcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpOwotCWlmICghcmVxKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO3J2dS0mZ3Q7bWJveF9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmVxLSZndDtoZHIucGNpZnVuYyA9IHJ2dS0mZ3Q7cmVwX3BjaWZ1bmM7Ci0JcmVxLSZndDtldmVudCB8PSBSVlVfRVZFTlRfUEZWRl9TVEFURTsKLQlyZXEtJmd0O3BjaWZ1bmMgPSBwY2lmdW5jOwotCXJlcS0mZ3Q7ZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7Ci0KLQlvdHgyX21ib3hfd2FpdF9mb3JfemVybygmYW1wO3J2dS0mZ3Q7YWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTsKLQlvdHgyX21ib3hfbXNnX3NlbmRfdXAoJmFtcDtydnUtJmd0O2FmcGZfd3FfaW5mby5tYm94X3VwLCBwZik7Ci0KLQltdXRleF91bmxvY2soJmFtcDtydnUtJmd0O21ib3hfbG9jayk7Ci0JcmV0dXJuIDA7CiYjNDM7CXJlcS5oZHIucGNpZnVuYyA9IHJ2dS0mZ3Q7cmVwX3BjaWZ1bmM7CiYjNDM7CXJlcS5ldmVudCA9IFJWVV9FVkVOVF9QRlZGX1NUQVRFOwomIzQzOwlyZXEucGNpZnVuYyA9IHBjaWZ1bmM7CiYjNDM7CXJlcS5ldnRfZGF0YS52Zl9zdGF0ZSA9IGVuYWJsZTsKJiM0MzsJcmV0dXJuIHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShydnUsICZhbXA7cmVxLCAmYW1wO3JzcCk7CiB9CiAKICNkZWZpbmUgUlZVX0xGX1JYX1NUQVRTKHJlZykgXApAQCAtMzI1LDYgJiM0MzszMzQsNyBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KQogCXUxNiBzdGFydCA9IHJzd2l0Y2gtJmd0O3N0YXJ0X2VudHJ5OwogCXN0cnVjdCBydnVfaHdpbmZvICpodyA9IHJ2dS0mZ3Q7aHc7CiAJdTE2IHBjaWZ1bmMsIGVudHJ5ID0gMDsKJiM0MzsJc3RydWN0IHJ2dV9wZnZmICpwZnZmOwogCWludCBwZiwgdmYsIG51bXZmczsKIAlpbnQgZXJyLCBuaXhsZiwgaTsKIAl1OCByZXA7CkBAIC0zMzQsMTkgJiM0MzszNDQsMjIgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSkKIAkJCWNvbnRpbnVlOwogCiAJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIDApOwomIzQzOwkJcGZ2ZiA9IHJ2dV9nZXRfcGZ2ZihydnUsIHBjaWZ1bmMpOwogCQlydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7CiYjNDM7CQlpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsICZhbXA7cGZ2Zi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgdHJ1ZSk7CiAJCXJlcCA9IHRydWU7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyAyOyBpJiM0MzsmIzQzOykgewogCQkJZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3J4X3J1bGUocnZ1LCBwY2lmdW5jLAogCQkJCQkJICAgICAgc3RhcnQgJiM0MzsgZW50cnksIHJlcCk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJCWdvdG8gZXJyX2Rpc2FibGVfbGJrOwogCQkJcnN3aXRjaC0mZ3Q7ZW50cnkycGNpZnVuY1tlbnRyeSYjNDM7JiM0MztdID0gcGNpZnVuYzsKIAogCQkJZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLAogCQkJCQkJICAgICAgc3RhcnQgJiM0MzsgZW50cnksIHJlcCk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJCWdvdG8gZXJyX2Rpc2FibGVfbGJrOwogCQkJcnN3aXRjaC0mZ3Q7ZW50cnkycGNpZnVuY1tlbnRyeSYjNDM7JiM0MztdID0gcGNpZnVuYzsKIAkJCXJlcCA9IGZhbHNlOwogCQl9CkBAIC0zNTQsOSAmIzQzOzM2NywxMiBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KQogCQlydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCAmYW1wO251bXZmcywgTlVMTCk7CiAJCWZvciAodmYgPSAwOyB2ZiAmbHQ7IG51bXZmczsgdmYmIzQzOyYjNDM7KSB7CiAJCQlwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtJmd0O3BkZXYsIHBmLCB2ZiAmIzQzOyAxKTsKJiM0MzsJCQlwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7CiYjNDM7CQkJaWYgKHRlc3RfYml0KE5JWExGX0lOSVRJQUxJWkVELCAmYW1wO3BmdmYtJmd0O2ZsYWdzKSkKJiM0MzsJCQkJcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTsKIAkJCXJ2dV9nZXRfbml4X2Jsa2FkZHIocnZ1LCBwY2lmdW5jKTsKIAotCQkJLyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqLwomIzQzOwkJCS8qIFNraXAgaW5zdGFsbGluZyBydWxlcyBpZiBuaXhsZiBpcyBub3QgYXR0YWNoZWQgKi8KIAkJCWVyciA9IG5peF9nZXRfbml4bGYocnZ1LCBwY2lmdW5jLCAmYW1wO25peGxmLCBOVUxMKTsKIAkJCWlmIChlcnIpCiAJCQkJY29udGludWU7CkBAIC0zNjYsMzAgJiM0MzszODIsMzcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSkKIAkJCQkJCQkgICAgICBzdGFydCAmIzQzOyBlbnRyeSwKIAkJCQkJCQkgICAgICByZXApOwogCQkJCWlmIChlcnIpCi0JCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJCQlnb3RvIGVycl9kaXNhYmxlX2xiazsKIAkJCQlyc3dpdGNoLSZndDtlbnRyeTJwY2lmdW5jW2VudHJ5JiM0MzsmIzQzO10gPSBwY2lmdW5jOwogCiAJCQkJZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLAogCQkJCQkJCSAgICAgIHN0YXJ0ICYjNDM7IGVudHJ5LAogCQkJCQkJCSAgICAgIHJlcCk7CiAJCQkJaWYgKGVycikKLQkJCQkJcmV0dXJuIGVycjsKJiM0MzsJCQkJCWdvdG8gZXJyX2Rpc2FibGVfbGJrOwogCQkJCXJzd2l0Y2gtJmd0O2VudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7CiAJCQkJcmVwID0gZmFsc2U7CiAJCQl9CiAJCX0KIAl9CiYjNDM7CXJldHVybiAwOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgd3EgZm9yIGhhbmRsaW5nIFJFUCBldmVudHMgKi8KLQlzcGluX2xvY2tfaW5pdCgmYW1wO3J2dS0mZ3Q7cmVwX2V2dHFfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtydnUtJmd0O3JlcF9ldnRxX2hlYWQpOwotCUlOSVRfV09SSygmYW1wO3J2dS0mZ3Q7cmVwX2V2dF93b3JrLCBydnVfcmVwX3dxX2hhbmRsZXIpOwotCXJ2dS0mZ3Q7cmVwX2V2dF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3JlcF9ldnRfd3EmIzM0OywgV1FfUEVSQ1BVLCAwKTsKLQlpZiAoIXJ2dS0mZ3Q7cmVwX2V2dF93cSkgewotCQlkZXZfZXJyKHJ2dS0mZ3Q7ZGV2LCAmIzM0O1JFUCB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7ZXJyX2Rpc2FibGVfbGJrOgomIzQzOwkvKiBVbmRvIGFueSBMQksgbGlua3MgZW5hYmxlZCBhYm92ZSBiZWZvcmUgdGhlIE1DQU0gcnVsZSBmYWlsdXJlLgomIzQzOwkgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJZm9yIChwZiA9IDE7IHBmICZsdDsgaHctJmd0O3RvdGFsX3BmczsgcGYmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIDApOwomIzQzOwkJcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7CiYjNDM7CQlydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCAmYW1wO251bXZmcywgTlVMTCk7CiYjNDM7CQlmb3IgKHZmID0gMDsgdmYgJmx0OyBudW12ZnM7IHZmJiM0MzsmIzQzOykgewomIzQzOwkJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIHZmICYjNDM7IDEpOwomIzQzOwkJCXJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpOwomIzQzOwkJfQogCX0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBydnVfcmVwX3VwZGF0ZV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYSkKQEAgLTQ0MywzNSAmIzQzOzQ2Niw5MiBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9lc3dfY2ZnKHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IGVzd19jZmdfcmVxICpyZXEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ2dV9yZXBfZ2V0X3JlcF9tYXAoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApCiYjNDM7ewomIzQzOwlpbnQgcmVwOwomIzQzOwomIzQzOwlpZiAocmVxLSZndDtoZHIucGNpZnVuYyAhPSBydnUtJmd0O3JlcF9wY2lmdW5jKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJcnNwLSZndDtyZXBfY250ID0gcnZ1LSZndDtyZXBfY250OwomIzQzOwlmb3IgKHJlcCA9IDA7IHJlcCAmbHQ7IHJ2dS0mZ3Q7cmVwX2NudDsgcmVwJiM0MzsmIzQzOykKJiM0MzsJCXJzcC0mZ3Q7cmVwX3BmX21hcFtyZXBdID0gcnZ1LSZndDtyZXAycGZ2Zl9tYXBbcmVwXTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IHJ2dV9tYm94X2hhbmRsZXJfZ2V0X3JlcF9jbnQoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLAogCQkJCSBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApCiB7Ci0JaW50IHBmLCB2ZiwgbnVtdmZzLCBod3ZmLCByZXAgPSAwOwomIzQzOwlpbnQgcGYsIHZmLCBudW12ZnMsIGh3dmYsIHJlcCA9IDAsIGNudDsKJiM0MzsJaW50IHJldCA9IDA7CiAJdTE2IHBjaWZ1bmM7CiYjNDM7CXUxNiAqbWFwOwomIzQzOwomIzQzOwkvKiBTZXJpYWxpemUgZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbi4gbWJveF93cSBpcyBXUV9QRVJDUFUgc28KJiM0MzsJICogaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBQRnMgY2FuIHJ1biBjb25jdXJyZW50bHk7IHdpdGhvdXQgdGhpcwomIzQzOwkgKiBsb2NrIHR3byBjYWxsZXJzIGNvdWxkIGJvdGggb2JzZXJ2ZSByZXAycGZ2Zl9tYXAgPT0gTlVMTCBhbmQKJiM0MzsJICogZG91YmxlLWFsbG9jYXRlIHRoZSB3b3JrcXVldWUsIGxlYWtpbmcgb25lIHBlcm1hbmVudGx5LgomIzQzOwkgKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3J2dS0mZ3Q7cnNyY19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJ2dS0mZ3Q7cmVwMnBmdmZfbWFwKSB7CiYjNDM7CQlyZXQgPSBydnVfcmVwX2dldF9yZXBfbWFwKHJ2dSwgcmVxLCByc3ApOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KIAogCXJ2dS0mZ3Q7cmVwX3BjaWZ1bmMgPSByZXEtJmd0O2hkci5wY2lmdW5jOwotCXJzcC0mZ3Q7cmVwX2NudCA9IHJ2dS0mZ3Q7Y2d4X21hcHBlZF9wZnMgJiM0MzsgcnZ1LSZndDtjZ3hfbWFwcGVkX3ZmczsKLQlydnUtJmd0O3JlcF9jbnQgPSByc3AtJmd0O3JlcF9jbnQ7CiYjNDM7CWNudCA9IG1pbl90KGludCwgcnZ1LSZndDtjZ3hfbWFwcGVkX3BmcyAmIzQzOyBydnUtJmd0O2NneF9tYXBwZWRfdmZzLAomIzQzOwkJICAgIFJWVV9NQVhfUkVQKTsKIAotCXJ2dS0mZ3Q7cmVwMnBmdmZfbWFwID0gZGV2bV9remFsbG9jKHJ2dS0mZ3Q7ZGV2LCBydnUtJmd0O3JlcF9jbnQgKgotCQkJCQkgc2l6ZW9mKHUxNiksIEdGUF9LRVJORUwpOwotCWlmICghcnZ1LSZndDtyZXAycGZ2Zl9tYXApCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkvKiBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCBzbyB0aGUgcG9pbnRlciBpcyBhbHdheXMgbm9uLU5VTEwKJiM0MzsJICogb25jZSBwdWJsaXNoZWQsIGtlZXBpbmcgdGhlIGZhc3QtcGF0aCBjaGVjayBhYm92ZSByZWxpYWJsZS4KJiM0MzsJICovCiYjNDM7CW1hcCA9IGRldm1fa3phbGxvYyhydnUtJmd0O2RldiwgKGNudCA/OiAxKSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtYXApIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQogCiAJZm9yIChwZiA9IDA7IHBmICZsdDsgcnZ1LSZndDtody0mZ3Q7dG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHsKIAkJaWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChyZXAgJmd0Oz0gY250KQomIzQzOwkJCWJyZWFrOwogCQlwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtJmd0O3BkZXYsIHBmLCAwKTsKLQkJcnZ1LSZndDtyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmM7CiYjNDM7CQltYXBbcmVwXSA9IHBjaWZ1bmM7CiAJCXJzcC0mZ3Q7cmVwX3BmX21hcFtyZXBdID0gcGNpZnVuYzsKIAkJcmVwJiM0MzsmIzQzOzsKIAkJcnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgJmFtcDtudW12ZnMsICZhbXA7aHd2Zik7Ci0JCWZvciAodmYgPSAwOyB2ZiAmbHQ7IG51bXZmczsgdmYmIzQzOyYjNDM7KSB7Ci0JCQlydnUtJmd0O3JlcDJwZnZmX21hcFtyZXBdID0gcGNpZnVuYyB8Ci0JCQkJKCh2ZiAmIzQzOyAxKSAmYW1wOyBSVlVfUEZWRl9GVU5DX01BU0spOwotCQkJcnNwLSZndDtyZXBfcGZfbWFwW3JlcF0gPSBydnUtJmd0O3JlcDJwZnZmX21hcFtyZXBdOwomIzQzOwkJZm9yICh2ZiA9IDA7IHZmICZsdDsgbnVtdmZzICZhbXA7JmFtcDsgcmVwICZsdDsgY250OyB2ZiYjNDM7JiM0MzspIHsKJiM0MzsJCQltYXBbcmVwXSA9IHBjaWZ1bmMgfCAoKHZmICYjNDM7IDEpICZhbXA7IFJWVV9QRlZGX0ZVTkNfTUFTSyk7CiYjNDM7CQkJcnNwLSZndDtyZXBfcGZfbWFwW3JlcF0gPSBtYXBbcmVwXTsKIAkJCXJlcCYjNDM7JiM0Mzs7CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghY250KSB7CiYjNDM7CQlydnUtJmd0O3JlcDJwZnZmX21hcCA9IG1hcDsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovCiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7cnZ1LSZndDtyZXBfZXZ0cV9sb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtydnUtJmd0O3JlcF9ldnRxX2hlYWQpOwomIzQzOwlJTklUX1dPUksoJmFtcDtydnUtJmd0O3JlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTsKJiM0MzsJcnZ1LSZndDtyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cmVwX2V2dF93cSYjMzQ7LCBXUV9VTkJPVU5ELCAwKTsKJiM0MzsJaWYgKCFydnUtJmd0O3JlcF9ldnRfd3EpIHsKJiM0MzsJCWRldl9lcnIocnZ1LSZndDtkZXYsICYjMzQ7UkVQIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJZGV2bV9rZnJlZShydnUtJmd0O2RldiwgbWFwKTsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlydnUtJmd0O3JlcF9jbnQgPSBjbnQ7CiYjNDM7CXJzcC0mZ3Q7cmVwX2NudCA9IGNudDsKJiM0MzsJcnZ1LSZndDtyZXAycGZ2Zl9tYXAgPSBtYXA7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtydnUtJmd0O3JzcmNfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmMKaW5kZXggNDljZTM4Njg1YTdlNi4uOGMyYzk4NDAzNTA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9zd2l0Y2guYwpAQCAtMTIsMTEgJiM0MzsxMiwxOCBAQCB2b2lkIHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZiA9IHJ2dV9nZXRfcGZ2ZihydnUsIHBjaWZ1bmMpOwogCXN0cnVjdCBuaXhfaHcgKm5peF9odzsKJiM0MzsJaW50IGJsa2FkZHI7CiAKLQluaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS0mZ3Q7aHcsIHBmdmYtJmd0O25peF9ibGthZGRyKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3J2dS0mZ3Q7cnNyY19sb2NrKTsKJiM0MzsJYmxrYWRkciA9IHBmdmYtJmd0O25peF9ibGthZGRyOwomIzQzOwluaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS0mZ3Q7aHcsIGJsa2FkZHIpOwogCS8qIEVuYWJsZSBMQksgbGlua3Mgd2l0aCBjaGFubmVsIDYzIGZvciBUWCBNQ0FNIHJ1bGUgKi8KLQlydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBwZnZmLSZndDtuaXhfYmxrYWRkciwgcGNpZnVuYywKJiM0MzsJaWYgKCFuaXhfaHcpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJcnZ1X25peF90eF90bDJfY2ZnKHJ2dSwgYmxrYWRkciwgcGNpZnVuYywKIAkJCSAgICZhbXA7bml4X2h3LSZndDt0eHNjaFtOSVhfVFhTQ0hfTFZMX1RMMl0sIGVuYWJsZSk7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtydnUtJmd0O3JzcmNfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcnZ1X3N3aXRjaF9pbnN0YWxsX3J4X3J1bGUoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYywKQEAgLTIyOSw4ICYjNDM7MjM2LDIwIEBAIHZvaWQgcnZ1X3N3aXRjaF9kaXNhYmxlKHN0cnVjdCBydnUgKnJ2dSkKIAlpZiAoIXJzd2l0Y2gtJmd0O3VzZWRfZW50cmllcykKIAkJcmV0dXJuOwogCi0JaWYgKHJ2dS0mZ3Q7cmVwX21vZGUpCiYjNDM7CWlmIChydnUtJmd0O3JlcF9tb2RlKSB7CiYjNDM7CQlmb3IgKHBmID0gMTsgcGYgJmx0OyBody0mZ3Q7dG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LSZndDtwZGV2LCBwZiwgMCk7CiYjNDM7CQkJcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7CiYjNDM7CQkJcnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgJmFtcDtudW12ZnMsIE5VTEwpOwomIzQzOwkJCWZvciAodmYgPSAwOyB2ZiAmbHQ7IG51bXZmczsgdmYmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIHZmICYjNDM7IDEpOwomIzQzOwkJCQlydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJCWdvdG8gZnJlZV9lbnRzOwomIzQzOwl9CiAKIAlmb3IgKHBmID0gMTsgcGYgJmx0OyBody0mZ3Q7dG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHsKIAkJaWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMKaW5kZXggMGY1ZDU2NDJkM2Y3YS4uZWY0N2U3ZTIxOTAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYwpAQCAtMzAxLDYgJiM0MzszMDEsMTIgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9zdGF0ZV9ldnRfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYsCiAJaW50IHJlcF9pZDsKIAogCXJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tJmd0O3BjaWZ1bmMpOwomIzQzOwlpZiAocmVwX2lkICZsdDsgMCkgewomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgICYjMzQ7UkVQIHN0YXRlIGV2ZW50IGZvciB1bmtub3duIHBjaWZ1bmMgMHgleCAoZXJyICVkKVxuJiMzNDssCiYjNDM7CQkJCSAgICAgaW5mby0mZ3Q7cGNpZnVuYywgcmVwX2lkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCXJlcCA9IHByaXYtJmd0O3JlcHNbcmVwX2lkXTsKIAlpZiAoaW5mby0mZ3Q7ZXZ0X2RhdGEudmZfc3RhdGUpCiAJCXJlcC0mZ3Q7ZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDsKQEAgLTQ1OSw2ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBydnVfcmVwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCiYjNDM7CWlmIChyZXAtJmd0O3BjaWZ1bmMgJmFtcDsgUlZVX1BGVkZfRlVOQ19NQVNLKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7CiAJZXZ0LmV2dF9kYXRhLnBvcnRfc3RhdGUgPSAxOwogCWV2dC5wY2lmdW5jID0gcmVwLSZndDtwY2lmdW5jOwpAQCAtNDc4LDYgJiM0Mzs0ODcsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwogCiYjNDM7CWlmIChyZXAtJmd0O3BjaWZ1bmMgJmFtcDsgUlZVX1BGVkZfRlVOQ19NQVNLKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7CiAJZXZ0LnBjaWZ1bmMgPSByZXAtJmd0O3BjaWZ1bmM7CiAJcnZ1X3JlcF9ub3RpZnlfcGZ2Zihwcml2LCBSVlVfRVZFTlRfUE9SVF9TVEFURSwgJmFtcDtldnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oCmluZGV4IDViYzllMmM3ZDgwMGIuLmI5OGZlMTkxZTgzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmgKQEAgLTE2LDcgJiM0MzsxNiw2IEBACiAKICNkZWZpbmUgUENJX0RFVklEX1JWVV9SRVAJMHhBMEUwCiAKLSNkZWZpbmUgUlZVX01BWF9SRVAJT1RYMl9NQVhfQ1FfQ05UCiAKIHN0cnVjdCByZXBfc3RhdHMgewogCXU2NCByeF9ieXRlczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgc2VlaW5nIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKVGhlIG1vZGlmaWVkIGZpbGVzIGp1bXAgb3V0OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oYCwgYHJ2dS5jYCwgYHJ2dV9yZXAuY2AsIGBydnVfc3dpdGNoLmNgLCBgbmljL3JlcC5jYCwgYW5kIGBuaWMvcmVwLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgT2N0ZW9uVFgyIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIHRoZSBNYXJ2ZWxsIGVjb3N5c3RlbS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBlbnZpcm9ubWVudD8gSXMgdGhpcyBhIFNtYXJ0TklDIG9yIGp1c3Qgc3RhbmRhcmQgbmV0d29yayBmdW5jdGlvbmFsaXR5PwoKTm93LCB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dC4gSXMgdGhpcyBhIHBoeXNpY2FsIG5ldHdvcmsgY2FyZCwgc29tZXRoaW5nIHZlbmRvci1zcGVjaWZpYyBsaWtlIGEgUENJZSBTbWFydE5JQywgb3Igc29tZXRoaW5nIGVtdWxhdGVkPyBNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gc2VhcmNoLCBtYXliZSBgZ3JlcGAgdGhlIGNvZGViYXNlLCBvciBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkZXZpY2UgaXMgYWNjZXNzZWQgYW5kIGNvbmZpZ3VyZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGRlZmluZSB0aGUgZWFzZSBvZiBzZXR0aW5nIHVwIGFuIGVudmlyb25tZW50IHRvIGZ1enogdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPQ1RFT05UWDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ2MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBPY3Rlb24gVFgyIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBNYXJ2ZWxsIE9jdGVvbiBUWDIgRXRoZXJuZXQgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBsaWVzLCBkZWZpbmluZyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgb2YgdGhpcyBkcml2ZXIgYW5kIHRhaWxvciBpdCB0byBhIHBhcnRpY3VsYXIgdXNlIGNhc2UuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgc3ltYm9scywgdGhlaXIgZGVmYXVsdHMsIGFuZCBhbnkgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG4gICA3Olx0XHR0cmlzdGF0ZVxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBPQ1RFT05UWDJfQUZcbiAgMTA6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiAgMTE6XHRcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuICAxMjpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDEzOlx0XHRkZXBlbmRzIG9uICg2NEJJVCBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxuICAxNDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBPY3Rlb25UWDIgUmVzb3VyY2UgVmlydHVhbGl6YXRpb25cbiAgMTg6XHRcdCAgVW5pdCYjMzk7cyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcbiAgMTk6XHRcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxuICAyMDpcdFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7RGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcbiAgMjg6XHRcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXG4gIDI5Olx0XHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE9DVEVPTlRYMl9QRlxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDM0Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMzU6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMzY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcbiAgMzc6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDM4Olx0XHRzZWxlY3QgRElNTElCXG4gIDM5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA0MTpcdFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgIU1BQ1NFQ1xuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgcGh5c2ljYWwgZnVuY3Rpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE9DVEVPTlRYMl9WRlxuICA0NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgdmlydHVhbCBmdW5jdGlvbi5cbiAgNTA6XHRcbiAgNTE6XHRjb25maWcgUlZVX0VTV0lUQ0hcbiAgNTI6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbiAgNTM6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXG4gIDU0Olx0XHRkZWZhdWx0IG1cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBSVlUgRS1Td2l0Y2ggdGhhdFxuICA1NzpcdFx0ICBwcm92aWRlcyBpbnRlcm5hbCBTUklPViBwYWNrZXQgc3RlZXJpbmcgYW5kIHN3aXRjaGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyaWFnZSBDcml0ZXJpYSBhbmQgT2N0ZW9uVFgyIENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgZmFsbHMgdW5kZXIgb3VyIHN0YW5kYXJkIHRyaWFnZSBndWlkZWxpbmVzLCBzcGVjaWZpY2FsbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBTZWN0aW9uIDIgaGlnaGxpZ2h0cyAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBXZSYjMzk7cmUgbG9va2luZyBhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0ICpyZXF1aXJlKiBzcGVjaWZpYyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgaXMgYSBjcnVjaWFsIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZm9jdXMgb24gdGhlIE9jdGVvblRYMi4gSXQmIzM5O3MgTWFydmVsbCYjMzk7cyBBUk02NCBTb0MsIGEgbmV0d29yayBwcm9jZXNzb3IsIGVzc2VudGlhbGx5IGEgU21hcnROSUMgd2l0aCBpdHMgUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCAoUlZVKSBBZG1pbiBGdW5jdGlvbiBhbmQgUGh5c2ljYWwgRnVuY3Rpb24uIEFscmlnaHQsIGltcG9ydGFudCBub3RlcyBoZXJlLiBUaGVyZSBhcmUgZGVwZW5kZW5jeSBjaGVja3M6IGl0IHJlbGllcyBvbiBib3RoIDY0LWJpdCBhcmNoaXRlY3R1cmUgd2l0aCBhIGNvbXBpbGUgdGVzdCwgKm9yKiBqdXN0IHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCAqYWxzbyogcmVxdWlyZXMgUENJIHN1cHBvcnQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIE9jdGVvblRYMiAqaXMqIGEgcGh5c2ljYWwgUENJIG9yIFNvQyBkZXZpY2UuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uIElmIGl0IGlzLCB0aGVuIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBjb3VsZCBjb21lIGludG8gcGxheS4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgcHJvYmluZyByb3V0aW5lcyDigJMgYHJ2dV9wcm9iZWAgYW5kIGBvdHgyX3Byb2JlYC4gVGhlc2Ugd2lsbCB0ZWxsIHVzIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgYW5kIHdoZXRoZXIgaXTigJlzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgcGh5c2ljYWwgZGV2aWNlIGluIGEgd2F5IHRoYXTigJlzIGluY29tcGF0aWJsZSB3aXRoIG91ciBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGlzIHdpbGwgY29uZmlybSBpZiBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgT2N0ZW9uVFgyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBPY3Rlb24gVFgyIERyaXZlciBSZWdpc3RyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIGNhbGwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIE9jdGVvbiBUWDIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIHJlZ2lzdHJhdGlvbiBpcyBoYW5kbGVkIG9uIHRoaXMgcGxhdGZvcm0uIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBsYXRmb3JtLXNwZWNpZmljIG51YW5jZXMgb3IgcXVpcmtzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGRyaXZlciBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBob29rcyBvciBvdmVycmlkZXMgaW4gcGxhY2UgY29tcGFyZWQgdG8gYSBtb3JlIGdlbmVyaWMgUENJIGRyaXZlciByZWdpc3RyYXRpb24/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyBkZXZpY2UgSUQgbWF0Y2hpbmcgYW5kIHByb2JlIHJvdXRpbmVzIHdpdGhpbiB0aGUgT2N0ZW9uIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBjaGlwJiMzOTtzIGludGVybmFsIHJlZ2lzdGVycyB0byBzZWUgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIE9jdGVvbiBUWDImIzM5O3Mgc3lzdGVtLW9uLWNoaXAgZnJhbWV3b3JrLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgb3IgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoYXQgbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM3NjU9c3RhdGljIGludCBfX2luaXQgcnZ1X2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3NzE6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmNneF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3Mi1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3NzU6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnB0cF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Nzk6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNm1jc19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4MC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3ODM6XHRlcnIgPSAgcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZydnVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3ODQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzU4MT1zdGF0aWMgaW50IF9faW5pdCBvdHgyX3J2dXBmX2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTg1Olx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2b3R4Ml9wZl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTg2OT1zdGF0aWMgaW50IF9faW5pdCBvdHgydmZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTg3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6ODczOlx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2b3R4MnZmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTg3NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jPTg4MT1zdGF0aWMgaW50IF9faW5pdCBydnVfcmVwX2luaXRfbW9kdWxlKHZvaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODgyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYzo4ODM6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZydnVfcmVwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqUENJIElEIFZlcmlmaWNhdGlvbiBmb3IgT2N0ZW9uIFRYMiBEcml2ZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgc3RhcnRlZCBvbiB0aGlzIGRyaXZlciB3b3JrIGZvciB0aGUgT2N0ZW9uIFRYMi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgZGl2aW5nIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsIOKAkyB0aGUgUENJIElEcy4gSSBoYXZlIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlc2UgZHJpdmVycyBhcmUgdGFyZ2V0aW5nIHRoZSBjb3JyZWN0IGRldmljZXMuIEEgbWlzaWRlbnRpZmljYXRpb24gaGVyZSwgZXZlbiBhdCB0aGlzIGVhcmx5IHN0YWdlLCBjb3VsZCBsZWFkIHRvIGEgbWFzc2l2ZSBoZWFkYWNoZSBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBjYXVzaW5nIG1ham9yIHN5c3RlbSBpbnN0YWJpbGl0eSBvciwgZXZlbiB3b3JzZSwgYnJpY2tpbmcgc29tZSBoYXJkd2FyZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIFBDSSBpZGVudGlmaWVycyBhcmUgY29ycmVjdCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRyaXZlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBtZXRpY3Vsb3VzbHkgdG8gY29uZmlybSB0aGF0IHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyB0aGUgcmlnaHQgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcyBmb3IgdGhlIE9jdGVvbiBUWDIuIEl04oCZcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYmV0dGVyIHRvIGJlIHBhcmFub2lkIG5vdyBhbmQgcHJldmVudCBwb3RlbnRpYWwgZGlzYXN0cm91cyBvdXRjb21lIHRoYW4gdG8gcmVncmV0IGxhdGVyLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgbWV0aWN1bG91c2x5LCBubyByb29tIGZvciBlcnJvci4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTYzPXN0YXRpYyBpbnQgY2d4X2Z3aV9saW5rX2NoYW5nZShzdHJ1Y3QgY2d4ICpjZ3gsIGludCBsbWFjX2lkLCBib29sIGVuKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02NS0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6NjY6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNneF9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmMtNjctXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTE5MTY9c3RhdGljIHN0cnVjdCBtYWNfb3BzXHRjZ3hfbWFjX29wcyAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy0xOTUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6MTk1MTpzdGF0aWMgaW50IGNneF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmMtMTk1Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYzoyMDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWNzX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYy0yMS1cdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX01DUykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYz0xNDk3PXN0YXRpYyBzdHJ1Y3QgbWNzX29wcyBjbjEwa2JfbWNzX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYy0xNTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmM6MTUwNzpzdGF0aWMgaW50IG1jc19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTUwOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9Nzc9c3RhdGljIHN0cnVjdCBwdHAgKmZpcnN0X3B0cF9ibG9jaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTc5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jPTUxNz1zdGF0aWMgaW50IHB0cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjUxODpcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTE5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01NzE9c3RhdGljIHZvaWQgcHRwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkwLVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDE9c3RhdGljIGlycXJldHVybl90IHJ2dV9tYm94X2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpydnVfaXJxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy00My0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDUtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM1NDU9c3RhdGljIGF0b21pY190IGRldmljZV9ib3VuZCA9IEFUT01JQ19JTklUKDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzU0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM1NDc6c3RhdGljIGludCBydnVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM1NDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzUtLyogU3VwcG9ydGVkIGRldmljZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzY6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfcGZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzctXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzE1Mj1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzE1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzE1NDpzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzE1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjI6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjMtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYz01NTE9c3RhdGljIGludCBvdHgydmZfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICp2Zilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTU3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6NTcxOnN0YXRpYyBpbnQgb3R4MnZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTU3Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jOjIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfcmVwX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtMjMtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9SVlVfUkVQKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz03NDU9c3RhdGljIGludCBydnVfZ2V0X3JlcF9jbnQoc3RydWN0IG90eDJfbmljICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy03NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6NzgwOnN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTc4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTc4CgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDg5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmUqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIEkgdGhpbmsgd2UgaGF2ZSBhIGRlZmluaXRpdmUgYW5zd2VyLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgZGVlcGx5IHRpZWQgdG8gdGhlIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBjb21wb25lbnQsIHJlcHJlc2VudGVkIGJ5IGRyaXZlcnMgbGlrZSBgcnZ1LmNgLCBgcnZ1X3JlcC5jYCwgYW5kIG90aGVycyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9gIGRpcmVjdG9yeS4gVGhlc2UgYXJlICphbGwqIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIChDYXZpdW0vTWFydmVsbCkgZm9yIE9jdGVvblRYMiBQQ0kgZGV2aWNlcyDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYFBDSV9WRU5ET1JfSURfQ0FWSVVNYCwgYW5kIGRpc3RpbmN0IGRldmljZSBJRHMgc3VjaCBhcyBgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZgLgoKVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0ICpzdGFuZGFyZCogUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzIHNpbXBseSBkbyBub3QgZW11bGF0ZSB0aGlzIE9jdGVvblRYMiBoYXJkd2FyZS4gTXkga25vd2xlZGdlIG9mIHRoZXNlIHNldHVwcyB0ZWxscyBtZSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcyB2aXJ0dWFsbHkuIFRoZSBkcml2ZXJzIGFyZSBkZXNpZ25lZCB0byBwcm9iZSwgaW50ZXJhY3Qgd2l0aCwgYW5kIG1hbmFnZSBwaHlzaWNhbCBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgU29DIG9yIFNtYXJ0TklDIGhhcmR3YXJlLiBJIGV2ZW4gY2hlY2tlZCB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBzZWN0aW9uIG9mIHRoZSB0cmlhZ2UgY3JpdGVyaWEuIEl0IHNlZW1zIGxpa2UgYSBwZXJmZWN0IG1hdGNoLgoKQmFzZWQgb24gdGhlIHRyaWFnZSBjcml0ZXJpYSwgaXQgbG9va3MgbGlrZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UgYmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBzdHJpY3RseSBmYWxscyB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6ICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsuCgpTbywgSSYjMzk7bSBnb2luZyB0byBzZXQgbXkgcmVzdWx0cyBhcyBmb2xsb3dzOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gKSwgc3BlY2lmaWNhbGx5IHJlcHJlc2VudG9yIG1haWxib3ggaGFuZGxpbmcsIE1DQU0gcnVsZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24gbG9naWMuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQyBBU0lDIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBbXQoqICAgYEZvY3VzU3ltYm9sc2A6IFtdCgpBbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBldGhlcm5ldCBkcml2ZXIgYW5kIHJlcHJlc2VudG9yIGhhbmRsaW5nIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLy4gVGhpcyBjb2RlIHJlcXVpcmVzIHByb3ByaWV0YXJ5IENhdml1bS9NYXJ2ZWxsIE9jdGVvblRYMiBoYXJkd2FyZS9TbWFydE5JQyBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDoyOC4xNjk4Njk0MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMzMzU0OTgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgKFJlc291cmNlIFZpcnR1YWxpemF0aW9uIFVuaXQpIGV0aGVybmV0IGRyaXZlciBhbmQgcmVwcmVzZW50b3IgaGFuZGxpbmcgdW5kZXIgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvLiBUaGlzIGNvZGUgcmVxdWlyZXMgcHJvcHJpZXRhcnkgQ2F2aXVtL01hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlL1NtYXJ0TklDIEFTSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6MjguMTY5ODc0NjkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5MDc1OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDNkOWJjMGNkYmQxYjM3NjAxMGQ1ZmY5NGE1YzkyZmE4NjIwNjBlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjA0OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaFxcbmluZGV4IDczZjc0M2U0YTgzZDcuLmY4MzQyYTcxYWFjOTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXFxuQEAgLTE3NzUsMTAgKzE3NzUsMTIgQEAgc3RydWN0IHB0cF9nZXRfY2FwX3JzcCB7XFxuIFxcdHU2NCBjYXA7XFxuIH07XFxuIFxcbisjZGVmaW5lIFJWVV9NQVhfUkVQXFx0NjRcXG4rXFxuIHN0cnVjdCBnZXRfcmVwX2NudF9yc3Age1xcbiBcXHRzdHJ1Y3QgbWJveF9tc2doZHIgaGRyO1xcbiBcXHR1MTYgcmVwX2NudDtcXG4tXFx0dTE2IHJlcF9wZl9tYXBbNjRdO1xcbitcXHR1MTYgcmVwX3BmX21hcFtSVlVfTUFYX1JFUF07XFxuIFxcdHU2NCByc3ZkO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuY1xcbmluZGV4IGZmYmE1NmVlOGE2MGMuLjM5MmQwMjk2M2YwNzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuY1xcbkBAIC0zNzA5LDYgKzM3MDksMjAgQEAgc3RhdGljIHZvaWQgcnZ1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0cnZ1X3VucmVnaXN0ZXJfZGwocnZ1KTtcXG4gXFx0cnZ1X3VucmVnaXN0ZXJfaW50ZXJydXB0cyhydnUpO1xcbiBcXHRydnVfZmxyX3dxX2Rlc3Ryb3kocnZ1KTtcXG4rXFx0aWYgKHJ2dS1cXHUwMDNlcmVwX2V2dF93cSkge1xcbitcXHRcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVwX3dxID0gcnZ1LVxcdTAwM2VyZXBfZXZ0X3dxO1xcbitcXG4rXFx0XFx0LyogTlVMTCB0aGUgcG9pbnRlciBiZWZvcmUgZmx1c2hpbmcgbWJveF93cS4gIEFueSBtYm94IGhhbmRsZXJcXG4rXFx0XFx0ICogc3RpbGwgaW4gZmxpZ2h0IHdpbGwgc25hcHNob3QgTlVMTCB2aWEgUkVBRF9PTkNFKCkgYW5kIHJldHVyblxcbitcXHRcXHQgKiAtRUlOVkFMIHdpdGhvdXQgY2FsbGluZyBxdWV1ZV93b3JrKCksIHNvIG5vIG5ldyBpdGVtcyBjYW4gYmVcXG4rXFx0XFx0ICogYWRkZWQgdG8gcmVwX3dxIGFmdGVyIGZsdXNoX3dvcmtxdWV1ZShtYm94X3dxKSByZXR1cm5zLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V1JJVEVfT05DRShydnUtXFx1MDAzZXJlcF9ldnRfd3EsIE5VTEwpO1xcbitcXHRcXHRmbHVzaF93b3JrcXVldWUocnZ1LVxcdTAwM2VhZnBmX3dxX2luZm8ubWJveF93cSk7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJlcF93cSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZsdXNoX3dvcmtxdWV1ZShydnUtXFx1MDAzZWFmcGZfd3FfaW5mby5tYm94X3dxKTtcXG4rXFx0fVxcbiBcXHRydnVfY2d4X2V4aXQocnZ1KTtcXG4gXFx0cnZ1X2Z3ZGF0YV9leGl0KHJ2dSk7XFxuIFxcdHJ2dV9tY3NfZXhpdChydnUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmNcXG5pbmRleCBhMjc4MWUwZjUwNGUzLi42OWIyNjBmZGQ1MmQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xcbkBAIC00NCw2ICs0NCw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudClcXG4gXFx0aWYgKGV2ZW50LVxcdTAwM2VldmVudCBcXHUwMDI2IFJWVV9FVkVOVF9NQUNfQUREUl9DSEFOR0UpXFxuIFxcdFxcdGV0aGVyX2FkZHJfY29weShwZnZmLVxcdTAwM2VtYWNfYWRkciwgZXZlbnQtXFx1MDAzZWV2dF9kYXRhLm1hYyk7XFxuIFxcbitcXHRpZiAoZXZlbnQtXFx1MDAzZWV2ZW50IFxcdTAwMjYgUlZVX0VWRU5UX1BGVkZfU1RBVEUpXFxuK1xcdFxcdHBmID0gcnZ1X2dldF9wZihydnUtXFx1MDAzZXBkZXYsIGV2ZW50LVxcdTAwM2VoZHIucGNpZnVuYyk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnJ2dS1cXHUwMDNlbWJveF9sb2NrKTtcXG4gXFx0bXNnID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpO1xcbiBcXHRpZiAoIW1zZykge1xcbkBAIC01Myw2ICs1NSwxMCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfdXBfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqZXZlbnQpXFxuIFxcbiBcXHRtc2ctXFx1MDAzZWhkci5wY2lmdW5jID0gZXZlbnQtXFx1MDAzZXBjaWZ1bmM7XFxuIFxcdG1zZy1cXHUwMDNlZXZlbnQgPSBldmVudC1cXHUwMDNlZXZlbnQ7XFxuK1xcdG1zZy1cXHUwMDNlcGNpZnVuYyA9IGV2ZW50LVxcdTAwM2VwY2lmdW5jO1xcbitcXG4rXFx0aWYgKGV2ZW50LVxcdTAwM2VldmVudCBcXHUwMDI2IFJWVV9FVkVOVF9QRlZGX1NUQVRFKVxcbitcXHRcXHRtc2ctXFx1MDAzZWhkci5wY2lmdW5jID0gZXZlbnQtXFx1MDAzZWhkci5wY2lmdW5jO1xcbiBcXG4gXFx0bWVtY3B5KFxcdTAwMjZtc2ctXFx1MDAzZWV2dF9kYXRhLCBcXHUwMDI2ZXZlbnQtXFx1MDAzZWV2dF9kYXRhLCBzaXplb2Yoc3RydWN0IHJlcF9ldnRfZGF0YSkpO1xcbiBcXG5AQCAtOTUsOCArMTAxLDE3IEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfd3FfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtc2dfcnNwICpyc3ApXFxuIHtcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xcbiBcXHRzdHJ1Y3QgcmVwX2V2dHFfZW50ICpxZW50cnk7XFxuIFxcbitcXHR3cSA9IFJFQURfT05DRShydnUtXFx1MDAzZXJlcF9ldnRfd3EpO1xcbitcXHRpZiAoIXdxKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIE9ubHkgdGhlIHJlZ2lzdGVyZWQgcmVwcmVzZW50b3IgUEYgbWF5IHNlbmQgUkVQX0VWRU5UX05PVElGWS4gKi9cXG4rXFx0aWYgKHJlcS1cXHUwMDNlaGRyLnBjaWZ1bmMgIT0gcnZ1LVxcdTAwM2VyZXBfcGNpZnVuYylcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuIFxcdC8qIFRoZSBtYWlsYm94IGRpc3BhdGNoZXIgbm9ybWFsaXNlcyBvbmx5IHRoZSBoZWFkZXIgcGNpZnVuYzsgdGhlXFxuIFxcdCAqIG5lc3RlZCBzdHJ1Y3QgcmVwX2V2ZW50OjpwY2lmdW5jIGJvZHkgZmllbGQgaXMgc2VuZGVyLWNvbnRyb2xsZWRcXG4gXFx0ICogYW5kIGlzIGxhdGVyIHVzZWQgYnkgcnZ1X3JlcF91cF9ub3RpZnkoKSB0byBpbmRleCBydnUtXFx1MDAzZXBmW10gL1xcbkBAIC0xMDUsNiArMTIwLDE0IEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXFxuIFxcdGlmICghaXNfcGZfZnVuY192YWxpZChydnUsIHJlcS1cXHUwMDNlcGNpZnVuYykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogT25seSBDR1gtbWFwcGVkIFBGcyBhcmUgcHJlc2VudCBpbiB0aGUgcmVwcmVzZW50b3IgbWFwLiAqL1xcbitcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHJ2dV9nZXRfcGYocnZ1LVxcdTAwM2VwZGV2LCByZXEtXFx1MDAzZXBjaWZ1bmMpKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoKHJlcS1cXHUwMDNlZXZlbnQgXFx1MDAyNiBSVlVfRVZFTlRfUEZWRl9TVEFURSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ2dV9nZXRfcGYocnZ1LVxcdTAwM2VwZGV2LCByZXEtXFx1MDAzZWhkci5wY2lmdW5jKSBcXHUwMDNlPSBydnUtXFx1MDAzZWh3LVxcdTAwM2V0b3RhbF9wZnMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cWVudHJ5ID0ga21hbGxvY19vYmooKnFlbnRyeSwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICghcWVudHJ5KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTEzLDM3ICsxMzYsMjMgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKnJlcSxcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2xvY2spO1xcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZxZW50cnktXFx1MDAzZW5vZGUsIFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2hlYWQpO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VyZXBfZXZ0cV9sb2NrKTtcXG4tXFx0cXVldWVfd29yayhydnUtXFx1MDAzZXJlcF9ldnRfd3EsIFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yayk7XFxuK1xcdHF1ZXVlX3dvcmsod3EsIFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yayk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBpbnQgcnZ1X3JlcF9ub3RpZnlfcGZ2Zl9zdGF0ZShzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcmVwX2V2ZW50ICpyZXE7XFxuLVxcdGludCBwZjtcXG4rXFx0c3RydWN0IHJlcF9ldmVudCByZXEgPSB7IDAgfTtcXG4rXFx0c3RydWN0IG1zZ19yc3AgcnNwO1xcbiBcXG4gXFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBydnVfZ2V0X3BmKHJ2dS1cXHUwMDNlcGRldiwgcGNpZnVuYykpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHBmID0gcnZ1X2dldF9wZihydnUtXFx1MDAzZXBkZXYsIHJ2dS1cXHUwMDNlcmVwX3BjaWZ1bmMpO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VtYm94X2xvY2spO1xcbi1cXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX3JlcF9ldmVudF91cF9ub3RpZnkocnZ1LCBwZik7XFxuLVxcdGlmICghcmVxKSB7XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VtYm94X2xvY2spO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbi1cXG4tXFx0cmVxLVxcdTAwM2VoZHIucGNpZnVuYyA9IHJ2dS1cXHUwMDNlcmVwX3BjaWZ1bmM7XFxuLVxcdHJlcS1cXHUwMDNlZXZlbnQgfD0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XFxuLVxcdHJlcS1cXHUwMDNlcGNpZnVuYyA9IHBjaWZ1bmM7XFxuLVxcdHJlcS1cXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XFxuLVxcbi1cXHRvdHgyX21ib3hfd2FpdF9mb3JfemVybyhcXHUwMDI2cnZ1LVxcdTAwM2VhZnBmX3dxX2luZm8ubWJveF91cCwgcGYpO1xcbi1cXHRvdHgyX21ib3hfbXNnX3NlbmRfdXAoXFx1MDAyNnJ2dS1cXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTtcXG4tXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VtYm94X2xvY2spO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmVxLmhkci5wY2lmdW5jID0gcnZ1LVxcdTAwM2VyZXBfcGNpZnVuYztcXG4rXFx0cmVxLmV2ZW50ID0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XFxuK1xcdHJlcS5wY2lmdW5jID0gcGNpZnVuYztcXG4rXFx0cmVxLmV2dF9kYXRhLnZmX3N0YXRlID0gZW5hYmxlO1xcbitcXHRyZXR1cm4gcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHJ2dSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJzcCk7XFxuIH1cXG4gXFxuICNkZWZpbmUgUlZVX0xGX1JYX1NUQVRTKHJlZykgXFxcXFxcbkBAIC0zMjUsNiArMzM0LDcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcXG4gXFx0dTE2IHN0YXJ0ID0gcnN3aXRjaC1cXHUwMDNlc3RhcnRfZW50cnk7XFxuIFxcdHN0cnVjdCBydnVfaHdpbmZvICpodyA9IHJ2dS1cXHUwMDNlaHc7XFxuIFxcdHUxNiBwY2lmdW5jLCBlbnRyeSA9IDA7XFxuK1xcdHN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZjtcXG4gXFx0aW50IHBmLCB2ZiwgbnVtdmZzO1xcbiBcXHRpbnQgZXJyLCBuaXhsZiwgaTtcXG4gXFx0dTggcmVwO1xcbkBAIC0zMzQsMTkgKzM0NCwyMiBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cXHUwMDNlcGRldiwgcGYsIDApO1xcbitcXHRcXHRwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XFxuIFxcdFxcdHJ2dV9nZXRfbml4X2Jsa2FkZHIocnZ1LCBwY2lmdW5jKTtcXG4rXFx0XFx0aWYgKHRlc3RfYml0KE5JWExGX0lOSVRJQUxJWkVELCBcXHUwMDI2cGZ2Zi1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIHRydWUpO1xcbiBcXHRcXHRyZXAgPSB0cnVlO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMjsgaSsrKSB7XFxuIFxcdFxcdFxcdGVyciA9IHJ2dV9yZXBfaW5zdGFsbF9yeF9ydWxlKHJ2dSwgcGNpZnVuYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhcnQgKyBlbnRyeSwgcmVwKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9sYms7XFxuIFxcdFxcdFxcdHJzd2l0Y2gtXFx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkrK10gPSBwY2lmdW5jO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGFydCArIGVudHJ5LCByZXApO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2xiaztcXG4gXFx0XFx0XFx0cnN3aXRjaC1cXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XFxuIFxcdFxcdFxcdHJlcCA9IGZhbHNlO1xcbiBcXHRcXHR9XFxuQEAgLTM1NCw5ICszNjcsMTIgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcXG4gXFx0XFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXFx1MDAyNm51bXZmcywgTlVMTCk7XFxuIFxcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIG51bXZmczsgdmYrKykge1xcbiBcXHRcXHRcXHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXFx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xcbitcXHRcXHRcXHRwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XFxuK1xcdFxcdFxcdGlmICh0ZXN0X2JpdChOSVhMRl9JTklUSUFMSVpFRCwgXFx1MDAyNnBmdmYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTtcXG4gXFx0XFx0XFx0cnZ1X2dldF9uaXhfYmxrYWRkcihydnUsIHBjaWZ1bmMpO1xcbiBcXG4tXFx0XFx0XFx0LyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqL1xcbitcXHRcXHRcXHQvKiBTa2lwIGluc3RhbGxpbmcgcnVsZXMgaWYgbml4bGYgaXMgbm90IGF0dGFjaGVkICovXFxuIFxcdFxcdFxcdGVyciA9IG5peF9nZXRfbml4bGYocnZ1LCBwY2lmdW5jLCBcXHUwMDI2bml4bGYsIE5VTEwpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMzY2LDMwICszODIsMzcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhcnQgKyBlbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVwKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9sYms7XFxuIFxcdFxcdFxcdFxcdHJzd2l0Y2gtXFx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkrK10gPSBwY2lmdW5jO1xcbiBcXG4gXFx0XFx0XFx0XFx0ZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGFydCArIGVudHJ5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXApO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2xiaztcXG4gXFx0XFx0XFx0XFx0cnN3aXRjaC1cXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XFxuIFxcdFxcdFxcdFxcdHJlcCA9IGZhbHNlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovXFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2xvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cnZ1LVxcdTAwM2VyZXBfZXZ0cV9oZWFkKTtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTtcXG4tXFx0cnZ1LVxcdTAwM2VyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJyZXBfZXZ0X3dxXFxcIiwgV1FfUEVSQ1BVLCAwKTtcXG4tXFx0aWYgKCFydnUtXFx1MDAzZXJlcF9ldnRfd3EpIHtcXG4tXFx0XFx0ZGV2X2VycihydnUtXFx1MDAzZWRldiwgXFxcIlJFUCB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rZXJyX2Rpc2FibGVfbGJrOlxcbitcXHQvKiBVbmRvIGFueSBMQksgbGlua3MgZW5hYmxlZCBhYm92ZSBiZWZvcmUgdGhlIE1DQU0gcnVsZSBmYWlsdXJlLlxcbitcXHQgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChwZiA9IDE7IHBmIFxcdTAwM2MgaHctXFx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xcbitcXHRcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cXHUwMDNlcGRldiwgcGYsIDApO1xcbitcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXFx1MDAyNm51bXZmcywgTlVMTCk7XFxuK1xcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIG51bXZmczsgdmYrKykge1xcbitcXHRcXHRcXHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXFx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xcbitcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiB2b2lkIHJ2dV9yZXBfdXBkYXRlX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsIGJvb2wgZW5hKVxcbkBAIC00NDMsMzUgKzQ2Niw5MiBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9lc3dfY2ZnKHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IGVzd19jZmdfcmVxICpyZXEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ2dV9yZXBfZ2V0X3JlcF9tYXAoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGdldF9yZXBfY250X3JzcCAqcnNwKVxcbit7XFxuK1xcdGludCByZXA7XFxuK1xcbitcXHRpZiAocmVxLVxcdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXFx1MDAzZXJlcF9wY2lmdW5jKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0cnNwLVxcdTAwM2VyZXBfY250ID0gcnZ1LVxcdTAwM2VyZXBfY250O1xcbitcXHRmb3IgKHJlcCA9IDA7IHJlcCBcXHUwMDNjIHJ2dS1cXHUwMDNlcmVwX2NudDsgcmVwKyspXFxuK1xcdFxcdHJzcC1cXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gcnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgcnZ1X21ib3hfaGFuZGxlcl9nZXRfcmVwX2NudChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApXFxuIHtcXG4tXFx0aW50IHBmLCB2ZiwgbnVtdmZzLCBod3ZmLCByZXAgPSAwO1xcbitcXHRpbnQgcGYsIHZmLCBudW12ZnMsIGh3dmYsIHJlcCA9IDAsIGNudDtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcdHUxNiBwY2lmdW5jO1xcbitcXHR1MTYgKm1hcDtcXG4rXFxuK1xcdC8qIFNlcmlhbGl6ZSBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uLiBtYm94X3dxIGlzIFdRX1BFUkNQVSBzb1xcbitcXHQgKiBoYW5kbGVycyBmb3IgZGlmZmVyZW50IFBGcyBjYW4gcnVuIGNvbmN1cnJlbnRseTsgd2l0aG91dCB0aGlzXFxuK1xcdCAqIGxvY2sgdHdvIGNhbGxlcnMgY291bGQgYm90aCBvYnNlcnZlIHJlcDJwZnZmX21hcCA9PSBOVUxMIGFuZFxcbitcXHQgKiBkb3VibGUtYWxsb2NhdGUgdGhlIHdvcmtxdWV1ZSwgbGVha2luZyBvbmUgcGVybWFuZW50bHkuXFxuK1xcdCAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJzcmNfbG9jayk7XFxuK1xcbitcXHRpZiAocnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXApIHtcXG4rXFx0XFx0cmV0ID0gcnZ1X3JlcF9nZXRfcmVwX21hcChydnUsIHJlcSwgcnNwKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdHJ2dS1cXHUwMDNlcmVwX3BjaWZ1bmMgPSByZXEtXFx1MDAzZWhkci5wY2lmdW5jO1xcbi1cXHRyc3AtXFx1MDAzZXJlcF9jbnQgPSBydnUtXFx1MDAzZWNneF9tYXBwZWRfcGZzICsgcnZ1LVxcdTAwM2VjZ3hfbWFwcGVkX3ZmcztcXG4tXFx0cnZ1LVxcdTAwM2VyZXBfY250ID0gcnNwLVxcdTAwM2VyZXBfY250O1xcbitcXHRjbnQgPSBtaW5fdChpbnQsIHJ2dS1cXHUwMDNlY2d4X21hcHBlZF9wZnMgKyBydnUtXFx1MDAzZWNneF9tYXBwZWRfdmZzLFxcbitcXHRcXHQgICAgUlZVX01BWF9SRVApO1xcbiBcXG4tXFx0cnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXAgPSBkZXZtX2t6YWxsb2MocnZ1LVxcdTAwM2VkZXYsIHJ2dS1cXHUwMDNlcmVwX2NudCAqXFxuLVxcdFxcdFxcdFxcdFxcdCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghcnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXApXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHQvKiBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCBzbyB0aGUgcG9pbnRlciBpcyBhbHdheXMgbm9uLU5VTExcXG4rXFx0ICogb25jZSBwdWJsaXNoZWQsIGtlZXBpbmcgdGhlIGZhc3QtcGF0aCBjaGVjayBhYm92ZSByZWxpYWJsZS5cXG4rXFx0ICovXFxuK1xcdG1hcCA9IGRldm1fa3phbGxvYyhydnUtXFx1MDAzZWRldiwgKGNudCA/OiAxKSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtYXApIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAocGYgPSAwOyBwZiBcXHUwMDNjIHJ2dS1cXHUwMDNlaHctXFx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xcbiBcXHRcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChyZXAgXFx1MDAzZT0gY250KVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVxcdTAwM2VwZGV2LCBwZiwgMCk7XFxuLVxcdFxcdHJ2dS1cXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF0gPSBwY2lmdW5jO1xcbitcXHRcXHRtYXBbcmVwXSA9IHBjaWZ1bmM7XFxuIFxcdFxcdHJzcC1cXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gcGNpZnVuYztcXG4gXFx0XFx0cmVwKys7XFxuIFxcdFxcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFxcdTAwMjZudW12ZnMsIFxcdTAwMjZod3ZmKTtcXG4tXFx0XFx0Zm9yICh2ZiA9IDA7IHZmIFxcdTAwM2MgbnVtdmZzOyB2ZisrKSB7XFxuLVxcdFxcdFxcdHJ2dS1cXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF0gPSBwY2lmdW5jIHxcXG4tXFx0XFx0XFx0XFx0KCh2ZiArIDEpIFxcdTAwMjYgUlZVX1BGVkZfRlVOQ19NQVNLKTtcXG4tXFx0XFx0XFx0cnNwLVxcdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXFx1MDAzZXJlcDJwZnZmX21hcFtyZXBdO1xcbitcXHRcXHRmb3IgKHZmID0gMDsgdmYgXFx1MDAzYyBudW12ZnMgXFx1MDAyNlxcdTAwMjYgcmVwIFxcdTAwM2MgY250OyB2ZisrKSB7XFxuK1xcdFxcdFxcdG1hcFtyZXBdID0gcGNpZnVuYyB8ICgodmYgKyAxKSBcXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSyk7XFxuK1xcdFxcdFxcdHJzcC1cXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gbWFwW3JlcF07XFxuIFxcdFxcdFxcdHJlcCsrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWNudCkge1xcbitcXHRcXHRydnUtXFx1MDAzZXJlcDJwZnZmX21hcCA9IG1hcDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovXFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2xvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cnZ1LVxcdTAwM2VyZXBfZXZ0cV9oZWFkKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTtcXG4rXFx0cnZ1LVxcdTAwM2VyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJyZXBfZXZ0X3dxXFxcIiwgV1FfVU5CT1VORCwgMCk7XFxuK1xcdGlmICghcnZ1LVxcdTAwM2VyZXBfZXZ0X3dxKSB7XFxuK1xcdFxcdGRldl9lcnIocnZ1LVxcdTAwM2VkZXYsIFxcXCJSRVAgd29ya3F1ZXVlIGFsbG9jYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZGV2bV9rZnJlZShydnUtXFx1MDAzZWRldiwgbWFwKTtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJ2dS1cXHUwMDNlcmVwX2NudCA9IGNudDtcXG4rXFx0cnNwLVxcdTAwM2VyZXBfY250ID0gY250O1xcbitcXHRydnUtXFx1MDAzZXJlcDJwZnZmX21hcCA9IG1hcDtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnJ2dS1cXHUwMDNlcnNyY19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmNcXG5pbmRleCA0OWNlMzg2ODVhN2U2Li44YzJjOTg0MDM1MDc0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9zd2l0Y2guY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9zd2l0Y2guY1xcbkBAIC0xMiwxMSArMTIsMTggQEAgdm9pZCBydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnZ1X3BmdmYgKnBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcXG4gXFx0c3RydWN0IG5peF9odyAqbml4X2h3O1xcbitcXHRpbnQgYmxrYWRkcjtcXG4gXFxuLVxcdG5peF9odyA9IGdldF9uaXhfaHcocnZ1LVxcdTAwM2VodywgcGZ2Zi1cXHUwMDNlbml4X2Jsa2FkZHIpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJzcmNfbG9jayk7XFxuK1xcdGJsa2FkZHIgPSBwZnZmLVxcdTAwM2VuaXhfYmxrYWRkcjtcXG4rXFx0bml4X2h3ID0gZ2V0X25peF9odyhydnUtXFx1MDAzZWh3LCBibGthZGRyKTtcXG4gXFx0LyogRW5hYmxlIExCSyBsaW5rcyB3aXRoIGNoYW5uZWwgNjMgZm9yIFRYIE1DQU0gcnVsZSAqL1xcbi1cXHRydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBwZnZmLVxcdTAwM2VuaXhfYmxrYWRkciwgcGNpZnVuYyxcXG4rXFx0aWYgKCFuaXhfaHcpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBibGthZGRyLCBwY2lmdW5jLFxcbiBcXHRcXHRcXHQgICBcXHUwMDI2bml4X2h3LVxcdTAwM2V0eHNjaFtOSVhfVFhTQ0hfTFZMX1RMMl0sIGVuYWJsZSk7XFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJzcmNfbG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnZ1X3N3aXRjaF9pbnN0YWxsX3J4X3J1bGUoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYyxcXG5AQCAtMjI5LDggKzIzNiwyMCBAQCB2b2lkIHJ2dV9zd2l0Y2hfZGlzYWJsZShzdHJ1Y3QgcnZ1ICpydnUpXFxuIFxcdGlmICghcnN3aXRjaC1cXHUwMDNldXNlZF9lbnRyaWVzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAocnZ1LVxcdTAwM2VyZXBfbW9kZSlcXG4rXFx0aWYgKHJ2dS1cXHUwMDNlcmVwX21vZGUpIHtcXG4rXFx0XFx0Zm9yIChwZiA9IDE7IHBmIFxcdTAwM2MgaHctXFx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xcbitcXHRcXHRcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cXHUwMDNlcGRldiwgcGYsIDApO1xcbitcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXFx1MDAyNm51bXZmcywgTlVMTCk7XFxuK1xcdFxcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIG51bXZmczsgdmYrKykge1xcbitcXHRcXHRcXHRcXHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXFx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xcbitcXHRcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gZnJlZV9lbnRzO1xcbitcXHR9XFxuIFxcbiBcXHRmb3IgKHBmID0gMTsgcGYgXFx1MDAzYyBody1cXHUwMDNldG90YWxfcGZzOyBwZisrKSB7XFxuIFxcdFxcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcXG5pbmRleCAwZjVkNTY0MmQzZjdhLi5lZjQ3ZTdlMjE5MDE2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xcbkBAIC0zMDEsNiArMzAxLDEyIEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfc3RhdGVfZXZ0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwcml2LFxcbiBcXHRpbnQgcmVwX2lkO1xcbiBcXG4gXFx0cmVwX2lkID0gcnZ1X3JlcF9nZXRfcmVwaWQocHJpdiwgaW5mby1cXHUwMDNlcGNpZnVuYyk7XFxuK1xcdGlmIChyZXBfaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUkVQIHN0YXRlIGV2ZW50IGZvciB1bmtub3duIHBjaWZ1bmMgMHgleCAoZXJyICVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VwY2lmdW5jLCByZXBfaWQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFx0cmVwID0gcHJpdi1cXHUwMDNlcmVwc1tyZXBfaWRdO1xcbiBcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUpXFxuIFxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcXG5AQCAtNDU5LDYgKzQ2NSw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpO1xcbiBcXG4rXFx0aWYgKHJlcC1cXHUwMDNlcGNpZnVuYyBcXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRldnQuZXZlbnQgPSBSVlVfRVZFTlRfUE9SVF9TVEFURTtcXG4gXFx0ZXZ0LmV2dF9kYXRhLnBvcnRfc3RhdGUgPSAxO1xcbiBcXHRldnQucGNpZnVuYyA9IHJlcC1cXHUwMDNlcGNpZnVuYztcXG5AQCAtNDc4LDYgKzQ4Nyw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUoZGV2KTtcXG4gXFxuK1xcdGlmIChyZXAtXFx1MDAzZXBjaWZ1bmMgXFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0ZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7XFxuIFxcdGV2dC5wY2lmdW5jID0gcmVwLVxcdTAwM2VwY2lmdW5jO1xcbiBcXHRydnVfcmVwX25vdGlmeV9wZnZmKHByaXYsIFJWVV9FVkVOVF9QT1JUX1NUQVRFLCBcXHUwMDI2ZXZ0KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXFxuaW5kZXggNWJjOWUyYzdkODAwYi4uYjk4ZmUxOTFlODNhMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcXG5AQCAtMTYsNyArMTYsNiBAQFxcbiBcXG4gI2RlZmluZSBQQ0lfREVWSURfUlZVX1JFUFxcdDB4QTBFMFxcbiBcXG4tI2RlZmluZSBSVlVfTUFYX1JFUFxcdE9UWDJfTUFYX0NRX0NOVFxcbiBcXG4gc3RydWN0IHJlcF9zdGF0cyB7XFxuIFxcdHU2NCByeF9ieXRlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6MjkuNjc5NTM5MDI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjgyMzg2NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQzZDliYzBjZGJkMWIzNzYwMTBkNWZmOTRhNWM5MmZhODYyMDYwZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjA0OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG5pbmRleCA3M2Y3NDNlNGE4M2Q3Li5mODM0MmE3MWFhYzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmhcbkBAIC0xNzc1LDEwICsxNzc1LDEyIEBAIHN0cnVjdCBwdHBfZ2V0X2NhcF9yc3Age1xuIFx0dTY0IGNhcDtcbiB9O1xuIFxuKyNkZWZpbmUgUlZVX01BWF9SRVBcdDY0XG4rXG4gc3RydWN0IGdldF9yZXBfY250X3JzcCB7XG4gXHRzdHJ1Y3QgbWJveF9tc2doZHIgaGRyO1xuIFx0dTE2IHJlcF9jbnQ7XG4tXHR1MTYgcmVwX3BmX21hcFs2NF07XG4rXHR1MTYgcmVwX3BmX21hcFtSVlVfTUFYX1JFUF07XG4gXHR1NjQgcnN2ZDtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcbmluZGV4IGZmYmE1NmVlOGE2MGMuLjM5MmQwMjk2M2YwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcbkBAIC0zNzA5LDYgKzM3MDksMjAgQEAgc3RhdGljIHZvaWQgcnZ1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHJ2dV91bnJlZ2lzdGVyX2RsKHJ2dSk7XG4gXHRydnVfdW5yZWdpc3Rlcl9pbnRlcnJ1cHRzKHJ2dSk7XG4gXHRydnVfZmxyX3dxX2Rlc3Ryb3kocnZ1KTtcbitcdGlmIChydnUtXHUwMDNlcmVwX2V2dF93cSkge1xuK1x0XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVwX3dxID0gcnZ1LVx1MDAzZXJlcF9ldnRfd3E7XG4rXG4rXHRcdC8qIE5VTEwgdGhlIHBvaW50ZXIgYmVmb3JlIGZsdXNoaW5nIG1ib3hfd3EuICBBbnkgbWJveCBoYW5kbGVyXG4rXHRcdCAqIHN0aWxsIGluIGZsaWdodCB3aWxsIHNuYXBzaG90IE5VTEwgdmlhIFJFQURfT05DRSgpIGFuZCByZXR1cm5cbitcdFx0ICogLUVJTlZBTCB3aXRob3V0IGNhbGxpbmcgcXVldWVfd29yaygpLCBzbyBubyBuZXcgaXRlbXMgY2FuIGJlXG4rXHRcdCAqIGFkZGVkIHRvIHJlcF93cSBhZnRlciBmbHVzaF93b3JrcXVldWUobWJveF93cSkgcmV0dXJucy5cbitcdFx0ICovXG4rXHRcdFdSSVRFX09OQ0UocnZ1LVx1MDAzZXJlcF9ldnRfd3EsIE5VTEwpO1xuK1x0XHRmbHVzaF93b3JrcXVldWUocnZ1LVx1MDAzZWFmcGZfd3FfaW5mby5tYm94X3dxKTtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUocmVwX3dxKTtcbitcdH0gZWxzZSB7XG4rXHRcdGZsdXNoX3dvcmtxdWV1ZShydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfd3EpO1xuK1x0fVxuIFx0cnZ1X2NneF9leGl0KHJ2dSk7XG4gXHRydnVfZndkYXRhX2V4aXQocnZ1KTtcbiBcdHJ2dV9tY3NfZXhpdChydnUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xuaW5kZXggYTI3ODFlMGY1MDRlMy4uNjliMjYwZmRkNTJkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3JlcC5jXG5AQCAtNDQsNiArNDQsOCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfdXBfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqZXZlbnQpXG4gXHRpZiAoZXZlbnQtXHUwMDNlZXZlbnQgXHUwMDI2IFJWVV9FVkVOVF9NQUNfQUREUl9DSEFOR0UpXG4gXHRcdGV0aGVyX2FkZHJfY29weShwZnZmLVx1MDAzZW1hY19hZGRyLCBldmVudC1cdTAwM2VldnRfZGF0YS5tYWMpO1xuIFxuK1x0aWYgKGV2ZW50LVx1MDAzZWV2ZW50IFx1MDAyNiBSVlVfRVZFTlRfUEZWRl9TVEFURSlcbitcdFx0cGYgPSBydnVfZ2V0X3BmKHJ2dS1cdTAwM2VwZGV2LCBldmVudC1cdTAwM2VoZHIucGNpZnVuYyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuIFx0bXNnID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpO1xuIFx0aWYgKCFtc2cpIHtcbkBAIC01Myw2ICs1NSwxMCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfdXBfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqZXZlbnQpXG4gXG4gXHRtc2ctXHUwMDNlaGRyLnBjaWZ1bmMgPSBldmVudC1cdTAwM2VwY2lmdW5jO1xuIFx0bXNnLVx1MDAzZWV2ZW50ID0gZXZlbnQtXHUwMDNlZXZlbnQ7XG4rXHRtc2ctXHUwMDNlcGNpZnVuYyA9IGV2ZW50LVx1MDAzZXBjaWZ1bmM7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlZXZlbnQgXHUwMDI2IFJWVV9FVkVOVF9QRlZGX1NUQVRFKVxuK1x0XHRtc2ctXHUwMDNlaGRyLnBjaWZ1bmMgPSBldmVudC1cdTAwM2VoZHIucGNpZnVuYztcbiBcbiBcdG1lbWNweShcdTAwMjZtc2ctXHUwMDNlZXZ0X2RhdGEsIFx1MDAyNmV2ZW50LVx1MDAzZWV2dF9kYXRhLCBzaXplb2Yoc3RydWN0IHJlcF9ldnRfZGF0YSkpO1xuIFxuQEAgLTk1LDggKzEwMSwxNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3dxX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbXNnX3JzcCAqcnNwKVxuIHtcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTtcbiBcdHN0cnVjdCByZXBfZXZ0cV9lbnQgKnFlbnRyeTtcbiBcbitcdHdxID0gUkVBRF9PTkNFKHJ2dS1cdTAwM2VyZXBfZXZ0X3dxKTtcbitcdGlmICghd3EpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogT25seSB0aGUgcmVnaXN0ZXJlZCByZXByZXNlbnRvciBQRiBtYXkgc2VuZCBSRVBfRVZFTlRfTk9USUZZLiAqL1xuK1x0aWYgKHJlcS1cdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4gXHQvKiBUaGUgbWFpbGJveCBkaXNwYXRjaGVyIG5vcm1hbGlzZXMgb25seSB0aGUgaGVhZGVyIHBjaWZ1bmM7IHRoZVxuIFx0ICogbmVzdGVkIHN0cnVjdCByZXBfZXZlbnQ6OnBjaWZ1bmMgYm9keSBmaWVsZCBpcyBzZW5kZXItY29udHJvbGxlZFxuIFx0ICogYW5kIGlzIGxhdGVyIHVzZWQgYnkgcnZ1X3JlcF91cF9ub3RpZnkoKSB0byBpbmRleCBydnUtXHUwMDNlcGZbXSAvXG5AQCAtMTA1LDYgKzEyMCwxNCBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqcmVxLFxuIFx0aWYgKCFpc19wZl9mdW5jX3ZhbGlkKHJ2dSwgcmVxLVx1MDAzZXBjaWZ1bmMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIE9ubHkgQ0dYLW1hcHBlZCBQRnMgYXJlIHByZXNlbnQgaW4gdGhlIHJlcHJlc2VudG9yIG1hcC4gKi9cbitcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcnZ1X2dldF9wZihydnUtXHUwMDNlcGRldiwgcmVxLVx1MDAzZXBjaWZ1bmMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoKHJlcS1cdTAwM2VldmVudCBcdTAwMjYgUlZVX0VWRU5UX1BGVkZfU1RBVEUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHJlcS1cdTAwM2VoZHIucGNpZnVuYykgXHUwMDNlPSBydnUtXHUwMDNlaHctXHUwMDNldG90YWxfcGZzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCFxZW50cnkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTExMywzNyArMTM2LDIzIEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXG4gXHRzcGluX2xvY2soXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZxZW50cnktXHUwMDNlbm9kZSwgXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2hlYWQpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuLVx0cXVldWVfd29yayhydnUtXHUwMDNlcmVwX2V2dF93cSwgXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRfd29yayk7XG4rXHRxdWV1ZV93b3JrKHdxLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dF93b3JrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgcnZ1X3JlcF9ub3RpZnlfcGZ2Zl9zdGF0ZShzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcbiB7XG4tXHRzdHJ1Y3QgcmVwX2V2ZW50ICpyZXE7XG4tXHRpbnQgcGY7XG4rXHRzdHJ1Y3QgcmVwX2V2ZW50IHJlcSA9IHsgMCB9O1xuK1x0c3RydWN0IG1zZ19yc3AgcnNwO1xuIFxuIFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBydnVfZ2V0X3BmKHJ2dS1cdTAwM2VwZGV2LCBwY2lmdW5jKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cGYgPSBydnVfZ2V0X3BmKHJ2dS1cdTAwM2VwZGV2LCBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbi1cdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfcmVwX2V2ZW50X3VwX25vdGlmeShydnUsIHBmKTtcbi1cdGlmICghcmVxKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4tXHRyZXEtXHUwMDNlaGRyLnBjaWZ1bmMgPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmM7XG4tXHRyZXEtXHUwMDNlZXZlbnQgfD0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XG4tXHRyZXEtXHUwMDNlcGNpZnVuYyA9IHBjaWZ1bmM7XG4tXHRyZXEtXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XG4tXG4tXHRvdHgyX21ib3hfd2FpdF9mb3JfemVybyhcdTAwMjZydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTtcbi1cdG90eDJfbWJveF9tc2dfc2VuZF91cChcdTAwMjZydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbi1cdHJldHVybiAwO1xuK1x0cmVxLmhkci5wY2lmdW5jID0gcnZ1LVx1MDAzZXJlcF9wY2lmdW5jO1xuK1x0cmVxLmV2ZW50ID0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XG4rXHRyZXEucGNpZnVuYyA9IHBjaWZ1bmM7XG4rXHRyZXEuZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XG4rXHRyZXR1cm4gcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHJ2dSwgXHUwMDI2cmVxLCBcdTAwMjZyc3ApO1xuIH1cbiBcbiAjZGVmaW5lIFJWVV9MRl9SWF9TVEFUUyhyZWcpIFxcXG5AQCAtMzI1LDYgKzMzNCw3IEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHR1MTYgc3RhcnQgPSByc3dpdGNoLVx1MDAzZXN0YXJ0X2VudHJ5O1xuIFx0c3RydWN0IHJ2dV9od2luZm8gKmh3ID0gcnZ1LVx1MDAzZWh3O1xuIFx0dTE2IHBjaWZ1bmMsIGVudHJ5ID0gMDtcbitcdHN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZjtcbiBcdGludCBwZiwgdmYsIG51bXZmcztcbiBcdGludCBlcnIsIG5peGxmLCBpO1xuIFx0dTggcmVwO1xuQEAgLTMzNCwxOSArMzQ0LDIyIEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4rXHRcdHBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcbiBcdFx0cnZ1X2dldF9uaXhfYmxrYWRkcihydnUsIHBjaWZ1bmMpO1xuK1x0XHRpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsIFx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgdHJ1ZSk7XG4gXHRcdHJlcCA9IHRydWU7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkrKykge1xuIFx0XHRcdGVyciA9IHJ2dV9yZXBfaW5zdGFsbF9yeF9ydWxlKHJ2dSwgcGNpZnVuYyxcbiBcdFx0XHRcdFx0XHQgICAgICBzdGFydCArIGVudHJ5LCByZXApO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0Z290byBlcnJfZGlzYWJsZV9sYms7XG4gXHRcdFx0cnN3aXRjaC1cdTAwM2VlbnRyeTJwY2lmdW5jW2VudHJ5KytdID0gcGNpZnVuYztcbiBcbiBcdFx0XHRlcnIgPSBydnVfcmVwX2luc3RhbGxfdHhfcnVsZShydnUsIHBjaWZ1bmMsXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RhcnQgKyBlbnRyeSwgcmVwKTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbGJrO1xuIFx0XHRcdHJzd2l0Y2gtXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XG4gXHRcdFx0cmVwID0gZmFsc2U7XG4gXHRcdH1cbkBAIC0zNTQsOSArMzY3LDEyIEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4gXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzOyB2ZisrKSB7XG4gXHRcdFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xuK1x0XHRcdHBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcbitcdFx0XHRpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsIFx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTtcbiBcdFx0XHRydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7XG4gXG4tXHRcdFx0LyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqL1xuK1x0XHRcdC8qIFNraXAgaW5zdGFsbGluZyBydWxlcyBpZiBuaXhsZiBpcyBub3QgYXR0YWNoZWQgKi9cbiBcdFx0XHRlcnIgPSBuaXhfZ2V0X25peGxmKHJ2dSwgcGNpZnVuYywgXHUwMDI2bml4bGYsIE5VTEwpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zNjYsMzAgKzM4MiwzNyBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KVxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc3RhcnQgKyBlbnRyeSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHJlcCk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9kaXNhYmxlX2xiaztcbiBcdFx0XHRcdHJzd2l0Y2gtXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XG4gXG4gXHRcdFx0XHRlcnIgPSBydnVfcmVwX2luc3RhbGxfdHhfcnVsZShydnUsIHBjaWZ1bmMsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdGFydCArIGVudHJ5LFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgcmVwKTtcbiBcdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbGJrO1xuIFx0XHRcdFx0cnN3aXRjaC1cdTAwM2VlbnRyeTJwY2lmdW5jW2VudHJ5KytdID0gcGNpZnVuYztcbiBcdFx0XHRcdHJlcCA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIDA7XG4gXG4tXHQvKiBJbml0aWFsaXplIHRoZSB3cSBmb3IgaGFuZGxpbmcgUkVQIGV2ZW50cyAqL1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2hlYWQpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0X3dvcmssIHJ2dV9yZXBfd3FfaGFuZGxlcik7XG4tXHRydnUtXHUwMDNlcmVwX2V2dF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJlcF9ldnRfd3FcIiwgV1FfUEVSQ1BVLCAwKTtcbi1cdGlmICghcnZ1LVx1MDAzZXJlcF9ldnRfd3EpIHtcbi1cdFx0ZGV2X2VycihydnUtXHUwMDNlZGV2LCBcIlJFUCB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlsZWRcXG5cIik7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK2Vycl9kaXNhYmxlX2xiazpcbitcdC8qIFVuZG8gYW55IExCSyBsaW5rcyBlbmFibGVkIGFib3ZlIGJlZm9yZSB0aGUgTUNBTSBydWxlIGZhaWx1cmUuXG4rXHQgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLlxuK1x0ICovXG4rXHRmb3IgKHBmID0gMTsgcGYgXHUwMDNjIGh3LVx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xuK1x0XHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVx1MDAzZXBkZXYsIHBmLCAwKTtcbitcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7XG4rXHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4rXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzOyB2ZisrKSB7XG4rXHRcdFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xuK1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuK1x0XHR9XG4gXHR9XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgcnZ1X3JlcF91cGRhdGVfcnVsZXMoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYywgYm9vbCBlbmEpXG5AQCAtNDQzLDM1ICs0NjYsOTIgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfZXN3X2NmZyhzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBlc3dfY2ZnX3JlcSAqcmVxLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnZ1X3JlcF9nZXRfcmVwX21hcChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBnZXRfcmVwX2NudF9yc3AgKnJzcClcbit7XG4rXHRpbnQgcmVwO1xuK1xuK1x0aWYgKHJlcS1cdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRyc3AtXHUwMDNlcmVwX2NudCA9IHJ2dS1cdTAwM2VyZXBfY250O1xuK1x0Zm9yIChyZXAgPSAwOyByZXAgXHUwMDNjIHJ2dS1cdTAwM2VyZXBfY250OyByZXArKylcbitcdFx0cnNwLVx1MDAzZXJlcF9wZl9tYXBbcmVwXSA9IHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgcnZ1X21ib3hfaGFuZGxlcl9nZXRfcmVwX2NudChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXG4gXHRcdFx0XHQgc3RydWN0IGdldF9yZXBfY250X3JzcCAqcnNwKVxuIHtcbi1cdGludCBwZiwgdmYsIG51bXZmcywgaHd2ZiwgcmVwID0gMDtcbitcdGludCBwZiwgdmYsIG51bXZmcywgaHd2ZiwgcmVwID0gMCwgY250O1xuK1x0aW50IHJldCA9IDA7XG4gXHR1MTYgcGNpZnVuYztcbitcdHUxNiAqbWFwO1xuK1xuK1x0LyogU2VyaWFsaXplIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24uIG1ib3hfd3EgaXMgV1FfUEVSQ1BVIHNvXG4rXHQgKiBoYW5kbGVycyBmb3IgZGlmZmVyZW50IFBGcyBjYW4gcnVuIGNvbmN1cnJlbnRseTsgd2l0aG91dCB0aGlzXG4rXHQgKiBsb2NrIHR3byBjYWxsZXJzIGNvdWxkIGJvdGggb2JzZXJ2ZSByZXAycGZ2Zl9tYXAgPT0gTlVMTCBhbmRcbitcdCAqIGRvdWJsZS1hbGxvY2F0ZSB0aGUgd29ya3F1ZXVlLCBsZWFraW5nIG9uZSBwZXJtYW5lbnRseS5cbitcdCAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbitcbitcdGlmIChydnUtXHUwMDNlcmVwMnBmdmZfbWFwKSB7XG4rXHRcdHJldCA9IHJ2dV9yZXBfZ2V0X3JlcF9tYXAocnZ1LCByZXEsIHJzcCk7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuIFxuIFx0cnZ1LVx1MDAzZXJlcF9wY2lmdW5jID0gcmVxLVx1MDAzZWhkci5wY2lmdW5jO1xuLVx0cnNwLVx1MDAzZXJlcF9jbnQgPSBydnUtXHUwMDNlY2d4X21hcHBlZF9wZnMgKyBydnUtXHUwMDNlY2d4X21hcHBlZF92ZnM7XG4tXHRydnUtXHUwMDNlcmVwX2NudCA9IHJzcC1cdTAwM2VyZXBfY250O1xuK1x0Y250ID0gbWluX3QoaW50LCBydnUtXHUwMDNlY2d4X21hcHBlZF9wZnMgKyBydnUtXHUwMDNlY2d4X21hcHBlZF92ZnMsXG4rXHRcdCAgICBSVlVfTUFYX1JFUCk7XG4gXG4tXHRydnUtXHUwMDNlcmVwMnBmdmZfbWFwID0gZGV2bV9remFsbG9jKHJ2dS1cdTAwM2VkZXYsIHJ2dS1cdTAwM2VyZXBfY250ICpcbi1cdFx0XHRcdFx0IHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghcnZ1LVx1MDAzZXJlcDJwZnZmX21hcClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHQvKiBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCBzbyB0aGUgcG9pbnRlciBpcyBhbHdheXMgbm9uLU5VTExcbitcdCAqIG9uY2UgcHVibGlzaGVkLCBrZWVwaW5nIHRoZSBmYXN0LXBhdGggY2hlY2sgYWJvdmUgcmVsaWFibGUuXG4rXHQgKi9cbitcdG1hcCA9IGRldm1fa3phbGxvYyhydnUtXHUwMDNlZGV2LCAoY250ID86IDEpICogc2l6ZW9mKHUxNiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFtYXApIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXG4gXHRmb3IgKHBmID0gMDsgcGYgXHUwMDNjIHJ2dS1cdTAwM2Vody1cdTAwM2V0b3RhbF9wZnM7IHBmKyspIHtcbiBcdFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpXG4gXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChyZXAgXHUwMDNlPSBjbnQpXG4rXHRcdFx0YnJlYWs7XG4gXHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4tXHRcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmM7XG4rXHRcdG1hcFtyZXBdID0gcGNpZnVuYztcbiBcdFx0cnNwLVx1MDAzZXJlcF9wZl9tYXBbcmVwXSA9IHBjaWZ1bmM7XG4gXHRcdHJlcCsrO1xuIFx0XHRydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCBcdTAwMjZudW12ZnMsIFx1MDAyNmh3dmYpO1xuLVx0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmczsgdmYrKykge1xuLVx0XHRcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmMgfFxuLVx0XHRcdFx0KCh2ZiArIDEpIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spO1xuLVx0XHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF07XG4rXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzIFx1MDAyNlx1MDAyNiByZXAgXHUwMDNjIGNudDsgdmYrKykge1xuK1x0XHRcdG1hcFtyZXBdID0gcGNpZnVuYyB8ICgodmYgKyAxKSBcdTAwMjYgUlZVX1BGVkZfRlVOQ19NQVNLKTtcbitcdFx0XHRyc3AtXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gbWFwW3JlcF07XG4gXHRcdFx0cmVwKys7XG4gXHRcdH1cbiBcdH1cbi1cdHJldHVybiAwO1xuK1xuK1x0aWYgKCFjbnQpIHtcbitcdFx0cnZ1LVx1MDAzZXJlcDJwZnZmX21hcCA9IG1hcDtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHQvKiBJbml0aWFsaXplIHRoZSB3cSBmb3IgaGFuZGxpbmcgUkVQIGV2ZW50cyAqL1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2hlYWQpO1xuK1x0SU5JVF9XT1JLKFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0X3dvcmssIHJ2dV9yZXBfd3FfaGFuZGxlcik7XG4rXHRydnUtXHUwMDNlcmVwX2V2dF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJlcF9ldnRfd3FcIiwgV1FfVU5CT1VORCwgMCk7XG4rXHRpZiAoIXJ2dS1cdTAwM2VyZXBfZXZ0X3dxKSB7XG4rXHRcdGRldl9lcnIocnZ1LVx1MDAzZWRldiwgXCJSRVAgd29ya3F1ZXVlIGFsbG9jYXRpb24gZmFpbGVkXFxuXCIpO1xuK1x0XHRkZXZtX2tmcmVlKHJ2dS1cdTAwM2VkZXYsIG1hcCk7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0cnZ1LVx1MDAzZXJlcF9jbnQgPSBjbnQ7XG4rXHRyc3AtXHUwMDNlcmVwX2NudCA9IGNudDtcbitcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXAgPSBtYXA7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2Vyc3JjX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG5pbmRleCA0OWNlMzg2ODVhN2U2Li44YzJjOTg0MDM1MDc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmNcbkBAIC0xMiwxMSArMTIsMTggQEAgdm9pZCBydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcbiB7XG4gXHRzdHJ1Y3QgcnZ1X3BmdmYgKnBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcbiBcdHN0cnVjdCBuaXhfaHcgKm5peF9odztcbitcdGludCBibGthZGRyO1xuIFxuLVx0bml4X2h3ID0gZ2V0X25peF9odyhydnUtXHUwMDNlaHcsIHBmdmYtXHUwMDNlbml4X2Jsa2FkZHIpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbitcdGJsa2FkZHIgPSBwZnZmLVx1MDAzZW5peF9ibGthZGRyO1xuK1x0bml4X2h3ID0gZ2V0X25peF9odyhydnUtXHUwMDNlaHcsIGJsa2FkZHIpO1xuIFx0LyogRW5hYmxlIExCSyBsaW5rcyB3aXRoIGNoYW5uZWwgNjMgZm9yIFRYIE1DQU0gcnVsZSAqL1xuLVx0cnZ1X25peF90eF90bDJfY2ZnKHJ2dSwgcGZ2Zi1cdTAwM2VuaXhfYmxrYWRkciwgcGNpZnVuYyxcbitcdGlmICghbml4X2h3KVxuK1x0XHRnb3RvIHVubG9jaztcbitcdHJ2dV9uaXhfdHhfdGwyX2NmZyhydnUsIGJsa2FkZHIsIHBjaWZ1bmMsXG4gXHRcdFx0ICAgXHUwMDI2bml4X2h3LVx1MDAzZXR4c2NoW05JWF9UWFNDSF9MVkxfVEwyXSwgZW5hYmxlKTtcbit1bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cnZ1LVx1MDAzZXJzcmNfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnZ1X3N3aXRjaF9pbnN0YWxsX3J4X3J1bGUoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYyxcbkBAIC0yMjksOCArMjM2LDIwIEBAIHZvaWQgcnZ1X3N3aXRjaF9kaXNhYmxlKHN0cnVjdCBydnUgKnJ2dSlcbiBcdGlmICghcnN3aXRjaC1cdTAwM2V1c2VkX2VudHJpZXMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmIChydnUtXHUwMDNlcmVwX21vZGUpXG4rXHRpZiAocnZ1LVx1MDAzZXJlcF9tb2RlKSB7XG4rXHRcdGZvciAocGYgPSAxOyBwZiBcdTAwM2MgaHctXHUwMDNldG90YWxfcGZzOyBwZisrKSB7XG4rXHRcdFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIDApO1xuK1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuK1x0XHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4rXHRcdFx0Zm9yICh2ZiA9IDA7IHZmIFx1MDAzYyBudW12ZnM7IHZmKyspIHtcbitcdFx0XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgdmYgKyAxKTtcbitcdFx0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuK1x0XHRcdH1cbitcdFx0fVxuIFx0XHRnb3RvIGZyZWVfZW50cztcbitcdH1cbiBcbiBcdGZvciAocGYgPSAxOyBwZiBcdTAwM2MgaHctXHUwMDNldG90YWxfcGZzOyBwZisrKSB7XG4gXHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uZWY0N2U3ZTIxOTAxNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXG5AQCAtMzAxLDYgKzMwMSwxMiBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdGludCByZXBfaWQ7XG4gXG4gXHRyZXBfaWQgPSBydnVfcmVwX2dldF9yZXBpZChwcml2LCBpbmZvLVx1MDAzZXBjaWZ1bmMpO1xuK1x0aWYgKHJlcF9pZCBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICAgXCJSRVAgc3RhdGUgZXZlbnQgZm9yIHVua25vd24gcGNpZnVuYyAweCV4IChlcnIgJWQpXFxuXCIsXG4rXHRcdFx0XHQgICAgIGluZm8tXHUwMDNlcGNpZnVuYywgcmVwX2lkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFx0cmVwID0gcHJpdi1cdTAwM2VyZXBzW3JlcF9pZF07XG4gXHRpZiAoaW5mby1cdTAwM2VldnRfZGF0YS52Zl9zdGF0ZSlcbiBcdFx0cmVwLVx1MDAzZWZsYWdzIHw9IFJWVV9SRVBfVkZfSU5JVElBTElaRUQ7XG5AQCAtNDU5LDYgKzQ2NSw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9jYXJyaWVyX29uKGRldik7XG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7XG4gXG4rXHRpZiAocmVwLVx1MDAzZXBjaWZ1bmMgXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRldnQuZXZlbnQgPSBSVlVfRVZFTlRfUE9SVF9TVEFURTtcbiBcdGV2dC5ldnRfZGF0YS5wb3J0X3N0YXRlID0gMTtcbiBcdGV2dC5wY2lmdW5jID0gcmVwLVx1MDAzZXBjaWZ1bmM7XG5AQCAtNDc4LDYgKzQ4Nyw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShkZXYpO1xuIFxuK1x0aWYgKHJlcC1cdTAwM2VwY2lmdW5jIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0ZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7XG4gXHRldnQucGNpZnVuYyA9IHJlcC1cdTAwM2VwY2lmdW5jO1xuIFx0cnZ1X3JlcF9ub3RpZnlfcGZ2Zihwcml2LCBSVlVfRVZFTlRfUE9SVF9TVEFURSwgXHUwMDI2ZXZ0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbmluZGV4IDViYzllMmM3ZDgwMGIuLmI5OGZlMTkxZTgzYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxuQEAgLTE2LDcgKzE2LDYgQEBcbiBcbiAjZGVmaW5lIFBDSV9ERVZJRF9SVlVfUkVQXHQweEEwRTBcbiBcbi0jZGVmaW5lIFJWVV9NQVhfUkVQXHRPVFgyX01BWF9DUV9DTlRcbiBcbiBzdHJ1Y3QgcmVwX3N0YXRzIHtcbiBcdHU2NCByeF9ieXRlcztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjI5LjY3OTU0MDM4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzYzNzM0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHNlZWluZyBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuVGhlIG1vZGlmaWVkIGZpbGVzIGp1bXAgb3V0OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oYCwgYHJ2dS5jYCwgYHJ2dV9yZXAuY2AsIGBydnVfc3dpdGNoLmNgLCBgbmljL3JlcC5jYCwgYW5kIGBuaWMvcmVwLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgT2N0ZW9uVFgyIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIHRoZSBNYXJ2ZWxsIGVjb3N5c3RlbS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBlbnZpcm9ubWVudD8gSXMgdGhpcyBhIFNtYXJ0TklDIG9yIGp1c3Qgc3RhbmRhcmQgbmV0d29yayBmdW5jdGlvbmFsaXR5P1xuXG5Ob3csIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkLCBzb21ldGhpbmcgdmVuZG9yLXNwZWNpZmljIGxpa2UgYSBQQ0llIFNtYXJ0TklDLCBvciBzb21ldGhpbmcgZW11bGF0ZWQ/IE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBzZWFyY2gsIG1heWJlIGBncmVwYCB0aGUgY29kZWJhc2UsIG9yIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRldmljZSBpcyBhY2Nlc3NlZCBhbmQgY29uZmlndXJlZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgZGVmaW5lIHRoZSBlYXNlIG9mIHNldHRpbmcgdXAgYW4gZW52aXJvbm1lbnQgdG8gZnV6eiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDozNC4xMTU5MTYyMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTQ2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DVEVPTlRYMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTIyPWNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjMxOmNvbmZpZyBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjM0LjE2MTgxNjE5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NzEyMjg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBPY3Rlb24gVFgyIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIE1hcnZlbGwgT2N0ZW9uIFRYMiBFdGhlcm5ldCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBsaWVzLCBkZWZpbmluZyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGRyaXZlciBhbmQgdGFpbG9yIGl0IHRvIGEgcGFydGljdWxhciB1c2UgY2FzZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBzeW1ib2xzLCB0aGVpciBkZWZhdWx0cywgYW5kIGFueSBjb25zdHJhaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDozNi4xMzMwNDc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgT0NURU9OVFgyX0FGXFxuICAxMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDExOlxcdFxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIFJlc291cmNlIFZpcnR1YWxpemF0aW9uXFxuICAxODpcXHRcXHQgIFVuaXQncyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcXG4gIDE5OlxcdFxcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxcbiAgMjA6XFx0XFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXFxuICAyMzpcXHRcXHRib29sIFxcXCJEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXFxuICAyNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcXG4gIDI4OlxcdFxcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXFxuICAyOTpcXHRcXHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBPQ1RFT05UWDJfUEZcXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDM1OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDM2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4gIDM4OlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCAhTUFDU0VDXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBPY3Rlb25UWDIgTklDIHBoeXNpY2FsIGZ1bmN0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgT0NURU9OVFgyX1ZGXFxuICA0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG4gIDQ4OlxcdFxcdGhlbHBcXG4gIDQ5OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIE9jdGVvblRYMiBOSUMgdmlydHVhbCBmdW5jdGlvbi5cXG4gIDUwOlxcdFxcbiAgNTE6XFx0Y29uZmlnIFJWVV9FU1dJVENIXFxuICA1MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFxcXCJcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuICA1NDpcXHRcXHRkZWZhdWx0IG1cXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIFJWVSBFLVN3aXRjaCB0aGF0XFxuICA1NzpcXHRcXHQgIHByb3ZpZGVzIGludGVybmFsIFNSSU9WIHBhY2tldCBzdGVlcmluZyBhbmQgc3dpdGNoaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDozNi4xMzMxOTUwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMTk3OTc0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUcmlhZ2UgQ3JpdGVyaWEgYW5kIE9jdGVvblRYMiBDb21wYXRpYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBmYWxscyB1bmRlciBvdXIgc3RhbmRhcmQgdHJpYWdlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFNlY3Rpb24gMiBoaWdobGlnaHRzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFdlJ3JlIGxvb2tpbmcgYXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCAqcmVxdWlyZSogc3BlY2lmaWMgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludC5cblxuTm93LCBsZXQncyBmb2N1cyBvbiB0aGUgT2N0ZW9uVFgyLiBJdCdzIE1hcnZlbGwncyBBUk02NCBTb0MsIGEgbmV0d29yayBwcm9jZXNzb3IsIGVzc2VudGlhbGx5IGEgU21hcnROSUMgd2l0aCBpdHMgUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCAoUlZVKSBBZG1pbiBGdW5jdGlvbiBhbmQgUGh5c2ljYWwgRnVuY3Rpb24uIEFscmlnaHQsIGltcG9ydGFudCBub3RlcyBoZXJlLiBUaGVyZSBhcmUgZGVwZW5kZW5jeSBjaGVja3M6IGl0IHJlbGllcyBvbiBib3RoIDY0LWJpdCBhcmNoaXRlY3R1cmUgd2l0aCBhIGNvbXBpbGUgdGVzdCwgKm9yKiBqdXN0IHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCAqYWxzbyogcmVxdWlyZXMgUENJIHN1cHBvcnQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgT2N0ZW9uVFgyICppcyogYSBwaHlzaWNhbCBQQ0kgb3IgU29DIGRldmljZS4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBJZiBpdCBpcywgdGhlbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgY291bGQgY29tZSBpbnRvIHBsYXkuXG5cbkkgbmVlZCB0byBkaWcgaW50byB0aGUgcHJvYmluZyByb3V0aW5lcyDigJMgYHJ2dV9wcm9iZWAgYW5kIGBvdHgyX3Byb2JlYC4gVGhlc2Ugd2lsbCB0ZWxsIHVzIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgYW5kIHdoZXRoZXIgaXTigJlzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgcGh5c2ljYWwgZGV2aWNlIGluIGEgd2F5IHRoYXTigJlzIGluY29tcGF0aWJsZSB3aXRoIG91ciBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGlzIHdpbGwgY29uZmlybSBpZiBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgT2N0ZW9uVFgyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjQxLjQ1Mjk5NTU0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk2OTgwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjQxLjQ5Nzk3MDIyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjAwODczMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE9jdGVvbiBUWDIgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBjYWxsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBPY3Rlb24gVFgyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciByZWdpc3RyYXRpb24gaXMgaGFuZGxlZCBvbiB0aGlzIHBsYXRmb3JtLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBudWFuY2VzIG9yIHF1aXJrcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIGludGVycnVwdCBoYW5kbGluZy4gQXJlIHRoZXJlIGFueSBjdXN0b20gaG9va3Mgb3Igb3ZlcnJpZGVzIGluIHBsYWNlIGNvbXBhcmVkIHRvIGEgbW9yZSBnZW5lcmljIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5J3JlIG1hbmFnaW5nIGRldmljZSBJRCBtYXRjaGluZyBhbmQgcHJvYmUgcm91dGluZXMgd2l0aGluIHRoZSBPY3Rlb24gZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgY2hpcCdzIGludGVybmFsIHJlZ2lzdGVycyB0byBzZWUgaG93IHRoYXQncyBoYW5kbGVkLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgaW50byB0aGUgT2N0ZW9uIFRYMidzIHN5c3RlbS1vbi1jaGlwIGZyYW1ld29yay4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgb3IgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoYXQgbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwOTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDo0My43NTgwNjAwNTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9Mzc2NT1zdGF0aWMgaW50IF9faW5pdCBydnVfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3MTpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZjZ3hfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcyLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNzc1OlxcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnB0cF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Nzk6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2bWNzX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4MC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc4MzpcXHRlcnIgPSAgcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2cnZ1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4NC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzU4MT1zdGF0aWMgaW50IF9faW5pdCBvdHgyX3J2dXBmX2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1ODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTg1OlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZvdHgyX3BmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9ODY5PXN0YXRpYyBpbnQgX19pbml0IG90eDJ2Zl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy04NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzo4NzM6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNm90eDJ2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODc0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz04ODE9c3RhdGljIGludCBfX2luaXQgcnZ1X3JlcF9pbml0X21vZHVsZSh2b2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy04ODIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYzo4ODM6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnJ2dV9yZXBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODg0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6NDMuODA0MDY1NTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDA3MjEzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipQQ0kgSUQgVmVyaWZpY2F0aW9uIGZvciBPY3Rlb24gVFgyIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcyBkcml2ZXIgd29yayBmb3IgdGhlIE9jdGVvbiBUWDIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IGRpdmluZyBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBmdW5kYW1lbnRhbCDigJMgdGhlIFBDSSBJRHMuIEkgaGF2ZSB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIHRhcmdldGluZyB0aGUgY29ycmVjdCBkZXZpY2VzLiBBIG1pc2lkZW50aWZpY2F0aW9uIGhlcmUsIGV2ZW4gYXQgdGhpcyBlYXJseSBzdGFnZSwgY291bGQgbGVhZCB0byBhIG1hc3NpdmUgaGVhZGFjaGUgZG93biB0aGUgbGluZSwgcG90ZW50aWFsbHkgY2F1c2luZyBtYWpvciBzeXN0ZW0gaW5zdGFiaWxpdHkgb3IsIGV2ZW4gd29yc2UsIGJyaWNraW5nIHNvbWUgaGFyZHdhcmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBQQ0kgaWRlbnRpZmllcnMgYXJlIGNvcnJlY3Qgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkcml2ZXJzLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBtZXRpY3Vsb3VzbHkgdG8gY29uZmlybSB0aGF0IHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyB0aGUgcmlnaHQgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcyBmb3IgdGhlIE9jdGVvbiBUWDIuIEl04oCZcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYmV0dGVyIHRvIGJlIHBhcmFub2lkIG5vdyBhbmQgcHJldmVudCBwb3RlbnRpYWwgZGlzYXN0cm91cyBvdXRjb21lIHRoYW4gdG8gcmVncmV0IGxhdGVyLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgbWV0aWN1bG91c2x5LCBubyByb29tIGZvciBlcnJvci4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjQ2LjUwNDc4OTcyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNTU5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RldmljZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Mz1zdGF0aWMgaW50IGNneF9md2lfbGlua19jaGFuZ2Uoc3RydWN0IGNneCAqY2d4LCBpbnQgbG1hY19pZCwgYm9vbCBlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02NS0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02Ny1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM9MTkxNj1zdGF0aWMgc3RydWN0IG1hY19vcHNcXHRjZ3hfbWFjX29wcyAgICA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTE5NTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6MTk1MTpzdGF0aWMgaW50IGNneF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTE5NTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmM6MjA6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1jc19pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21jcy5jLTIxLVxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX01DUykgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21jcy5jPTE0OTc9c3RhdGljIHN0cnVjdCBtY3Nfb3BzIGNuMTBrYl9tY3Nfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTUwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYzoxNTA3OnN0YXRpYyBpbnQgbWNzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTUwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz03Nz1zdGF0aWMgc3RydWN0IHB0cCAqZmlyc3RfcHRwX2Jsb2NrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy03OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jPTUxNz1zdGF0aWMgaW50IHB0cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1MTg6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTUxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01NzE9c3RhdGljIHZvaWQgcHRwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5MC1cXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQxPXN0YXRpYyBpcnFyZXR1cm5fdCBydnVfbWJveF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcnZ1X2lycSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy00My0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy00NS1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzU0NT1zdGF0aWMgYXRvbWljX3QgZGV2aWNlX2JvdW5kID0gQVRPTUlDX0lOSVQoMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzU0Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNTQ3OnN0YXRpYyBpbnQgcnZ1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzU0OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1LS8qIFN1cHBvcnRlZCBkZXZpY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzctXFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzE1Mj1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTMxNTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozMTU0OnN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzE1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjI6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTIzLVxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9NTUxPXN0YXRpYyBpbnQgb3R4MnZmX3JlYWxsb2NfbXNpeF92ZWN0b3JzKHN0cnVjdCBvdHgyX25pYyAqdmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTU3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjU3MTpzdGF0aWMgaW50IG90eDJ2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtNTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6MjI6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9yZXBfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtMjMtXFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfUlZVX1JFUCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz03NDU9c3RhdGljIGludCBydnVfZ2V0X3JlcF9jbnQoc3RydWN0IG90eDJfbmljICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTc3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6NzgwOnN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy03ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDo0Ni41NDk4NTA3NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk1MzUyNzM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCBJIHRoaW5rIHdlIGhhdmUgYSBkZWZpbml0aXZlIGFuc3dlci4gVGhlc2UgY2hhbmdlcyBhcmUgYWxsIGRlZXBseSB0aWVkIHRvIHRoZSBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBjb21wb25lbnQsIHJlcHJlc2VudGVkIGJ5IGRyaXZlcnMgbGlrZSBgcnZ1LmNgLCBgcnZ1X3JlcC5jYCwgYW5kIG90aGVycyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9gIGRpcmVjdG9yeS4gVGhlc2UgYXJlICphbGwqIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIChDYXZpdW0vTWFydmVsbCkgZm9yIE9jdGVvblRYMiBQQ0kgZGV2aWNlcyDigJMgd2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgUENJX1ZFTkRPUl9JRF9DQVZJVU1gLCBhbmQgZGlzdGluY3QgZGV2aWNlIElEcyBzdWNoIGFzIGBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRmAuXG5cblRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCAqc3RhbmRhcmQqIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cyBzaW1wbHkgZG8gbm90IGVtdWxhdGUgdGhpcyBPY3Rlb25UWDIgaGFyZHdhcmUuIE15IGtub3dsZWRnZSBvZiB0aGVzZSBzZXR1cHMgdGVsbHMgbWUgdGhlcmUncyBubyB3YXkgdG8gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcyB2aXJ0dWFsbHkuIFRoZSBkcml2ZXJzIGFyZSBkZXNpZ25lZCB0byBwcm9iZSwgaW50ZXJhY3Qgd2l0aCwgYW5kIG1hbmFnZSBwaHlzaWNhbCBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgU29DIG9yIFNtYXJ0TklDIGhhcmR3YXJlLiBJIGV2ZW4gY2hlY2tlZCB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBzZWN0aW9uIG9mIHRoZSB0cmlhZ2UgY3JpdGVyaWEuIEl0IHNlZW1zIGxpa2UgYSBwZXJmZWN0IG1hdGNoLlxuXG5CYXNlZCBvbiB0aGUgdHJpYWdlIGNyaXRlcmlhLCBpdCBsb29rcyBsaWtlIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZSBiZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHN0cmljdGx5IGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTogKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi5cblxuU28sIEknbSBnb2luZyB0byBzZXQgbXkgcmVzdWx0cyBhcyBmb2xsb3dzOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gKSwgc3BlY2lmaWNhbGx5IHJlcHJlc2VudG9yIG1haWxib3ggaGFuZGxpbmcsIE1DQU0gcnVsZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24gbG9naWMuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQyBBU0lDIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlxuKiAgIGBFbmFibGVDb25maWdzYDogW11cbiogICBgRm9jdXNTeW1ib2xzYDogW11cblxuQW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3OCwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6NTIuNTAzMzgwMjA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBldGhlcm5ldCBkcml2ZXIgYW5kIHJlcHJlc2VudG9yIGhhbmRsaW5nIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLy4gVGhpcyBjb2RlIHJlcXVpcmVzIHByb3ByaWV0YXJ5IENhdml1bS9NYXJ2ZWxsIE9jdGVvblRYMiBoYXJkd2FyZS9TbWFydE5JQyBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjUyLjUwMzQwNjQ0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowh6kz2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 09:19:20 +0000 UTC FinishedAt: 2026-09-04 10:04:54 +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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDNkOWJjMGNkYmQxYjM3NjAxMGQ1ZmY5NGE1YzkyZmE4NjIwNjBlZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MDQ6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG5pbmRleCA3M2Y3NDNlNGE4M2Q3Li5mODM0MmE3MWFhYzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmhcbkBAIC0xNzc1LDEwICYjNDM7MTc3NSwxMiBAQCBzdHJ1Y3QgcHRwX2dldF9jYXBfcnNwIHtcbiBcdHU2NCBjYXA7XG4gfTtcbiBcbiYjNDM7I2RlZmluZSBSVlVfTUFYX1JFUFx0NjRcbiYjNDM7XG4gc3RydWN0IGdldF9yZXBfY250X3JzcCB7XG4gXHRzdHJ1Y3QgbWJveF9tc2doZHIgaGRyO1xuIFx0dTE2IHJlcF9jbnQ7XG4tXHR1MTYgcmVwX3BmX21hcFs2NF07XG4mIzQzO1x0dTE2IHJlcF9wZl9tYXBbUlZVX01BWF9SRVBdO1xuIFx0dTY0IHJzdmQ7XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jXG5pbmRleCBmZmJhNTZlZThhNjBjLi4zOTJkMDI5NjNmMDcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jXG5AQCAtMzcwOSw2ICYjNDM7MzcwOSwyMCBAQCBzdGF0aWMgdm9pZCBydnVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cnZ1X3VucmVnaXN0ZXJfZGwocnZ1KTtcbiBcdHJ2dV91bnJlZ2lzdGVyX2ludGVycnVwdHMocnZ1KTtcbiBcdHJ2dV9mbHJfd3FfZGVzdHJveShydnUpO1xuJiM0MztcdGlmIChydnUtXHUwMDNlcmVwX2V2dF93cSkge1xuJiM0MztcdFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlcF93cSA9IHJ2dS1cdTAwM2VyZXBfZXZ0X3dxO1xuJiM0MztcbiYjNDM7XHRcdC8qIE5VTEwgdGhlIHBvaW50ZXIgYmVmb3JlIGZsdXNoaW5nIG1ib3hfd3EuICBBbnkgbWJveCBoYW5kbGVyXG4mIzQzO1x0XHQgKiBzdGlsbCBpbiBmbGlnaHQgd2lsbCBzbmFwc2hvdCBOVUxMIHZpYSBSRUFEX09OQ0UoKSBhbmQgcmV0dXJuXG4mIzQzO1x0XHQgKiAtRUlOVkFMIHdpdGhvdXQgY2FsbGluZyBxdWV1ZV93b3JrKCksIHNvIG5vIG5ldyBpdGVtcyBjYW4gYmVcbiYjNDM7XHRcdCAqIGFkZGVkIHRvIHJlcF93cSBhZnRlciBmbHVzaF93b3JrcXVldWUobWJveF93cSkgcmV0dXJucy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShydnUtXHUwMDNlcmVwX2V2dF93cSwgTlVMTCk7XG4mIzQzO1x0XHRmbHVzaF93b3JrcXVldWUocnZ1LVx1MDAzZWFmcGZfd3FfaW5mby5tYm94X3dxKTtcbiYjNDM7XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKHJlcF93cSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGZsdXNoX3dvcmtxdWV1ZShydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfd3EpO1xuJiM0MztcdH1cbiBcdHJ2dV9jZ3hfZXhpdChydnUpO1xuIFx0cnZ1X2Z3ZGF0YV9leGl0KHJ2dSk7XG4gXHRydnVfbWNzX2V4aXQocnZ1KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmNcbmluZGV4IGEyNzgxZTBmNTA0ZTMuLjY5YjI2MGZkZDUyZDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xuQEAgLTQ0LDYgJiM0Mzs0NCw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudClcbiBcdGlmIChldmVudC1cdTAwM2VldmVudCBcdTAwMjYgUlZVX0VWRU5UX01BQ19BRERSX0NIQU5HRSlcbiBcdFx0ZXRoZXJfYWRkcl9jb3B5KHBmdmYtXHUwMDNlbWFjX2FkZHIsIGV2ZW50LVx1MDAzZWV2dF9kYXRhLm1hYyk7XG4gXG4mIzQzO1x0aWYgKGV2ZW50LVx1MDAzZWV2ZW50IFx1MDAyNiBSVlVfRVZFTlRfUEZWRl9TVEFURSlcbiYjNDM7XHRcdHBmID0gcnZ1X2dldF9wZihydnUtXHUwMDNlcGRldiwgZXZlbnQtXHUwMDNlaGRyLnBjaWZ1bmMpO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbiBcdG1zZyA9IG90eDJfbWJveF9hbGxvY19tc2dfcmVwX2V2ZW50X3VwX25vdGlmeShydnUsIHBmKTtcbiBcdGlmICghbXNnKSB7XG5AQCAtNTMsNiAmIzQzOzU1LDEwIEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudClcbiBcbiBcdG1zZy1cdTAwM2VoZHIucGNpZnVuYyA9IGV2ZW50LVx1MDAzZXBjaWZ1bmM7XG4gXHRtc2ctXHUwMDNlZXZlbnQgPSBldmVudC1cdTAwM2VldmVudDtcbiYjNDM7XHRtc2ctXHUwMDNlcGNpZnVuYyA9IGV2ZW50LVx1MDAzZXBjaWZ1bmM7XG4mIzQzO1xuJiM0MztcdGlmIChldmVudC1cdTAwM2VldmVudCBcdTAwMjYgUlZVX0VWRU5UX1BGVkZfU1RBVEUpXG4mIzQzO1x0XHRtc2ctXHUwMDNlaGRyLnBjaWZ1bmMgPSBldmVudC1cdTAwM2VoZHIucGNpZnVuYztcbiBcbiBcdG1lbWNweShcdTAwMjZtc2ctXHUwMDNlZXZ0X2RhdGEsIFx1MDAyNmV2ZW50LVx1MDAzZWV2dF9kYXRhLCBzaXplb2Yoc3RydWN0IHJlcF9ldnRfZGF0YSkpO1xuIFxuQEAgLTk1LDggJiM0MzsxMDEsMTcgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF93cV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBpbnQgcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqcmVxLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IG1zZ19yc3AgKnJzcClcbiB7XG4mIzQzO1x0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xuIFx0c3RydWN0IHJlcF9ldnRxX2VudCAqcWVudHJ5O1xuIFxuJiM0MztcdHdxID0gUkVBRF9PTkNFKHJ2dS1cdTAwM2VyZXBfZXZ0X3dxKTtcbiYjNDM7XHRpZiAoIXdxKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIE9ubHkgdGhlIHJlZ2lzdGVyZWQgcmVwcmVzZW50b3IgUEYgbWF5IHNlbmQgUkVQX0VWRU5UX05PVElGWS4gKi9cbiYjNDM7XHRpZiAocmVxLVx1MDAzZWhkci5wY2lmdW5jICE9IHJ2dS1cdTAwM2VyZXBfcGNpZnVuYylcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuIFx0LyogVGhlIG1haWxib3ggZGlzcGF0Y2hlciBub3JtYWxpc2VzIG9ubHkgdGhlIGhlYWRlciBwY2lmdW5jOyB0aGVcbiBcdCAqIG5lc3RlZCBzdHJ1Y3QgcmVwX2V2ZW50OjpwY2lmdW5jIGJvZHkgZmllbGQgaXMgc2VuZGVyLWNvbnRyb2xsZWRcbiBcdCAqIGFuZCBpcyBsYXRlciB1c2VkIGJ5IHJ2dV9yZXBfdXBfbm90aWZ5KCkgdG8gaW5kZXggcnZ1LVx1MDAzZXBmW10gL1xuQEAgLTEwNSw2ICYjNDM7MTIwLDE0IEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXG4gXHRpZiAoIWlzX3BmX2Z1bmNfdmFsaWQocnZ1LCByZXEtXHUwMDNlcGNpZnVuYykpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdC8qIE9ubHkgQ0dYLW1hcHBlZCBQRnMgYXJlIHByZXNlbnQgaW4gdGhlIHJlcHJlc2VudG9yIG1hcC4gKi9cbiYjNDM7XHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHJlcS1cdTAwM2VwY2lmdW5jKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKChyZXEtXHUwMDNlZXZlbnQgXHUwMDI2IFJWVV9FVkVOVF9QRlZGX1NUQVRFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcnZ1X2dldF9wZihydnUtXHUwMDNlcGRldiwgcmVxLVx1MDAzZWhkci5wY2lmdW5jKSBcdTAwM2U9IHJ2dS1cdTAwM2Vody1cdTAwM2V0b3RhbF9wZnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRxZW50cnkgPSBrbWFsbG9jX29iaigqcWVudHJ5LCBHRlBfQVRPTUlDKTtcbiBcdGlmICghcWVudHJ5KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0xMTMsMzcgJiM0MzsxMzYsMjMgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKnJlcSxcbiBcdHNwaW5fbG9jayhcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfbG9jayk7XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnFlbnRyeS1cdTAwM2Vub2RlLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfaGVhZCk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfbG9jayk7XG4tXHRxdWV1ZV93b3JrKHJ2dS1cdTAwM2VyZXBfZXZ0X3dxLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dF93b3JrKTtcbiYjNDM7XHRxdWV1ZV93b3JrKHdxLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dF93b3JrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgcnZ1X3JlcF9ub3RpZnlfcGZ2Zl9zdGF0ZShzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcbiB7XG4tXHRzdHJ1Y3QgcmVwX2V2ZW50ICpyZXE7XG4tXHRpbnQgcGY7XG4mIzQzO1x0c3RydWN0IHJlcF9ldmVudCByZXEgPSB7IDAgfTtcbiYjNDM7XHRzdHJ1Y3QgbXNnX3JzcCByc3A7XG4gXG4gXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHBjaWZ1bmMpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRwZiA9IHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHJ2dS1cdTAwM2VyZXBfcGNpZnVuYyk7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuLVx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpO1xuLVx0aWYgKCFyZXEpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbi1cbi1cdHJlcS1cdTAwM2VoZHIucGNpZnVuYyA9IHJ2dS1cdTAwM2VyZXBfcGNpZnVuYztcbi1cdHJlcS1cdTAwM2VldmVudCB8PSBSVlVfRVZFTlRfUEZWRl9TVEFURTtcbi1cdHJlcS1cdTAwM2VwY2lmdW5jID0gcGNpZnVuYztcbi1cdHJlcS1cdTAwM2VldnRfZGF0YS52Zl9zdGF0ZSA9IGVuYWJsZTtcbi1cbi1cdG90eDJfbWJveF93YWl0X2Zvcl96ZXJvKFx1MDAyNnJ2dS1cdTAwM2VhZnBmX3dxX2luZm8ubWJveF91cCwgcGYpO1xuLVx0b3R4Ml9tYm94X21zZ19zZW5kX3VwKFx1MDAyNnJ2dS1cdTAwM2VhZnBmX3dxX2luZm8ubWJveF91cCwgcGYpO1xuLVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmVxLmhkci5wY2lmdW5jID0gcnZ1LVx1MDAzZXJlcF9wY2lmdW5jO1xuJiM0MztcdHJlcS5ldmVudCA9IFJWVV9FVkVOVF9QRlZGX1NUQVRFO1xuJiM0MztcdHJlcS5wY2lmdW5jID0gcGNpZnVuYztcbiYjNDM7XHRyZXEuZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XG4mIzQzO1x0cmV0dXJuIHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShydnUsIFx1MDAyNnJlcSwgXHUwMDI2cnNwKTtcbiB9XG4gXG4gI2RlZmluZSBSVlVfTEZfUlhfU1RBVFMocmVnKSBcXFxuQEAgLTMyNSw2ICYjNDM7MzM0LDcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcbiBcdHUxNiBzdGFydCA9IHJzd2l0Y2gtXHUwMDNlc3RhcnRfZW50cnk7XG4gXHRzdHJ1Y3QgcnZ1X2h3aW5mbyAqaHcgPSBydnUtXHUwMDNlaHc7XG4gXHR1MTYgcGNpZnVuYywgZW50cnkgPSAwO1xuJiM0MztcdHN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZjtcbiBcdGludCBwZiwgdmYsIG51bXZmcztcbiBcdGludCBlcnIsIG5peGxmLCBpO1xuIFx0dTggcmVwO1xuQEAgLTMzNCwxOSAmIzQzOzM0NCwyMiBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIDApO1xuJiM0MztcdFx0cGZ2ZiA9IHJ2dV9nZXRfcGZ2ZihydnUsIHBjaWZ1bmMpO1xuIFx0XHRydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7XG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsIFx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIHRydWUpO1xuIFx0XHRyZXAgPSB0cnVlO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAyOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGVyciA9IHJ2dV9yZXBfaW5zdGFsbF9yeF9ydWxlKHJ2dSwgcGNpZnVuYyxcbiBcdFx0XHRcdFx0XHQgICAgICBzdGFydCAmIzQzOyBlbnRyeSwgcmVwKTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9kaXNhYmxlX2xiaztcbiBcdFx0XHRyc3dpdGNoLVx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7XG4gXG4gXHRcdFx0ZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLFxuIFx0XHRcdFx0XHRcdCAgICAgIHN0YXJ0ICYjNDM7IGVudHJ5LCByZXApO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbGJrO1xuIFx0XHRcdHJzd2l0Y2gtXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSYjNDM7JiM0MztdID0gcGNpZnVuYztcbiBcdFx0XHRyZXAgPSBmYWxzZTtcbiBcdFx0fVxuQEAgLTM1NCw5ICYjNDM7MzY3LDEyIEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4gXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzOyB2ZiYjNDM7JiM0MzspIHtcbiBcdFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIHZmICYjNDM7IDEpO1xuJiM0MztcdFx0XHRwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XG4mIzQzO1x0XHRcdGlmICh0ZXN0X2JpdChOSVhMRl9JTklUSUFMSVpFRCwgXHUwMDI2cGZ2Zi1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTtcbiBcdFx0XHRydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7XG4gXG4tXHRcdFx0LyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqL1xuJiM0MztcdFx0XHQvKiBTa2lwIGluc3RhbGxpbmcgcnVsZXMgaWYgbml4bGYgaXMgbm90IGF0dGFjaGVkICovXG4gXHRcdFx0ZXJyID0gbml4X2dldF9uaXhsZihydnUsIHBjaWZ1bmMsIFx1MDAyNm5peGxmLCBOVUxMKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMzY2LDMwICYjNDM7MzgyLDM3IEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdGFydCAmIzQzOyBlbnRyeSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHJlcCk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfZGlzYWJsZV9sYms7XG4gXHRcdFx0XHRyc3dpdGNoLVx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7XG4gXG4gXHRcdFx0XHRlcnIgPSBydnVfcmVwX2luc3RhbGxfdHhfcnVsZShydnUsIHBjaWZ1bmMsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdGFydCAmIzQzOyBlbnRyeSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHJlcCk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfZGlzYWJsZV9sYms7XG4gXHRcdFx0XHRyc3dpdGNoLVx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7XG4gXHRcdFx0XHRyZXAgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiBcbi1cdC8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfaGVhZCk7XG4tXHRJTklUX1dPUksoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTtcbi1cdHJ2dS1cdTAwM2VyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwmIzM0O3JlcF9ldnRfd3FcJiMzNDssIFdRX1BFUkNQVSwgMCk7XG4tXHRpZiAoIXJ2dS1cdTAwM2VyZXBfZXZ0X3dxKSB7XG4tXHRcdGRldl9lcnIocnZ1LVx1MDAzZWRldiwgXCYjMzQ7UkVQIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZFxcblwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztlcnJfZGlzYWJsZV9sYms6XG4mIzQzO1x0LyogVW5kbyBhbnkgTEJLIGxpbmtzIGVuYWJsZWQgYWJvdmUgYmVmb3JlIHRoZSBNQ0FNIHJ1bGUgZmFpbHVyZS5cbiYjNDM7XHQgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAocGYgPSAxOyBwZiBcdTAwM2MgaHctXHUwMDNldG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4mIzQzO1x0XHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4mIzQzO1x0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmczsgdmYmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgdmYgJiM0MzsgMSk7XG4mIzQzO1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuJiM0MztcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBydnVfcmVwX3VwZGF0ZV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYSlcbkBAIC00NDMsMzUgJiM0Mzs0NjYsOTIgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfZXN3X2NmZyhzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBlc3dfY2ZnX3JlcSAqcmVxLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ2dV9yZXBfZ2V0X3JlcF9tYXAoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGdldF9yZXBfY250X3JzcCAqcnNwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcS1cdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpXG4mIzQzO1x0XHRyZXR1cm4gLUVQRVJNO1xuJiM0MztcbiYjNDM7XHRyc3AtXHUwMDNlcmVwX2NudCA9IHJ2dS1cdTAwM2VyZXBfY250O1xuJiM0MztcdGZvciAocmVwID0gMDsgcmVwIFx1MDAzYyBydnUtXHUwMDNlcmVwX2NudDsgcmVwJiM0MzsmIzQzOylcbiYjNDM7XHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF07XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBydnVfbWJveF9oYW5kbGVyX2dldF9yZXBfY250KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IG1zZ19yZXEgKnJlcSxcbiBcdFx0XHRcdCBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApXG4ge1xuLVx0aW50IHBmLCB2ZiwgbnVtdmZzLCBod3ZmLCByZXAgPSAwO1xuJiM0MztcdGludCBwZiwgdmYsIG51bXZmcywgaHd2ZiwgcmVwID0gMCwgY250O1xuJiM0MztcdGludCByZXQgPSAwO1xuIFx0dTE2IHBjaWZ1bmM7XG4mIzQzO1x0dTE2ICptYXA7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uLiBtYm94X3dxIGlzIFdRX1BFUkNQVSBzb1xuJiM0MztcdCAqIGhhbmRsZXJzIGZvciBkaWZmZXJlbnQgUEZzIGNhbiBydW4gY29uY3VycmVudGx5OyB3aXRob3V0IHRoaXNcbiYjNDM7XHQgKiBsb2NrIHR3byBjYWxsZXJzIGNvdWxkIGJvdGggb2JzZXJ2ZSByZXAycGZ2Zl9tYXAgPT0gTlVMTCBhbmRcbiYjNDM7XHQgKiBkb3VibGUtYWxsb2NhdGUgdGhlIHdvcmtxdWV1ZSwgbGVha2luZyBvbmUgcGVybWFuZW50bHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXApIHtcbiYjNDM7XHRcdHJldCA9IHJ2dV9yZXBfZ2V0X3JlcF9tYXAocnZ1LCByZXEsIHJzcCk7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4gXG4gXHRydnUtXHUwMDNlcmVwX3BjaWZ1bmMgPSByZXEtXHUwMDNlaGRyLnBjaWZ1bmM7XG4tXHRyc3AtXHUwMDNlcmVwX2NudCA9IHJ2dS1cdTAwM2VjZ3hfbWFwcGVkX3BmcyAmIzQzOyBydnUtXHUwMDNlY2d4X21hcHBlZF92ZnM7XG4tXHRydnUtXHUwMDNlcmVwX2NudCA9IHJzcC1cdTAwM2VyZXBfY250O1xuJiM0MztcdGNudCA9IG1pbl90KGludCwgcnZ1LVx1MDAzZWNneF9tYXBwZWRfcGZzICYjNDM7IHJ2dS1cdTAwM2VjZ3hfbWFwcGVkX3ZmcyxcbiYjNDM7XHRcdCAgICBSVlVfTUFYX1JFUCk7XG4gXG4tXHRydnUtXHUwMDNlcmVwMnBmdmZfbWFwID0gZGV2bV9remFsbG9jKHJ2dS1cdTAwM2VkZXYsIHJ2dS1cdTAwM2VyZXBfY250ICpcbi1cdFx0XHRcdFx0IHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghcnZ1LVx1MDAzZXJlcDJwZnZmX21hcClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0LyogQWxsb2NhdGUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgc28gdGhlIHBvaW50ZXIgaXMgYWx3YXlzIG5vbi1OVUxMXG4mIzQzO1x0ICogb25jZSBwdWJsaXNoZWQsIGtlZXBpbmcgdGhlIGZhc3QtcGF0aCBjaGVjayBhYm92ZSByZWxpYWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtYXAgPSBkZXZtX2t6YWxsb2MocnZ1LVx1MDAzZWRldiwgKGNudCA/OiAxKSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW1hcCkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiBcbiBcdGZvciAocGYgPSAwOyBwZiBcdTAwM2MgcnZ1LVx1MDAzZWh3LVx1MDAzZXRvdGFsX3BmczsgcGYmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHJlcCBcdTAwM2U9IGNudClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4tXHRcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmM7XG4mIzQzO1x0XHRtYXBbcmVwXSA9IHBjaWZ1bmM7XG4gXHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBwY2lmdW5jO1xuIFx0XHRyZXAmIzQzOyYjNDM7O1xuIFx0XHRydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCBcdTAwMjZudW12ZnMsIFx1MDAyNmh3dmYpO1xuLVx0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmczsgdmYmIzQzOyYjNDM7KSB7XG4tXHRcdFx0cnZ1LVx1MDAzZXJlcDJwZnZmX21hcFtyZXBdID0gcGNpZnVuYyB8XG4tXHRcdFx0XHQoKHZmICYjNDM7IDEpIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spO1xuLVx0XHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF07XG4mIzQzO1x0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmcyBcdTAwMjZcdTAwMjYgcmVwIFx1MDAzYyBjbnQ7IHZmJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRtYXBbcmVwXSA9IHBjaWZ1bmMgfCAoKHZmICYjNDM7IDEpIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spO1xuJiM0MztcdFx0XHRyc3AtXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gbWFwW3JlcF07XG4gXHRcdFx0cmVwJiM0MzsmIzQzOztcbiBcdFx0fVxuIFx0fVxuLVx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghY250KSB7XG4mIzQzO1x0XHRydnUtXHUwMDNlcmVwMnBmdmZfbWFwID0gbWFwO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIHRoZSB3cSBmb3IgaGFuZGxpbmcgUkVQIGV2ZW50cyAqL1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0cV9sb2NrKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZydnUtXHUwMDNlcmVwX2V2dHFfaGVhZCk7XG4mIzQzO1x0SU5JVF9XT1JLKFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0X3dvcmssIHJ2dV9yZXBfd3FfaGFuZGxlcik7XG4mIzQzO1x0cnZ1LVx1MDAzZXJlcF9ldnRfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7cmVwX2V2dF93cVwmIzM0OywgV1FfVU5CT1VORCwgMCk7XG4mIzQzO1x0aWYgKCFydnUtXHUwMDNlcmVwX2V2dF93cSkge1xuJiM0MztcdFx0ZGV2X2VycihydnUtXHUwMDNlZGV2LCBcJiMzNDtSRVAgd29ya3F1ZXVlIGFsbG9jYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGRldm1fa2ZyZWUocnZ1LVx1MDAzZWRldiwgbWFwKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJ2dS1cdTAwM2VyZXBfY250ID0gY250O1xuJiM0MztcdHJzcC1cdTAwM2VyZXBfY250ID0gY250O1xuJiM0MztcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXAgPSBtYXA7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cnZ1LVx1MDAzZXJzcmNfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG5pbmRleCA0OWNlMzg2ODVhN2U2Li44YzJjOTg0MDM1MDc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmNcbkBAIC0xMiwxMSAmIzQzOzEyLDE4IEBAIHZvaWQgcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYywgYm9vbCBlbmFibGUpXG4ge1xuIFx0c3RydWN0IHJ2dV9wZnZmICpwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XG4gXHRzdHJ1Y3Qgbml4X2h3ICpuaXhfaHc7XG4mIzQzO1x0aW50IGJsa2FkZHI7XG4gXG4tXHRuaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS1cdTAwM2VodywgcGZ2Zi1cdTAwM2VuaXhfYmxrYWRkcik7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbiYjNDM7XHRibGthZGRyID0gcGZ2Zi1cdTAwM2VuaXhfYmxrYWRkcjtcbiYjNDM7XHRuaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS1cdTAwM2VodywgYmxrYWRkcik7XG4gXHQvKiBFbmFibGUgTEJLIGxpbmtzIHdpdGggY2hhbm5lbCA2MyBmb3IgVFggTUNBTSBydWxlICovXG4tXHRydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBwZnZmLVx1MDAzZW5peF9ibGthZGRyLCBwY2lmdW5jLFxuJiM0MztcdGlmICghbml4X2h3KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0cnZ1X25peF90eF90bDJfY2ZnKHJ2dSwgYmxrYWRkciwgcGNpZnVuYyxcbiBcdFx0XHQgICBcdTAwMjZuaXhfaHctXHUwMDNldHhzY2hbTklYX1RYU0NIX0xWTF9UTDJdLCBlbmFibGUpO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2Vyc3JjX2xvY2spO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ2dV9zd2l0Y2hfaW5zdGFsbF9yeF9ydWxlKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsXG5AQCAtMjI5LDggJiM0MzsyMzYsMjAgQEAgdm9pZCBydnVfc3dpdGNoX2Rpc2FibGUoc3RydWN0IHJ2dSAqcnZ1KVxuIFx0aWYgKCFyc3dpdGNoLVx1MDAzZXVzZWRfZW50cmllcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKHJ2dS1cdTAwM2VyZXBfbW9kZSlcbiYjNDM7XHRpZiAocnZ1LVx1MDAzZXJlcF9tb2RlKSB7XG4mIzQzO1x0XHRmb3IgKHBmID0gMTsgcGYgXHUwMDNjIGh3LVx1MDAzZXRvdGFsX3BmczsgcGYmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIDApO1xuJiM0MztcdFx0XHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcbiYjNDM7XHRcdFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXHUwMDI2bnVtdmZzLCBOVUxMKTtcbiYjNDM7XHRcdFx0Zm9yICh2ZiA9IDA7IHZmIFx1MDAzYyBudW12ZnM7IHZmJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgdmYgJiM0MzsgMSk7XG4mIzQzO1x0XHRcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdFx0Z290byBmcmVlX2VudHM7XG4mIzQzO1x0fVxuIFxuIFx0Zm9yIChwZiA9IDE7IHBmIFx1MDAzYyBody1cdTAwM2V0b3RhbF9wZnM7IHBmJiM0MzsmIzQzOykge1xuIFx0XHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcbmluZGV4IDBmNWQ1NjQyZDNmN2EuLmVmNDdlN2UyMTkwMTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuQEAgLTMwMSw2ICYjNDM7MzAxLDEyIEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfc3RhdGVfZXZ0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwcml2LFxuIFx0aW50IHJlcF9pZDtcbiBcbiBcdHJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tXHUwMDNlcGNpZnVuYyk7XG4mIzQzO1x0aWYgKHJlcF9pZCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQocHJpdi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtSRVAgc3RhdGUgZXZlbnQgZm9yIHVua25vd24gcGNpZnVuYyAweCV4IChlcnIgJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgaW5mby1cdTAwM2VwY2lmdW5jLCByZXBfaWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcdHJlcCA9IHByaXYtXHUwMDNlcmVwc1tyZXBfaWRdO1xuIFx0aWYgKGluZm8tXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUpXG4gXHRcdHJlcC1cdTAwM2VmbGFncyB8PSBSVlVfUkVQX1ZGX0lOSVRJQUxJWkVEO1xuQEAgLTQ1OSw2ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBydnVfcmVwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTtcbiBcbiYjNDM7XHRpZiAocmVwLVx1MDAzZXBjaWZ1bmMgXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGV2dC5ldmVudCA9IFJWVV9FVkVOVF9QT1JUX1NUQVRFO1xuIFx0ZXZ0LmV2dF9kYXRhLnBvcnRfc3RhdGUgPSAxO1xuIFx0ZXZ0LnBjaWZ1bmMgPSByZXAtXHUwMDNlcGNpZnVuYztcbkBAIC00NzgsNiAmIzQzOzQ4Nyw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShkZXYpO1xuIFxuJiM0MztcdGlmIChyZXAtXHUwMDNlcGNpZnVuYyBcdTAwMjYgUlZVX1BGVkZfRlVOQ19NQVNLKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0ZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7XG4gXHRldnQucGNpZnVuYyA9IHJlcC1cdTAwM2VwY2lmdW5jO1xuIFx0cnZ1X3JlcF9ub3RpZnlfcGZ2Zihwcml2LCBSVlVfRVZFTlRfUE9SVF9TVEFURSwgXHUwMDI2ZXZ0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbmluZGV4IDViYzllMmM3ZDgwMGIuLmI5OGZlMTkxZTgzYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxuQEAgLTE2LDcgJiM0MzsxNiw2IEBAXG4gXG4gI2RlZmluZSBQQ0lfREVWSURfUlZVX1JFUFx0MHhBMEUwXG4gXG4tI2RlZmluZSBSVlVfTUFYX1JFUFx0T1RYMl9NQVhfQ1FfQ05UXG4gXG4gc3RydWN0IHJlcF9zdGF0cyB7XG4gXHR1NjQgcnhfYnl0ZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDNkOWJjMGNkYmQxYjM3NjAxMGQ1ZmY5NGE1YzkyZmE4NjIwNjBlZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTA6MDQ6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmgKaW5kZXggNzNmNzQzZTRhODNkNy4uZjgzNDJhNzFhYWM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaApAQCAtMTc3NSwxMCAmIzQzOzE3NzUsMTIgQEAgc3RydWN0IHB0cF9nZXRfY2FwX3JzcCB7CiAJdTY0IGNhcDsKIH07CiAKJiM0MzsjZGVmaW5lIFJWVV9NQVhfUkVQCTY0CiYjNDM7CiBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwIHsKIAlzdHJ1Y3QgbWJveF9tc2doZHIgaGRyOwogCXUxNiByZXBfY250OwotCXUxNiByZXBfcGZfbWFwWzY0XTsKJiM0MzsJdTE2IHJlcF9wZl9tYXBbUlZVX01BWF9SRVBdOwogCXU2NCByc3ZkOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYwppbmRleCBmZmJhNTZlZThhNjBjLi4zOTJkMDI5NjNmMDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYwpAQCAtMzcwOSw2ICYjNDM7MzcwOSwyMCBAQCBzdGF0aWMgdm9pZCBydnVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCXJ2dV91bnJlZ2lzdGVyX2RsKHJ2dSk7CiAJcnZ1X3VucmVnaXN0ZXJfaW50ZXJydXB0cyhydnUpOwogCXJ2dV9mbHJfd3FfZGVzdHJveShydnUpOwomIzQzOwlpZiAocnZ1LSZndDtyZXBfZXZ0X3dxKSB7CiYjNDM7CQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVwX3dxID0gcnZ1LSZndDtyZXBfZXZ0X3dxOwomIzQzOwomIzQzOwkJLyogTlVMTCB0aGUgcG9pbnRlciBiZWZvcmUgZmx1c2hpbmcgbWJveF93cS4gIEFueSBtYm94IGhhbmRsZXIKJiM0MzsJCSAqIHN0aWxsIGluIGZsaWdodCB3aWxsIHNuYXBzaG90IE5VTEwgdmlhIFJFQURfT05DRSgpIGFuZCByZXR1cm4KJiM0MzsJCSAqIC1FSU5WQUwgd2l0aG91dCBjYWxsaW5nIHF1ZXVlX3dvcmsoKSwgc28gbm8gbmV3IGl0ZW1zIGNhbiBiZQomIzQzOwkJICogYWRkZWQgdG8gcmVwX3dxIGFmdGVyIGZsdXNoX3dvcmtxdWV1ZShtYm94X3dxKSByZXR1cm5zLgomIzQzOwkJICovCiYjNDM7CQlXUklURV9PTkNFKHJ2dS0mZ3Q7cmVwX2V2dF93cSwgTlVMTCk7CiYjNDM7CQlmbHVzaF93b3JrcXVldWUocnZ1LSZndDthZnBmX3dxX2luZm8ubWJveF93cSk7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShyZXBfd3EpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZmx1c2hfd29ya3F1ZXVlKHJ2dS0mZ3Q7YWZwZl93cV9pbmZvLm1ib3hfd3EpOwomIzQzOwl9CiAJcnZ1X2NneF9leGl0KHJ2dSk7CiAJcnZ1X2Z3ZGF0YV9leGl0KHJ2dSk7CiAJcnZ1X21jc19leGl0KHJ2dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMKaW5kZXggYTI3ODFlMGY1MDRlMy4uNjliMjYwZmRkNTJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3JlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuYwpAQCAtNDQsNiAmIzQzOzQ0LDggQEAgc3RhdGljIGludCBydnVfcmVwX3VwX25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKmV2ZW50KQogCWlmIChldmVudC0mZ3Q7ZXZlbnQgJmFtcDsgUlZVX0VWRU5UX01BQ19BRERSX0NIQU5HRSkKIAkJZXRoZXJfYWRkcl9jb3B5KHBmdmYtJmd0O21hY19hZGRyLCBldmVudC0mZ3Q7ZXZ0X2RhdGEubWFjKTsKIAomIzQzOwlpZiAoZXZlbnQtJmd0O2V2ZW50ICZhbXA7IFJWVV9FVkVOVF9QRlZGX1NUQVRFKQomIzQzOwkJcGYgPSBydnVfZ2V0X3BmKHJ2dS0mZ3Q7cGRldiwgZXZlbnQtJmd0O2hkci5wY2lmdW5jKTsKIAltdXRleF9sb2NrKCZhbXA7cnZ1LSZndDttYm94X2xvY2spOwogCW1zZyA9IG90eDJfbWJveF9hbGxvY19tc2dfcmVwX2V2ZW50X3VwX25vdGlmeShydnUsIHBmKTsKIAlpZiAoIW1zZykgewpAQCAtNTMsNiAmIzQzOzU1LDEwIEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudCkKIAogCW1zZy0mZ3Q7aGRyLnBjaWZ1bmMgPSBldmVudC0mZ3Q7cGNpZnVuYzsKIAltc2ctJmd0O2V2ZW50ID0gZXZlbnQtJmd0O2V2ZW50OwomIzQzOwltc2ctJmd0O3BjaWZ1bmMgPSBldmVudC0mZ3Q7cGNpZnVuYzsKJiM0MzsKJiM0MzsJaWYgKGV2ZW50LSZndDtldmVudCAmYW1wOyBSVlVfRVZFTlRfUEZWRl9TVEFURSkKJiM0MzsJCW1zZy0mZ3Q7aGRyLnBjaWZ1bmMgPSBldmVudC0mZ3Q7aGRyLnBjaWZ1bmM7CiAKIAltZW1jcHkoJmFtcDttc2ctJmd0O2V2dF9kYXRhLCAmYW1wO2V2ZW50LSZndDtldnRfZGF0YSwgc2l6ZW9mKHN0cnVjdCByZXBfZXZ0X2RhdGEpKTsKIApAQCAtOTUsOCAmIzQzOzEwMSwxNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3dxX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogaW50IHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKnJlcSwKIAkJCQkgICAgICBzdHJ1Y3QgbXNnX3JzcCAqcnNwKQogewomIzQzOwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJc3RydWN0IHJlcF9ldnRxX2VudCAqcWVudHJ5OwogCiYjNDM7CXdxID0gUkVBRF9PTkNFKHJ2dS0mZ3Q7cmVwX2V2dF93cSk7CiYjNDM7CWlmICghd3EpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogT25seSB0aGUgcmVnaXN0ZXJlZCByZXByZXNlbnRvciBQRiBtYXkgc2VuZCBSRVBfRVZFTlRfTk9USUZZLiAqLwomIzQzOwlpZiAocmVxLSZndDtoZHIucGNpZnVuYyAhPSBydnUtJmd0O3JlcF9wY2lmdW5jKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKIAkvKiBUaGUgbWFpbGJveCBkaXNwYXRjaGVyIG5vcm1hbGlzZXMgb25seSB0aGUgaGVhZGVyIHBjaWZ1bmM7IHRoZQogCSAqIG5lc3RlZCBzdHJ1Y3QgcmVwX2V2ZW50OjpwY2lmdW5jIGJvZHkgZmllbGQgaXMgc2VuZGVyLWNvbnRyb2xsZWQKIAkgKiBhbmQgaXMgbGF0ZXIgdXNlZCBieSBydnVfcmVwX3VwX25vdGlmeSgpIHRvIGluZGV4IHJ2dS0mZ3Q7cGZbXSAvCkBAIC0xMDUsNiAmIzQzOzEyMCwxNCBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqcmVxLAogCWlmICghaXNfcGZfZnVuY192YWxpZChydnUsIHJlcS0mZ3Q7cGNpZnVuYykpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CS8qIE9ubHkgQ0dYLW1hcHBlZCBQRnMgYXJlIHByZXNlbnQgaW4gdGhlIHJlcHJlc2VudG9yIG1hcC4gKi8KJiM0MzsJaWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBydnVfZ2V0X3BmKHJ2dS0mZ3Q7cGRldiwgcmVxLSZndDtwY2lmdW5jKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKChyZXEtJmd0O2V2ZW50ICZhbXA7IFJWVV9FVkVOVF9QRlZGX1NUQVRFKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBydnVfZ2V0X3BmKHJ2dS0mZ3Q7cGRldiwgcmVxLSZndDtoZHIucGNpZnVuYykgJmd0Oz0gcnZ1LSZndDtody0mZ3Q7dG90YWxfcGZzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJcWVudHJ5ID0ga21hbGxvY19vYmooKnFlbnRyeSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFxZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTEzLDM3ICYjNDM7MTM2LDIzIEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsCiAJc3Bpbl9sb2NrKCZhbXA7cnZ1LSZndDtyZXBfZXZ0cV9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZhbXA7cWVudHJ5LSZndDtub2RlLCAmYW1wO3J2dS0mZ3Q7cmVwX2V2dHFfaGVhZCk7CiAJc3Bpbl91bmxvY2soJmFtcDtydnUtJmd0O3JlcF9ldnRxX2xvY2spOwotCXF1ZXVlX3dvcmsocnZ1LSZndDtyZXBfZXZ0X3dxLCAmYW1wO3J2dS0mZ3Q7cmVwX2V2dF93b3JrKTsKJiM0MzsJcXVldWVfd29yayh3cSwgJmFtcDtydnUtJmd0O3JlcF9ldnRfd29yayk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBydnVfcmVwX25vdGlmeV9wZnZmX3N0YXRlKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsIGJvb2wgZW5hYmxlKQogewotCXN0cnVjdCByZXBfZXZlbnQgKnJlcTsKLQlpbnQgcGY7CiYjNDM7CXN0cnVjdCByZXBfZXZlbnQgcmVxID0geyAwIH07CiYjNDM7CXN0cnVjdCBtc2dfcnNwIHJzcDsKIAogCWlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcnZ1X2dldF9wZihydnUtJmd0O3BkZXYsIHBjaWZ1bmMpKSkKIAkJcmV0dXJuIDA7CiAKLQlwZiA9IHJ2dV9nZXRfcGYocnZ1LSZndDtwZGV2LCBydnUtJmd0O3JlcF9wY2lmdW5jKTsKLQotCW11dGV4X2xvY2soJmFtcDtydnUtJmd0O21ib3hfbG9jayk7Ci0JcmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpOwotCWlmICghcmVxKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO3J2dS0mZ3Q7bWJveF9sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmVxLSZndDtoZHIucGNpZnVuYyA9IHJ2dS0mZ3Q7cmVwX3BjaWZ1bmM7Ci0JcmVxLSZndDtldmVudCB8PSBSVlVfRVZFTlRfUEZWRl9TVEFURTsKLQlyZXEtJmd0O3BjaWZ1bmMgPSBwY2lmdW5jOwotCXJlcS0mZ3Q7ZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7Ci0KLQlvdHgyX21ib3hfd2FpdF9mb3JfemVybygmYW1wO3J2dS0mZ3Q7YWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTsKLQlvdHgyX21ib3hfbXNnX3NlbmRfdXAoJmFtcDtydnUtJmd0O2FmcGZfd3FfaW5mby5tYm94X3VwLCBwZik7Ci0KLQltdXRleF91bmxvY2soJmFtcDtydnUtJmd0O21ib3hfbG9jayk7Ci0JcmV0dXJuIDA7CiYjNDM7CXJlcS5oZHIucGNpZnVuYyA9IHJ2dS0mZ3Q7cmVwX3BjaWZ1bmM7CiYjNDM7CXJlcS5ldmVudCA9IFJWVV9FVkVOVF9QRlZGX1NUQVRFOwomIzQzOwlyZXEucGNpZnVuYyA9IHBjaWZ1bmM7CiYjNDM7CXJlcS5ldnRfZGF0YS52Zl9zdGF0ZSA9IGVuYWJsZTsKJiM0MzsJcmV0dXJuIHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShydnUsICZhbXA7cmVxLCAmYW1wO3JzcCk7CiB9CiAKICNkZWZpbmUgUlZVX0xGX1JYX1NUQVRTKHJlZykgXApAQCAtMzI1LDYgJiM0MzszMzQsNyBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KQogCXUxNiBzdGFydCA9IHJzd2l0Y2gtJmd0O3N0YXJ0X2VudHJ5OwogCXN0cnVjdCBydnVfaHdpbmZvICpodyA9IHJ2dS0mZ3Q7aHc7CiAJdTE2IHBjaWZ1bmMsIGVudHJ5ID0gMDsKJiM0MzsJc3RydWN0IHJ2dV9wZnZmICpwZnZmOwogCWludCBwZiwgdmYsIG51bXZmczsKIAlpbnQgZXJyLCBuaXhsZiwgaTsKIAl1OCByZXA7CkBAIC0zMzQsMTkgJiM0MzszNDQsMjIgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSkKIAkJCWNvbnRpbnVlOwogCiAJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIDApOwomIzQzOwkJcGZ2ZiA9IHJ2dV9nZXRfcGZ2ZihydnUsIHBjaWZ1bmMpOwogCQlydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7CiYjNDM7CQlpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsICZhbXA7cGZ2Zi0mZ3Q7ZmxhZ3MpKQomIzQzOwkJCXJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgdHJ1ZSk7CiAJCXJlcCA9IHRydWU7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyAyOyBpJiM0MzsmIzQzOykgewogCQkJZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3J4X3J1bGUocnZ1LCBwY2lmdW5jLAogCQkJCQkJICAgICAgc3RhcnQgJiM0MzsgZW50cnksIHJlcCk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJCWdvdG8gZXJyX2Rpc2FibGVfbGJrOwogCQkJcnN3aXRjaC0mZ3Q7ZW50cnkycGNpZnVuY1tlbnRyeSYjNDM7JiM0MztdID0gcGNpZnVuYzsKIAogCQkJZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLAogCQkJCQkJICAgICAgc3RhcnQgJiM0MzsgZW50cnksIHJlcCk7CiAJCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJCWdvdG8gZXJyX2Rpc2FibGVfbGJrOwogCQkJcnN3aXRjaC0mZ3Q7ZW50cnkycGNpZnVuY1tlbnRyeSYjNDM7JiM0MztdID0gcGNpZnVuYzsKIAkJCXJlcCA9IGZhbHNlOwogCQl9CkBAIC0zNTQsOSAmIzQzOzM2NywxMiBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KQogCQlydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCAmYW1wO251bXZmcywgTlVMTCk7CiAJCWZvciAodmYgPSAwOyB2ZiAmbHQ7IG51bXZmczsgdmYmIzQzOyYjNDM7KSB7CiAJCQlwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtJmd0O3BkZXYsIHBmLCB2ZiAmIzQzOyAxKTsKJiM0MzsJCQlwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7CiYjNDM7CQkJaWYgKHRlc3RfYml0KE5JWExGX0lOSVRJQUxJWkVELCAmYW1wO3BmdmYtJmd0O2ZsYWdzKSkKJiM0MzsJCQkJcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTsKIAkJCXJ2dV9nZXRfbml4X2Jsa2FkZHIocnZ1LCBwY2lmdW5jKTsKIAotCQkJLyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqLwomIzQzOwkJCS8qIFNraXAgaW5zdGFsbGluZyBydWxlcyBpZiBuaXhsZiBpcyBub3QgYXR0YWNoZWQgKi8KIAkJCWVyciA9IG5peF9nZXRfbml4bGYocnZ1LCBwY2lmdW5jLCAmYW1wO25peGxmLCBOVUxMKTsKIAkJCWlmIChlcnIpCiAJCQkJY29udGludWU7CkBAIC0zNjYsMzAgJiM0MzszODIsMzcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSkKIAkJCQkJCQkgICAgICBzdGFydCAmIzQzOyBlbnRyeSwKIAkJCQkJCQkgICAgICByZXApOwogCQkJCWlmIChlcnIpCi0JCQkJCXJldHVybiBlcnI7CiYjNDM7CQkJCQlnb3RvIGVycl9kaXNhYmxlX2xiazsKIAkJCQlyc3dpdGNoLSZndDtlbnRyeTJwY2lmdW5jW2VudHJ5JiM0MzsmIzQzO10gPSBwY2lmdW5jOwogCiAJCQkJZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLAogCQkJCQkJCSAgICAgIHN0YXJ0ICYjNDM7IGVudHJ5LAogCQkJCQkJCSAgICAgIHJlcCk7CiAJCQkJaWYgKGVycikKLQkJCQkJcmV0dXJuIGVycjsKJiM0MzsJCQkJCWdvdG8gZXJyX2Rpc2FibGVfbGJrOwogCQkJCXJzd2l0Y2gtJmd0O2VudHJ5MnBjaWZ1bmNbZW50cnkmIzQzOyYjNDM7XSA9IHBjaWZ1bmM7CiAJCQkJcmVwID0gZmFsc2U7CiAJCQl9CiAJCX0KIAl9CiYjNDM7CXJldHVybiAwOwogCi0JLyogSW5pdGlhbGl6ZSB0aGUgd3EgZm9yIGhhbmRsaW5nIFJFUCBldmVudHMgKi8KLQlzcGluX2xvY2tfaW5pdCgmYW1wO3J2dS0mZ3Q7cmVwX2V2dHFfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtydnUtJmd0O3JlcF9ldnRxX2hlYWQpOwotCUlOSVRfV09SSygmYW1wO3J2dS0mZ3Q7cmVwX2V2dF93b3JrLCBydnVfcmVwX3dxX2hhbmRsZXIpOwotCXJ2dS0mZ3Q7cmVwX2V2dF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O3JlcF9ldnRfd3EmIzM0OywgV1FfUEVSQ1BVLCAwKTsKLQlpZiAoIXJ2dS0mZ3Q7cmVwX2V2dF93cSkgewotCQlkZXZfZXJyKHJ2dS0mZ3Q7ZGV2LCAmIzM0O1JFUCB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7ZXJyX2Rpc2FibGVfbGJrOgomIzQzOwkvKiBVbmRvIGFueSBMQksgbGlua3MgZW5hYmxlZCBhYm92ZSBiZWZvcmUgdGhlIE1DQU0gcnVsZSBmYWlsdXJlLgomIzQzOwkgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJZm9yIChwZiA9IDE7IHBmICZsdDsgaHctJmd0O3RvdGFsX3BmczsgcGYmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIDApOwomIzQzOwkJcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7CiYjNDM7CQlydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCAmYW1wO251bXZmcywgTlVMTCk7CiYjNDM7CQlmb3IgKHZmID0gMDsgdmYgJmx0OyBudW12ZnM7IHZmJiM0MzsmIzQzOykgewomIzQzOwkJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIHZmICYjNDM7IDEpOwomIzQzOwkJCXJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpOwomIzQzOwkJfQogCX0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBydnVfcmVwX3VwZGF0ZV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYSkKQEAgLTQ0MywzNSAmIzQzOzQ2Niw5MiBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9lc3dfY2ZnKHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IGVzd19jZmdfcmVxICpyZXEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ2dV9yZXBfZ2V0X3JlcF9tYXAoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApCiYjNDM7ewomIzQzOwlpbnQgcmVwOwomIzQzOwomIzQzOwlpZiAocmVxLSZndDtoZHIucGNpZnVuYyAhPSBydnUtJmd0O3JlcF9wY2lmdW5jKQomIzQzOwkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJcnNwLSZndDtyZXBfY250ID0gcnZ1LSZndDtyZXBfY250OwomIzQzOwlmb3IgKHJlcCA9IDA7IHJlcCAmbHQ7IHJ2dS0mZ3Q7cmVwX2NudDsgcmVwJiM0MzsmIzQzOykKJiM0MzsJCXJzcC0mZ3Q7cmVwX3BmX21hcFtyZXBdID0gcnZ1LSZndDtyZXAycGZ2Zl9tYXBbcmVwXTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogaW50IHJ2dV9tYm94X2hhbmRsZXJfZ2V0X3JlcF9jbnQoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLAogCQkJCSBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApCiB7Ci0JaW50IHBmLCB2ZiwgbnVtdmZzLCBod3ZmLCByZXAgPSAwOwomIzQzOwlpbnQgcGYsIHZmLCBudW12ZnMsIGh3dmYsIHJlcCA9IDAsIGNudDsKJiM0MzsJaW50IHJldCA9IDA7CiAJdTE2IHBjaWZ1bmM7CiYjNDM7CXUxNiAqbWFwOwomIzQzOwomIzQzOwkvKiBTZXJpYWxpemUgZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbi4gbWJveF93cSBpcyBXUV9QRVJDUFUgc28KJiM0MzsJICogaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBQRnMgY2FuIHJ1biBjb25jdXJyZW50bHk7IHdpdGhvdXQgdGhpcwomIzQzOwkgKiBsb2NrIHR3byBjYWxsZXJzIGNvdWxkIGJvdGggb2JzZXJ2ZSByZXAycGZ2Zl9tYXAgPT0gTlVMTCBhbmQKJiM0MzsJICogZG91YmxlLWFsbG9jYXRlIHRoZSB3b3JrcXVldWUsIGxlYWtpbmcgb25lIHBlcm1hbmVudGx5LgomIzQzOwkgKi8KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3J2dS0mZ3Q7cnNyY19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJ2dS0mZ3Q7cmVwMnBmdmZfbWFwKSB7CiYjNDM7CQlyZXQgPSBydnVfcmVwX2dldF9yZXBfbWFwKHJ2dSwgcmVxLCByc3ApOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KIAogCXJ2dS0mZ3Q7cmVwX3BjaWZ1bmMgPSByZXEtJmd0O2hkci5wY2lmdW5jOwotCXJzcC0mZ3Q7cmVwX2NudCA9IHJ2dS0mZ3Q7Y2d4X21hcHBlZF9wZnMgJiM0MzsgcnZ1LSZndDtjZ3hfbWFwcGVkX3ZmczsKLQlydnUtJmd0O3JlcF9jbnQgPSByc3AtJmd0O3JlcF9jbnQ7CiYjNDM7CWNudCA9IG1pbl90KGludCwgcnZ1LSZndDtjZ3hfbWFwcGVkX3BmcyAmIzQzOyBydnUtJmd0O2NneF9tYXBwZWRfdmZzLAomIzQzOwkJICAgIFJWVV9NQVhfUkVQKTsKIAotCXJ2dS0mZ3Q7cmVwMnBmdmZfbWFwID0gZGV2bV9remFsbG9jKHJ2dS0mZ3Q7ZGV2LCBydnUtJmd0O3JlcF9jbnQgKgotCQkJCQkgc2l6ZW9mKHUxNiksIEdGUF9LRVJORUwpOwotCWlmICghcnZ1LSZndDtyZXAycGZ2Zl9tYXApCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkvKiBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCBzbyB0aGUgcG9pbnRlciBpcyBhbHdheXMgbm9uLU5VTEwKJiM0MzsJICogb25jZSBwdWJsaXNoZWQsIGtlZXBpbmcgdGhlIGZhc3QtcGF0aCBjaGVjayBhYm92ZSByZWxpYWJsZS4KJiM0MzsJICovCiYjNDM7CW1hcCA9IGRldm1fa3phbGxvYyhydnUtJmd0O2RldiwgKGNudCA/OiAxKSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtYXApIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQogCiAJZm9yIChwZiA9IDA7IHBmICZsdDsgcnZ1LSZndDtody0mZ3Q7dG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHsKIAkJaWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChyZXAgJmd0Oz0gY250KQomIzQzOwkJCWJyZWFrOwogCQlwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtJmd0O3BkZXYsIHBmLCAwKTsKLQkJcnZ1LSZndDtyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmM7CiYjNDM7CQltYXBbcmVwXSA9IHBjaWZ1bmM7CiAJCXJzcC0mZ3Q7cmVwX3BmX21hcFtyZXBdID0gcGNpZnVuYzsKIAkJcmVwJiM0MzsmIzQzOzsKIAkJcnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgJmFtcDtudW12ZnMsICZhbXA7aHd2Zik7Ci0JCWZvciAodmYgPSAwOyB2ZiAmbHQ7IG51bXZmczsgdmYmIzQzOyYjNDM7KSB7Ci0JCQlydnUtJmd0O3JlcDJwZnZmX21hcFtyZXBdID0gcGNpZnVuYyB8Ci0JCQkJKCh2ZiAmIzQzOyAxKSAmYW1wOyBSVlVfUEZWRl9GVU5DX01BU0spOwotCQkJcnNwLSZndDtyZXBfcGZfbWFwW3JlcF0gPSBydnUtJmd0O3JlcDJwZnZmX21hcFtyZXBdOwomIzQzOwkJZm9yICh2ZiA9IDA7IHZmICZsdDsgbnVtdmZzICZhbXA7JmFtcDsgcmVwICZsdDsgY250OyB2ZiYjNDM7JiM0MzspIHsKJiM0MzsJCQltYXBbcmVwXSA9IHBjaWZ1bmMgfCAoKHZmICYjNDM7IDEpICZhbXA7IFJWVV9QRlZGX0ZVTkNfTUFTSyk7CiYjNDM7CQkJcnNwLSZndDtyZXBfcGZfbWFwW3JlcF0gPSBtYXBbcmVwXTsKIAkJCXJlcCYjNDM7JiM0Mzs7CiAJCX0KIAl9Ci0JcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghY250KSB7CiYjNDM7CQlydnUtJmd0O3JlcDJwZnZmX21hcCA9IG1hcDsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovCiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7cnZ1LSZndDtyZXBfZXZ0cV9sb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtydnUtJmd0O3JlcF9ldnRxX2hlYWQpOwomIzQzOwlJTklUX1dPUksoJmFtcDtydnUtJmd0O3JlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTsKJiM0MzsJcnZ1LSZndDtyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7cmVwX2V2dF93cSYjMzQ7LCBXUV9VTkJPVU5ELCAwKTsKJiM0MzsJaWYgKCFydnUtJmd0O3JlcF9ldnRfd3EpIHsKJiM0MzsJCWRldl9lcnIocnZ1LSZndDtkZXYsICYjMzQ7UkVQIHdvcmtxdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZFxuJiMzNDspOwomIzQzOwkJZGV2bV9rZnJlZShydnUtJmd0O2RldiwgbWFwKTsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlydnUtJmd0O3JlcF9jbnQgPSBjbnQ7CiYjNDM7CXJzcC0mZ3Q7cmVwX2NudCA9IGNudDsKJiM0MzsJcnZ1LSZndDtyZXAycGZ2Zl9tYXAgPSBtYXA7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtydnUtJmd0O3JzcmNfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmMKaW5kZXggNDljZTM4Njg1YTdlNi4uOGMyYzk4NDAzNTA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9zd2l0Y2guYwpAQCAtMTIsMTEgJiM0MzsxMiwxOCBAQCB2b2lkIHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZiA9IHJ2dV9nZXRfcGZ2ZihydnUsIHBjaWZ1bmMpOwogCXN0cnVjdCBuaXhfaHcgKm5peF9odzsKJiM0MzsJaW50IGJsa2FkZHI7CiAKLQluaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS0mZ3Q7aHcsIHBmdmYtJmd0O25peF9ibGthZGRyKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3J2dS0mZ3Q7cnNyY19sb2NrKTsKJiM0MzsJYmxrYWRkciA9IHBmdmYtJmd0O25peF9ibGthZGRyOwomIzQzOwluaXhfaHcgPSBnZXRfbml4X2h3KHJ2dS0mZ3Q7aHcsIGJsa2FkZHIpOwogCS8qIEVuYWJsZSBMQksgbGlua3Mgd2l0aCBjaGFubmVsIDYzIGZvciBUWCBNQ0FNIHJ1bGUgKi8KLQlydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBwZnZmLSZndDtuaXhfYmxrYWRkciwgcGNpZnVuYywKJiM0MzsJaWYgKCFuaXhfaHcpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJcnZ1X25peF90eF90bDJfY2ZnKHJ2dSwgYmxrYWRkciwgcGNpZnVuYywKIAkJCSAgICZhbXA7bml4X2h3LSZndDt0eHNjaFtOSVhfVFhTQ0hfTFZMX1RMMl0sIGVuYWJsZSk7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtydnUtJmd0O3JzcmNfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgcnZ1X3N3aXRjaF9pbnN0YWxsX3J4X3J1bGUoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYywKQEAgLTIyOSw4ICYjNDM7MjM2LDIwIEBAIHZvaWQgcnZ1X3N3aXRjaF9kaXNhYmxlKHN0cnVjdCBydnUgKnJ2dSkKIAlpZiAoIXJzd2l0Y2gtJmd0O3VzZWRfZW50cmllcykKIAkJcmV0dXJuOwogCi0JaWYgKHJ2dS0mZ3Q7cmVwX21vZGUpCiYjNDM7CWlmIChydnUtJmd0O3JlcF9tb2RlKSB7CiYjNDM7CQlmb3IgKHBmID0gMTsgcGYgJmx0OyBody0mZ3Q7dG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CQkJcGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LSZndDtwZGV2LCBwZiwgMCk7CiYjNDM7CQkJcnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7CiYjNDM7CQkJcnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgJmFtcDtudW12ZnMsIE5VTEwpOwomIzQzOwkJCWZvciAodmYgPSAwOyB2ZiAmbHQ7IG51bXZmczsgdmYmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCXBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS0mZ3Q7cGRldiwgcGYsIHZmICYjNDM7IDEpOwomIzQzOwkJCQlydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJCWdvdG8gZnJlZV9lbnRzOwomIzQzOwl9CiAKIAlmb3IgKHBmID0gMTsgcGYgJmx0OyBody0mZ3Q7dG90YWxfcGZzOyBwZiYjNDM7JiM0MzspIHsKIAkJaWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMKaW5kZXggMGY1ZDU2NDJkM2Y3YS4uZWY0N2U3ZTIxOTAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYwpAQCAtMzAxLDYgJiM0MzszMDEsMTIgQEAgc3RhdGljIHZvaWQgcnZ1X3JlcF9zdGF0ZV9ldnRfaGFuZGxlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYsCiAJaW50IHJlcF9pZDsKIAogCXJlcF9pZCA9IHJ2dV9yZXBfZ2V0X3JlcGlkKHByaXYsIGluZm8tJmd0O3BjaWZ1bmMpOwomIzQzOwlpZiAocmVwX2lkICZsdDsgMCkgewomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQocHJpdi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgICYjMzQ7UkVQIHN0YXRlIGV2ZW50IGZvciB1bmtub3duIHBjaWZ1bmMgMHgleCAoZXJyICVkKVxuJiMzNDssCiYjNDM7CQkJCSAgICAgaW5mby0mZ3Q7cGNpZnVuYywgcmVwX2lkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCXJlcCA9IHByaXYtJmd0O3JlcHNbcmVwX2lkXTsKIAlpZiAoaW5mby0mZ3Q7ZXZ0X2RhdGEudmZfc3RhdGUpCiAJCXJlcC0mZ3Q7ZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDsKQEAgLTQ1OSw2ICYjNDM7NDY1LDkgQEAgc3RhdGljIGludCBydnVfcmVwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCiYjNDM7CWlmIChyZXAtJmd0O3BjaWZ1bmMgJmFtcDsgUlZVX1BGVkZfRlVOQ19NQVNLKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7CiAJZXZ0LmV2dF9kYXRhLnBvcnRfc3RhdGUgPSAxOwogCWV2dC5wY2lmdW5jID0gcmVwLSZndDtwY2lmdW5jOwpAQCAtNDc4LDYgJiM0Mzs0ODcsOSBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwogCiYjNDM7CWlmIChyZXAtJmd0O3BjaWZ1bmMgJmFtcDsgUlZVX1BGVkZfRlVOQ19NQVNLKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7CiAJZXZ0LnBjaWZ1bmMgPSByZXAtJmd0O3BjaWZ1bmM7CiAJcnZ1X3JlcF9ub3RpZnlfcGZ2Zihwcml2LCBSVlVfRVZFTlRfUE9SVF9TVEFURSwgJmFtcDtldnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oCmluZGV4IDViYzllMmM3ZDgwMGIuLmI5OGZlMTkxZTgzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmgKQEAgLTE2LDcgJiM0MzsxNiw2IEBACiAKICNkZWZpbmUgUENJX0RFVklEX1JWVV9SRVAJMHhBMEUwCiAKLSNkZWZpbmUgUlZVX01BWF9SRVAJT1RYMl9NQVhfQ1FfQ05UCiAKIHN0cnVjdCByZXBfc3RhdHMgewogCXU2NCByeF9ieXRlczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgc2VlaW5nIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LgoKVGhlIG1vZGlmaWVkIGZpbGVzIGp1bXAgb3V0OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oYCwgYHJ2dS5jYCwgYHJ2dV9yZXAuY2AsIGBydnVfc3dpdGNoLmNgLCBgbmljL3JlcC5jYCwgYW5kIGBuaWMvcmVwLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgT2N0ZW9uVFgyIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIHRoZSBNYXJ2ZWxsIGVjb3N5c3RlbS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBlbnZpcm9ubWVudD8gSXMgdGhpcyBhIFNtYXJ0TklDIG9yIGp1c3Qgc3RhbmRhcmQgbmV0d29yayBmdW5jdGlvbmFsaXR5PwoKTm93LCB0byBhc3Nlc3MgaXRzIGZ1enppbmcgcG90ZW50aWFsLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dC4gSXMgdGhpcyBhIHBoeXNpY2FsIG5ldHdvcmsgY2FyZCwgc29tZXRoaW5nIHZlbmRvci1zcGVjaWZpYyBsaWtlIGEgUENJZSBTbWFydE5JQywgb3Igc29tZXRoaW5nIGVtdWxhdGVkPyBNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gc2VhcmNoLCBtYXliZSBgZ3JlcGAgdGhlIGNvZGViYXNlLCBvciBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkZXZpY2UgaXMgYWNjZXNzZWQgYW5kIGNvbmZpZ3VyZWQuIFVuZGVyc3RhbmRpbmcgdGhpcyB3aWxsIGRlZmluZSB0aGUgZWFzZSBvZiBzZXR0aW5nIHVwIGFuIGVudmlyb25tZW50IHRvIGZ1enogdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPQ1RFT05UWDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ2MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBPY3Rlb24gVFgyIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBNYXJ2ZWxsIE9jdGVvbiBUWDIgRXRoZXJuZXQgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBsaWVzLCBkZWZpbmluZyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgb2YgdGhpcyBkcml2ZXIgYW5kIHRhaWxvciBpdCB0byBhIHBhcnRpY3VsYXIgdXNlIGNhc2UuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgc3ltYm9scywgdGhlaXIgZGVmYXVsdHMsIGFuZCBhbnkgY29uc3RyYWludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG4gICA3Olx0XHR0cmlzdGF0ZVxuICAgODpcdFxuICAgOTpcdGNvbmZpZyBPQ1RFT05UWDJfQUZcbiAgMTA6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbiAgMTE6XHRcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuICAxMjpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDEzOlx0XHRkZXBlbmRzIG9uICg2NEJJVCBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKSB8fCBBUk02NFxuICAxNDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMTU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMTY6XHRcdGhlbHBcbiAgMTc6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBPY3Rlb25UWDIgUmVzb3VyY2UgVmlydHVhbGl6YXRpb25cbiAgMTg6XHRcdCAgVW5pdCYjMzk7cyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcbiAgMTk6XHRcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxuICAyMDpcdFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbiAgMjM6XHRcdGJvb2wgXCYjMzQ7RGlzYWJsZSBjYWNoaW5nIG9mIGR5bmFtaWMgZW50cmllcyBpbiBORENcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcbiAgMjg6XHRcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXG4gIDI5Olx0XHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE9DVEVPTlRYMl9QRlxuICAzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuICAzMzpcdFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG4gIDM0Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMzU6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMzY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcbiAgMzc6XHRcdGRlcGVuZHMgb24gKDY0QklUIFx1MDAyNlx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XG4gIDM4Olx0XHRzZWxlY3QgRElNTElCXG4gIDM5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICA0MTpcdFx0ZGVwZW5kcyBvbiBNQUNTRUMgfHwgIU1BQ1NFQ1xuICA0MjpcdFx0aGVscFxuICA0MzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgcGh5c2ljYWwgZnVuY3Rpb24uXG4gIDQ0Olx0XG4gIDQ1Olx0Y29uZmlnIE9DVEVPTlRYMl9WRlxuICA0NjpcdFx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG4gIDQ3Olx0XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuICA0ODpcdFx0aGVscFxuICA0OTpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJiMzOTtzIE9jdGVvblRYMiBOSUMgdmlydHVhbCBmdW5jdGlvbi5cbiAgNTA6XHRcbiAgNTE6XHRjb25maWcgUlZVX0VTV0lUQ0hcbiAgNTI6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbiAgNTM6XHRcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXG4gIDU0Olx0XHRkZWZhdWx0IG1cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCYjMzk7cyBSVlUgRS1Td2l0Y2ggdGhhdFxuICA1NzpcdFx0ICBwcm92aWRlcyBpbnRlcm5hbCBTUklPViBwYWNrZXQgc3RlZXJpbmcgYW5kIHN3aXRjaGluZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUxNwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRyaWFnZSBDcml0ZXJpYSBhbmQgT2N0ZW9uVFgyIENvbXBhdGliaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgZmFsbHMgdW5kZXIgb3VyIHN0YW5kYXJkIHRyaWFnZSBndWlkZWxpbmVzLCBzcGVjaWZpY2FsbHkgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBTZWN0aW9uIDIgaGlnaGxpZ2h0cyAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4mIzM0OyBXZSYjMzk7cmUgbG9va2luZyBhdCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0ICpyZXF1aXJlKiBzcGVjaWZpYyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgaXMgYSBjcnVjaWFsIHBvaW50LgoKTm93LCBsZXQmIzM5O3MgZm9jdXMgb24gdGhlIE9jdGVvblRYMi4gSXQmIzM5O3MgTWFydmVsbCYjMzk7cyBBUk02NCBTb0MsIGEgbmV0d29yayBwcm9jZXNzb3IsIGVzc2VudGlhbGx5IGEgU21hcnROSUMgd2l0aCBpdHMgUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCAoUlZVKSBBZG1pbiBGdW5jdGlvbiBhbmQgUGh5c2ljYWwgRnVuY3Rpb24uIEFscmlnaHQsIGltcG9ydGFudCBub3RlcyBoZXJlLiBUaGVyZSBhcmUgZGVwZW5kZW5jeSBjaGVja3M6IGl0IHJlbGllcyBvbiBib3RoIDY0LWJpdCBhcmNoaXRlY3R1cmUgd2l0aCBhIGNvbXBpbGUgdGVzdCwgKm9yKiBqdXN0IHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCAqYWxzbyogcmVxdWlyZXMgUENJIHN1cHBvcnQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KClRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIE9jdGVvblRYMiAqaXMqIGEgcGh5c2ljYWwgUENJIG9yIFNvQyBkZXZpY2UuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIHByb2JsZW0uIElmIGl0IGlzLCB0aGVuIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBjb3VsZCBjb21lIGludG8gcGxheS4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgcHJvYmluZyByb3V0aW5lcyDigJMgYHJ2dV9wcm9iZWAgYW5kIGBvdHgyX3Byb2JlYC4gVGhlc2Ugd2lsbCB0ZWxsIHVzIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgYW5kIHdoZXRoZXIgaXTigJlzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgcGh5c2ljYWwgZGV2aWNlIGluIGEgd2F5IHRoYXTigJlzIGluY29tcGF0aWJsZSB3aXRoIG91ciBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGlzIHdpbGwgY29uZmlybSBpZiBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgT2N0ZW9uVFgyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBPY3Rlb24gVFgyIERyaXZlciBSZWdpc3RyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYHBjaV9yZWdpc3Rlcl9kcml2ZXJgIGNhbGwsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIE9jdGVvbiBUWDIgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIHJlZ2lzdHJhdGlvbiBpcyBoYW5kbGVkIG9uIHRoaXMgcGxhdGZvcm0uIEkgd2FudCB0byBjaGVjayBmb3IgYW55IHBsYXRmb3JtLXNwZWNpZmljIG51YW5jZXMgb3IgcXVpcmtzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGRyaXZlciBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBob29rcyBvciBvdmVycmlkZXMgaW4gcGxhY2UgY29tcGFyZWQgdG8gYSBtb3JlIGdlbmVyaWMgUENJIGRyaXZlciByZWdpc3RyYXRpb24/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5JiMzOTtyZSBtYW5hZ2luZyBkZXZpY2UgSUQgbWF0Y2hpbmcgYW5kIHByb2JlIHJvdXRpbmVzIHdpdGhpbiB0aGUgT2N0ZW9uIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBjaGlwJiMzOTtzIGludGVybmFsIHJlZ2lzdGVycyB0byBzZWUgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIE9jdGVvbiBUWDImIzM5O3Mgc3lzdGVtLW9uLWNoaXAgZnJhbWV3b3JrLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgb3IgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoYXQgbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM3NjU9c3RhdGljIGludCBfX2luaXQgcnZ1X2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3NzE6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmNneF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3Mi1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3NzU6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnB0cF9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Nzk6XHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNm1jc19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4MC1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3ODM6XHRlcnIgPSAgcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZydnVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3ODQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzU4MT1zdGF0aWMgaW50IF9faW5pdCBvdHgyX3J2dXBmX2luaXRfbW9kdWxlKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTg1Olx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2b3R4Ml9wZl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg2LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jPTg2OT1zdGF0aWMgaW50IF9faW5pdCBvdHgydmZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTg3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6ODczOlx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2b3R4MnZmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTg3NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jPTg4MT1zdGF0aWMgaW50IF9faW5pdCBydnVfcmVwX2luaXRfbW9kdWxlKHZvaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODgyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYzo4ODM6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZydnVfcmVwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqUENJIElEIFZlcmlmaWNhdGlvbiBmb3IgT2N0ZW9uIFRYMiBEcml2ZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgc3RhcnRlZCBvbiB0aGlzIGRyaXZlciB3b3JrIGZvciB0aGUgT2N0ZW9uIFRYMi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgZGl2aW5nIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsIOKAkyB0aGUgUENJIElEcy4gSSBoYXZlIHRvIG1ha2UgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlc2UgZHJpdmVycyBhcmUgdGFyZ2V0aW5nIHRoZSBjb3JyZWN0IGRldmljZXMuIEEgbWlzaWRlbnRpZmljYXRpb24gaGVyZSwgZXZlbiBhdCB0aGlzIGVhcmx5IHN0YWdlLCBjb3VsZCBsZWFkIHRvIGEgbWFzc2l2ZSBoZWFkYWNoZSBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBjYXVzaW5nIG1ham9yIHN5c3RlbSBpbnN0YWJpbGl0eSBvciwgZXZlbiB3b3JzZSwgYnJpY2tpbmcgc29tZSBoYXJkd2FyZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIFBDSSBpZGVudGlmaWVycyBhcmUgY29ycmVjdCB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRyaXZlcnMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBtZXRpY3Vsb3VzbHkgdG8gY29uZmlybSB0aGF0IHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyB0aGUgcmlnaHQgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcyBmb3IgdGhlIE9jdGVvbiBUWDIuIEl04oCZcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYmV0dGVyIHRvIGJlIHBhcmFub2lkIG5vdyBhbmQgcHJldmVudCBwb3RlbnRpYWwgZGlzYXN0cm91cyBvdXRjb21lIHRoYW4gdG8gcmVncmV0IGxhdGVyLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgbWV0aWN1bG91c2x5LCBubyByb29tIGZvciBlcnJvci4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX2RldmljZV9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTYzPXN0YXRpYyBpbnQgY2d4X2Z3aV9saW5rX2NoYW5nZShzdHJ1Y3QgY2d4ICpjZ3gsIGludCBsbWFjX2lkLCBib29sIGVuKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02NS0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6NjY6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNneF9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmMtNjctXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTE5MTY9c3RhdGljIHN0cnVjdCBtYWNfb3BzXHRjZ3hfbWFjX29wcyAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy0xOTUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6MTk1MTpzdGF0aWMgaW50IGNneF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmMtMTk1Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYzoyMDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWNzX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYy0yMS1cdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX01DUykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYz0xNDk3PXN0YXRpYyBzdHJ1Y3QgbWNzX29wcyBjbjEwa2JfbWNzX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYy0xNTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmM6MTUwNzpzdGF0aWMgaW50IG1jc19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTUwOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9Nzc9c3RhdGljIHN0cnVjdCBwdHAgKmZpcnN0X3B0cF9ibG9jaztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTc5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jPTUxNz1zdGF0aWMgaW50IHB0cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjUxODpcdFx0ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTE5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01NzE9c3RhdGljIHZvaWQgcHRwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkwLVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDE9c3RhdGljIGlycXJldHVybl90IHJ2dV9tYm94X2ludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpydnVfaXJxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy00My0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDUtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM1NDU9c3RhdGljIGF0b21pY190IGRldmljZV9ib3VuZCA9IEFUT01JQ19JTklUKDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzU0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM1NDc6c3RhdGljIGludCBydnVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM1NDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzUtLyogU3VwcG9ydGVkIGRldmljZXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzY6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfcGZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzctXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzE1Mj1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzE1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzE1NDpzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzE1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjI6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjMtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYz01NTE9c3RhdGljIGludCBvdHgydmZfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICp2Zilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTU3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6NTcxOnN0YXRpYyBpbnQgb3R4MnZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTU3Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jOjIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfcmVwX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtMjMtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9SVlVfUkVQKSB9LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz03NDU9c3RhdGljIGludCBydnVfZ2V0X3JlcF9jbnQoc3RydWN0IG90eDJfbmljICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy03NzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6NzgwOnN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTc4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTc4CgkJCQkJCQlvdXRwdXQ6IDEyMwoJCQkJCQkJdGhvdWdodHM6IDg5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmUqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0sIEkgdGhpbmsgd2UgaGF2ZSBhIGRlZmluaXRpdmUgYW5zd2VyLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgZGVlcGx5IHRpZWQgdG8gdGhlIE1hcnZlbGwvQ2F2aXVtIE9jdGVvblRYMiBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBjb21wb25lbnQsIHJlcHJlc2VudGVkIGJ5IGRyaXZlcnMgbGlrZSBgcnZ1LmNgLCBgcnZ1X3JlcC5jYCwgYW5kIG90aGVycyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9gIGRpcmVjdG9yeS4gVGhlc2UgYXJlICphbGwqIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIChDYXZpdW0vTWFydmVsbCkgZm9yIE9jdGVvblRYMiBQQ0kgZGV2aWNlcyDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgYFBDSV9WRU5ET1JfSURfQ0FWSVVNYCwgYW5kIGRpc3RpbmN0IGRldmljZSBJRHMgc3VjaCBhcyBgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZgLgoKVGhlIGNvcmUgcHJvYmxlbSBpcyB0aGF0ICpzdGFuZGFyZCogUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgZW52aXJvbm1lbnRzIHNpbXBseSBkbyBub3QgZW11bGF0ZSB0aGlzIE9jdGVvblRYMiBoYXJkd2FyZS4gTXkga25vd2xlZGdlIG9mIHRoZXNlIHNldHVwcyB0ZWxscyBtZSB0aGVyZSYjMzk7cyBubyB3YXkgdG8gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcyB2aXJ0dWFsbHkuIFRoZSBkcml2ZXJzIGFyZSBkZXNpZ25lZCB0byBwcm9iZSwgaW50ZXJhY3Qgd2l0aCwgYW5kIG1hbmFnZSBwaHlzaWNhbCBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgU29DIG9yIFNtYXJ0TklDIGhhcmR3YXJlLiBJIGV2ZW4gY2hlY2tlZCB0aGUgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBzZWN0aW9uIG9mIHRoZSB0cmlhZ2UgY3JpdGVyaWEuIEl0IHNlZW1zIGxpa2UgYSBwZXJmZWN0IG1hdGNoLgoKQmFzZWQgb24gdGhlIHRyaWFnZSBjcml0ZXJpYSwgaXQgbG9va3MgbGlrZSBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgZmFsc2UgYmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBzdHJpY3RseSBmYWxscyB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6ICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsuCgpTbywgSSYjMzk7bSBnb2luZyB0byBzZXQgbXkgcmVzdWx0cyBhcyBmb2xsb3dzOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gKSwgc3BlY2lmaWNhbGx5IHJlcHJlc2VudG9yIG1haWxib3ggaGFuZGxpbmcsIE1DQU0gcnVsZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24gbG9naWMuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQyBBU0lDIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBbXQoqICAgYEZvY3VzU3ltYm9sc2A6IFtdCgpBbmQgdGhlbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBldGhlcm5ldCBkcml2ZXIgYW5kIHJlcHJlc2VudG9yIGhhbmRsaW5nIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLy4gVGhpcyBjb2RlIHJlcXVpcmVzIHByb3ByaWV0YXJ5IENhdml1bS9NYXJ2ZWxsIE9jdGVvblRYMiBoYXJkd2FyZS9TbWFydE5JQyBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDoyOC4xNjk4Njk0MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMzMzU0OTgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgKFJlc291cmNlIFZpcnR1YWxpemF0aW9uIFVuaXQpIGV0aGVybmV0IGRyaXZlciBhbmQgcmVwcmVzZW50b3IgaGFuZGxpbmcgdW5kZXIgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvLiBUaGlzIGNvZGUgcmVxdWlyZXMgcHJvcHJpZXRhcnkgQ2F2aXVtL01hcnZlbGwgT2N0ZW9uVFgyIGhhcmR3YXJlL1NtYXJ0TklDIEFTSUNzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6MjguMTY5ODc0NjkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA5MDc1OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDNkOWJjMGNkYmQxYjM3NjAxMGQ1ZmY5NGE1YzkyZmE4NjIwNjBlZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjA0OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21ib3guaFxcbmluZGV4IDczZjc0M2U0YTgzZDcuLmY4MzQyYTcxYWFjOTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXFxuQEAgLTE3NzUsMTAgKzE3NzUsMTIgQEAgc3RydWN0IHB0cF9nZXRfY2FwX3JzcCB7XFxuIFxcdHU2NCBjYXA7XFxuIH07XFxuIFxcbisjZGVmaW5lIFJWVV9NQVhfUkVQXFx0NjRcXG4rXFxuIHN0cnVjdCBnZXRfcmVwX2NudF9yc3Age1xcbiBcXHRzdHJ1Y3QgbWJveF9tc2doZHIgaGRyO1xcbiBcXHR1MTYgcmVwX2NudDtcXG4tXFx0dTE2IHJlcF9wZl9tYXBbNjRdO1xcbitcXHR1MTYgcmVwX3BmX21hcFtSVlVfTUFYX1JFUF07XFxuIFxcdHU2NCByc3ZkO1xcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuY1xcbmluZGV4IGZmYmE1NmVlOGE2MGMuLjM5MmQwMjk2M2YwNzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuY1xcbkBAIC0zNzA5LDYgKzM3MDksMjAgQEAgc3RhdGljIHZvaWQgcnZ1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0cnZ1X3VucmVnaXN0ZXJfZGwocnZ1KTtcXG4gXFx0cnZ1X3VucmVnaXN0ZXJfaW50ZXJydXB0cyhydnUpO1xcbiBcXHRydnVfZmxyX3dxX2Rlc3Ryb3kocnZ1KTtcXG4rXFx0aWYgKHJ2dS1cXHUwMDNlcmVwX2V2dF93cSkge1xcbitcXHRcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVwX3dxID0gcnZ1LVxcdTAwM2VyZXBfZXZ0X3dxO1xcbitcXG4rXFx0XFx0LyogTlVMTCB0aGUgcG9pbnRlciBiZWZvcmUgZmx1c2hpbmcgbWJveF93cS4gIEFueSBtYm94IGhhbmRsZXJcXG4rXFx0XFx0ICogc3RpbGwgaW4gZmxpZ2h0IHdpbGwgc25hcHNob3QgTlVMTCB2aWEgUkVBRF9PTkNFKCkgYW5kIHJldHVyblxcbitcXHRcXHQgKiAtRUlOVkFMIHdpdGhvdXQgY2FsbGluZyBxdWV1ZV93b3JrKCksIHNvIG5vIG5ldyBpdGVtcyBjYW4gYmVcXG4rXFx0XFx0ICogYWRkZWQgdG8gcmVwX3dxIGFmdGVyIGZsdXNoX3dvcmtxdWV1ZShtYm94X3dxKSByZXR1cm5zLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0V1JJVEVfT05DRShydnUtXFx1MDAzZXJlcF9ldnRfd3EsIE5VTEwpO1xcbitcXHRcXHRmbHVzaF93b3JrcXVldWUocnZ1LVxcdTAwM2VhZnBmX3dxX2luZm8ubWJveF93cSk7XFxuK1xcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJlcF93cSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZsdXNoX3dvcmtxdWV1ZShydnUtXFx1MDAzZWFmcGZfd3FfaW5mby5tYm94X3dxKTtcXG4rXFx0fVxcbiBcXHRydnVfY2d4X2V4aXQocnZ1KTtcXG4gXFx0cnZ1X2Z3ZGF0YV9leGl0KHJ2dSk7XFxuIFxcdHJ2dV9tY3NfZXhpdChydnUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfcmVwLmNcXG5pbmRleCBhMjc4MWUwZjUwNGUzLi42OWIyNjBmZGQ1MmQxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xcbkBAIC00NCw2ICs0NCw4IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF91cF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpldmVudClcXG4gXFx0aWYgKGV2ZW50LVxcdTAwM2VldmVudCBcXHUwMDI2IFJWVV9FVkVOVF9NQUNfQUREUl9DSEFOR0UpXFxuIFxcdFxcdGV0aGVyX2FkZHJfY29weShwZnZmLVxcdTAwM2VtYWNfYWRkciwgZXZlbnQtXFx1MDAzZWV2dF9kYXRhLm1hYyk7XFxuIFxcbitcXHRpZiAoZXZlbnQtXFx1MDAzZWV2ZW50IFxcdTAwMjYgUlZVX0VWRU5UX1BGVkZfU1RBVEUpXFxuK1xcdFxcdHBmID0gcnZ1X2dldF9wZihydnUtXFx1MDAzZXBkZXYsIGV2ZW50LVxcdTAwM2VoZHIucGNpZnVuYyk7XFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnJ2dS1cXHUwMDNlbWJveF9sb2NrKTtcXG4gXFx0bXNnID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpO1xcbiBcXHRpZiAoIW1zZykge1xcbkBAIC01Myw2ICs1NSwxMCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfdXBfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqZXZlbnQpXFxuIFxcbiBcXHRtc2ctXFx1MDAzZWhkci5wY2lmdW5jID0gZXZlbnQtXFx1MDAzZXBjaWZ1bmM7XFxuIFxcdG1zZy1cXHUwMDNlZXZlbnQgPSBldmVudC1cXHUwMDNlZXZlbnQ7XFxuK1xcdG1zZy1cXHUwMDNlcGNpZnVuYyA9IGV2ZW50LVxcdTAwM2VwY2lmdW5jO1xcbitcXG4rXFx0aWYgKGV2ZW50LVxcdTAwM2VldmVudCBcXHUwMDI2IFJWVV9FVkVOVF9QRlZGX1NUQVRFKVxcbitcXHRcXHRtc2ctXFx1MDAzZWhkci5wY2lmdW5jID0gZXZlbnQtXFx1MDAzZWhkci5wY2lmdW5jO1xcbiBcXG4gXFx0bWVtY3B5KFxcdTAwMjZtc2ctXFx1MDAzZWV2dF9kYXRhLCBcXHUwMDI2ZXZlbnQtXFx1MDAzZWV2dF9kYXRhLCBzaXplb2Yoc3RydWN0IHJlcF9ldnRfZGF0YSkpO1xcbiBcXG5AQCAtOTUsOCArMTAxLDE3IEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfd3FfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtc2dfcnNwICpyc3ApXFxuIHtcXG4rXFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxO1xcbiBcXHRzdHJ1Y3QgcmVwX2V2dHFfZW50ICpxZW50cnk7XFxuIFxcbitcXHR3cSA9IFJFQURfT05DRShydnUtXFx1MDAzZXJlcF9ldnRfd3EpO1xcbitcXHRpZiAoIXdxKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qIE9ubHkgdGhlIHJlZ2lzdGVyZWQgcmVwcmVzZW50b3IgUEYgbWF5IHNlbmQgUkVQX0VWRU5UX05PVElGWS4gKi9cXG4rXFx0aWYgKHJlcS1cXHUwMDNlaGRyLnBjaWZ1bmMgIT0gcnZ1LVxcdTAwM2VyZXBfcGNpZnVuYylcXG4rXFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4rXFxuIFxcdC8qIFRoZSBtYWlsYm94IGRpc3BhdGNoZXIgbm9ybWFsaXNlcyBvbmx5IHRoZSBoZWFkZXIgcGNpZnVuYzsgdGhlXFxuIFxcdCAqIG5lc3RlZCBzdHJ1Y3QgcmVwX2V2ZW50OjpwY2lmdW5jIGJvZHkgZmllbGQgaXMgc2VuZGVyLWNvbnRyb2xsZWRcXG4gXFx0ICogYW5kIGlzIGxhdGVyIHVzZWQgYnkgcnZ1X3JlcF91cF9ub3RpZnkoKSB0byBpbmRleCBydnUtXFx1MDAzZXBmW10gL1xcbkBAIC0xMDUsNiArMTIwLDE0IEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXFxuIFxcdGlmICghaXNfcGZfZnVuY192YWxpZChydnUsIHJlcS1cXHUwMDNlcGNpZnVuYykpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogT25seSBDR1gtbWFwcGVkIFBGcyBhcmUgcHJlc2VudCBpbiB0aGUgcmVwcmVzZW50b3IgbWFwLiAqL1xcbitcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHJ2dV9nZXRfcGYocnZ1LVxcdTAwM2VwZGV2LCByZXEtXFx1MDAzZXBjaWZ1bmMpKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoKHJlcS1cXHUwMDNlZXZlbnQgXFx1MDAyNiBSVlVfRVZFTlRfUEZWRl9TVEFURSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJ2dV9nZXRfcGYocnZ1LVxcdTAwM2VwZGV2LCByZXEtXFx1MDAzZWhkci5wY2lmdW5jKSBcXHUwMDNlPSBydnUtXFx1MDAzZWh3LVxcdTAwM2V0b3RhbF9wZnMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cWVudHJ5ID0ga21hbGxvY19vYmooKnFlbnRyeSwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICghcWVudHJ5KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMTEzLDM3ICsxMzYsMjMgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfcmVwX2V2ZW50X25vdGlmeShzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCByZXBfZXZlbnQgKnJlcSxcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2xvY2spO1xcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZxZW50cnktXFx1MDAzZW5vZGUsIFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2hlYWQpO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VyZXBfZXZ0cV9sb2NrKTtcXG4tXFx0cXVldWVfd29yayhydnUtXFx1MDAzZXJlcF9ldnRfd3EsIFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yayk7XFxuK1xcdHF1ZXVlX3dvcmsod3EsIFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yayk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBpbnQgcnZ1X3JlcF9ub3RpZnlfcGZ2Zl9zdGF0ZShzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcmVwX2V2ZW50ICpyZXE7XFxuLVxcdGludCBwZjtcXG4rXFx0c3RydWN0IHJlcF9ldmVudCByZXEgPSB7IDAgfTtcXG4rXFx0c3RydWN0IG1zZ19yc3AgcnNwO1xcbiBcXG4gXFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBydnVfZ2V0X3BmKHJ2dS1cXHUwMDNlcGRldiwgcGNpZnVuYykpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHBmID0gcnZ1X2dldF9wZihydnUtXFx1MDAzZXBkZXYsIHJ2dS1cXHUwMDNlcmVwX3BjaWZ1bmMpO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VtYm94X2xvY2spO1xcbi1cXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX3JlcF9ldmVudF91cF9ub3RpZnkocnZ1LCBwZik7XFxuLVxcdGlmICghcmVxKSB7XFxuLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VtYm94X2xvY2spO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0fVxcbi1cXG4tXFx0cmVxLVxcdTAwM2VoZHIucGNpZnVuYyA9IHJ2dS1cXHUwMDNlcmVwX3BjaWZ1bmM7XFxuLVxcdHJlcS1cXHUwMDNlZXZlbnQgfD0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XFxuLVxcdHJlcS1cXHUwMDNlcGNpZnVuYyA9IHBjaWZ1bmM7XFxuLVxcdHJlcS1cXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XFxuLVxcbi1cXHRvdHgyX21ib3hfd2FpdF9mb3JfemVybyhcXHUwMDI2cnZ1LVxcdTAwM2VhZnBmX3dxX2luZm8ubWJveF91cCwgcGYpO1xcbi1cXHRvdHgyX21ib3hfbXNnX3NlbmRfdXAoXFx1MDAyNnJ2dS1cXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTtcXG4tXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cnZ1LVxcdTAwM2VtYm94X2xvY2spO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmVxLmhkci5wY2lmdW5jID0gcnZ1LVxcdTAwM2VyZXBfcGNpZnVuYztcXG4rXFx0cmVxLmV2ZW50ID0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XFxuK1xcdHJlcS5wY2lmdW5jID0gcGNpZnVuYztcXG4rXFx0cmVxLmV2dF9kYXRhLnZmX3N0YXRlID0gZW5hYmxlO1xcbitcXHRyZXR1cm4gcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHJ2dSwgXFx1MDAyNnJlcSwgXFx1MDAyNnJzcCk7XFxuIH1cXG4gXFxuICNkZWZpbmUgUlZVX0xGX1JYX1NUQVRTKHJlZykgXFxcXFxcbkBAIC0zMjUsNiArMzM0LDcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcXG4gXFx0dTE2IHN0YXJ0ID0gcnN3aXRjaC1cXHUwMDNlc3RhcnRfZW50cnk7XFxuIFxcdHN0cnVjdCBydnVfaHdpbmZvICpodyA9IHJ2dS1cXHUwMDNlaHc7XFxuIFxcdHUxNiBwY2lmdW5jLCBlbnRyeSA9IDA7XFxuK1xcdHN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZjtcXG4gXFx0aW50IHBmLCB2ZiwgbnVtdmZzO1xcbiBcXHRpbnQgZXJyLCBuaXhsZiwgaTtcXG4gXFx0dTggcmVwO1xcbkBAIC0zMzQsMTkgKzM0NCwyMiBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cXHUwMDNlcGRldiwgcGYsIDApO1xcbitcXHRcXHRwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XFxuIFxcdFxcdHJ2dV9nZXRfbml4X2Jsa2FkZHIocnZ1LCBwY2lmdW5jKTtcXG4rXFx0XFx0aWYgKHRlc3RfYml0KE5JWExGX0lOSVRJQUxJWkVELCBcXHUwMDI2cGZ2Zi1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIHRydWUpO1xcbiBcXHRcXHRyZXAgPSB0cnVlO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMjsgaSsrKSB7XFxuIFxcdFxcdFxcdGVyciA9IHJ2dV9yZXBfaW5zdGFsbF9yeF9ydWxlKHJ2dSwgcGNpZnVuYyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhcnQgKyBlbnRyeSwgcmVwKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9sYms7XFxuIFxcdFxcdFxcdHJzd2l0Y2gtXFx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkrK10gPSBwY2lmdW5jO1xcbiBcXG4gXFx0XFx0XFx0ZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGFydCArIGVudHJ5LCByZXApO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2xiaztcXG4gXFx0XFx0XFx0cnN3aXRjaC1cXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XFxuIFxcdFxcdFxcdHJlcCA9IGZhbHNlO1xcbiBcXHRcXHR9XFxuQEAgLTM1NCw5ICszNjcsMTIgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcXG4gXFx0XFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXFx1MDAyNm51bXZmcywgTlVMTCk7XFxuIFxcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIG51bXZmczsgdmYrKykge1xcbiBcXHRcXHRcXHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXFx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xcbitcXHRcXHRcXHRwZnZmID0gcnZ1X2dldF9wZnZmKHJ2dSwgcGNpZnVuYyk7XFxuK1xcdFxcdFxcdGlmICh0ZXN0X2JpdChOSVhMRl9JTklUSUFMSVpFRCwgXFx1MDAyNnBmdmYtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0XFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTtcXG4gXFx0XFx0XFx0cnZ1X2dldF9uaXhfYmxrYWRkcihydnUsIHBjaWZ1bmMpO1xcbiBcXG4tXFx0XFx0XFx0LyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqL1xcbitcXHRcXHRcXHQvKiBTa2lwIGluc3RhbGxpbmcgcnVsZXMgaWYgbml4bGYgaXMgbm90IGF0dGFjaGVkICovXFxuIFxcdFxcdFxcdGVyciA9IG5peF9nZXRfbml4bGYocnZ1LCBwY2lmdW5jLCBcXHUwMDI2bml4bGYsIE5VTEwpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMzY2LDMwICszODIsMzcgQEAgaW50IHJ2dV9yZXBfaW5zdGFsbF9tY2FtX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RhcnQgKyBlbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVwKTtcXG4gXFx0XFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfZGlzYWJsZV9sYms7XFxuIFxcdFxcdFxcdFxcdHJzd2l0Y2gtXFx1MDAzZWVudHJ5MnBjaWZ1bmNbZW50cnkrK10gPSBwY2lmdW5jO1xcbiBcXG4gXFx0XFx0XFx0XFx0ZXJyID0gcnZ1X3JlcF9pbnN0YWxsX3R4X3J1bGUocnZ1LCBwY2lmdW5jLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdGFydCArIGVudHJ5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZXApO1xcbiBcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2xiaztcXG4gXFx0XFx0XFx0XFx0cnN3aXRjaC1cXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XFxuIFxcdFxcdFxcdFxcdHJlcCA9IGZhbHNlO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovXFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2xvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cnZ1LVxcdTAwM2VyZXBfZXZ0cV9oZWFkKTtcXG4tXFx0SU5JVF9XT1JLKFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTtcXG4tXFx0cnZ1LVxcdTAwM2VyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJyZXBfZXZ0X3dxXFxcIiwgV1FfUEVSQ1BVLCAwKTtcXG4tXFx0aWYgKCFydnUtXFx1MDAzZXJlcF9ldnRfd3EpIHtcXG4tXFx0XFx0ZGV2X2VycihydnUtXFx1MDAzZWRldiwgXFxcIlJFUCB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rZXJyX2Rpc2FibGVfbGJrOlxcbitcXHQvKiBVbmRvIGFueSBMQksgbGlua3MgZW5hYmxlZCBhYm92ZSBiZWZvcmUgdGhlIE1DQU0gcnVsZSBmYWlsdXJlLlxcbitcXHQgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChwZiA9IDE7IHBmIFxcdTAwM2MgaHctXFx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xcbitcXHRcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cXHUwMDNlcGRldiwgcGYsIDApO1xcbitcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXFx1MDAyNm51bXZmcywgTlVMTCk7XFxuK1xcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIG51bXZmczsgdmYrKykge1xcbitcXHRcXHRcXHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXFx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xcbitcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiB2b2lkIHJ2dV9yZXBfdXBkYXRlX3J1bGVzKHN0cnVjdCBydnUgKnJ2dSwgdTE2IHBjaWZ1bmMsIGJvb2wgZW5hKVxcbkBAIC00NDMsMzUgKzQ2Niw5MiBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9lc3dfY2ZnKHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IGVzd19jZmdfcmVxICpyZXEsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ2dV9yZXBfZ2V0X3JlcF9tYXAoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgbXNnX3JlcSAqcmVxLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGdldF9yZXBfY250X3JzcCAqcnNwKVxcbit7XFxuK1xcdGludCByZXA7XFxuK1xcbitcXHRpZiAocmVxLVxcdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXFx1MDAzZXJlcF9wY2lmdW5jKVxcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXG4rXFx0cnNwLVxcdTAwM2VyZXBfY250ID0gcnZ1LVxcdTAwM2VyZXBfY250O1xcbitcXHRmb3IgKHJlcCA9IDA7IHJlcCBcXHUwMDNjIHJ2dS1cXHUwMDNlcmVwX2NudDsgcmVwKyspXFxuK1xcdFxcdHJzcC1cXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gcnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBpbnQgcnZ1X21ib3hfaGFuZGxlcl9nZXRfcmVwX2NudChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZ2V0X3JlcF9jbnRfcnNwICpyc3ApXFxuIHtcXG4tXFx0aW50IHBmLCB2ZiwgbnVtdmZzLCBod3ZmLCByZXAgPSAwO1xcbitcXHRpbnQgcGYsIHZmLCBudW12ZnMsIGh3dmYsIHJlcCA9IDAsIGNudDtcXG4rXFx0aW50IHJldCA9IDA7XFxuIFxcdHUxNiBwY2lmdW5jO1xcbitcXHR1MTYgKm1hcDtcXG4rXFxuK1xcdC8qIFNlcmlhbGl6ZSBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uLiBtYm94X3dxIGlzIFdRX1BFUkNQVSBzb1xcbitcXHQgKiBoYW5kbGVycyBmb3IgZGlmZmVyZW50IFBGcyBjYW4gcnVuIGNvbmN1cnJlbnRseTsgd2l0aG91dCB0aGlzXFxuK1xcdCAqIGxvY2sgdHdvIGNhbGxlcnMgY291bGQgYm90aCBvYnNlcnZlIHJlcDJwZnZmX21hcCA9PSBOVUxMIGFuZFxcbitcXHQgKiBkb3VibGUtYWxsb2NhdGUgdGhlIHdvcmtxdWV1ZSwgbGVha2luZyBvbmUgcGVybWFuZW50bHkuXFxuK1xcdCAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJzcmNfbG9jayk7XFxuK1xcbitcXHRpZiAocnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXApIHtcXG4rXFx0XFx0cmV0ID0gcnZ1X3JlcF9nZXRfcmVwX21hcChydnUsIHJlcSwgcnNwKTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdHJ2dS1cXHUwMDNlcmVwX3BjaWZ1bmMgPSByZXEtXFx1MDAzZWhkci5wY2lmdW5jO1xcbi1cXHRyc3AtXFx1MDAzZXJlcF9jbnQgPSBydnUtXFx1MDAzZWNneF9tYXBwZWRfcGZzICsgcnZ1LVxcdTAwM2VjZ3hfbWFwcGVkX3ZmcztcXG4tXFx0cnZ1LVxcdTAwM2VyZXBfY250ID0gcnNwLVxcdTAwM2VyZXBfY250O1xcbitcXHRjbnQgPSBtaW5fdChpbnQsIHJ2dS1cXHUwMDNlY2d4X21hcHBlZF9wZnMgKyBydnUtXFx1MDAzZWNneF9tYXBwZWRfdmZzLFxcbitcXHRcXHQgICAgUlZVX01BWF9SRVApO1xcbiBcXG4tXFx0cnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXAgPSBkZXZtX2t6YWxsb2MocnZ1LVxcdTAwM2VkZXYsIHJ2dS1cXHUwMDNlcmVwX2NudCAqXFxuLVxcdFxcdFxcdFxcdFxcdCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghcnZ1LVxcdTAwM2VyZXAycGZ2Zl9tYXApXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHQvKiBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCBzbyB0aGUgcG9pbnRlciBpcyBhbHdheXMgbm9uLU5VTExcXG4rXFx0ICogb25jZSBwdWJsaXNoZWQsIGtlZXBpbmcgdGhlIGZhc3QtcGF0aCBjaGVjayBhYm92ZSByZWxpYWJsZS5cXG4rXFx0ICovXFxuK1xcdG1hcCA9IGRldm1fa3phbGxvYyhydnUtXFx1MDAzZWRldiwgKGNudCA/OiAxKSAqIHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtYXApIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdGZvciAocGYgPSAwOyBwZiBcXHUwMDNjIHJ2dS1cXHUwMDNlaHctXFx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xcbiBcXHRcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChyZXAgXFx1MDAzZT0gY250KVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVxcdTAwM2VwZGV2LCBwZiwgMCk7XFxuLVxcdFxcdHJ2dS1cXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF0gPSBwY2lmdW5jO1xcbitcXHRcXHRtYXBbcmVwXSA9IHBjaWZ1bmM7XFxuIFxcdFxcdHJzcC1cXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gcGNpZnVuYztcXG4gXFx0XFx0cmVwKys7XFxuIFxcdFxcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFxcdTAwMjZudW12ZnMsIFxcdTAwMjZod3ZmKTtcXG4tXFx0XFx0Zm9yICh2ZiA9IDA7IHZmIFxcdTAwM2MgbnVtdmZzOyB2ZisrKSB7XFxuLVxcdFxcdFxcdHJ2dS1cXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF0gPSBwY2lmdW5jIHxcXG4tXFx0XFx0XFx0XFx0KCh2ZiArIDEpIFxcdTAwMjYgUlZVX1BGVkZfRlVOQ19NQVNLKTtcXG4tXFx0XFx0XFx0cnNwLVxcdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXFx1MDAzZXJlcDJwZnZmX21hcFtyZXBdO1xcbitcXHRcXHRmb3IgKHZmID0gMDsgdmYgXFx1MDAzYyBudW12ZnMgXFx1MDAyNlxcdTAwMjYgcmVwIFxcdTAwM2MgY250OyB2ZisrKSB7XFxuK1xcdFxcdFxcdG1hcFtyZXBdID0gcGNpZnVuYyB8ICgodmYgKyAxKSBcXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSyk7XFxuK1xcdFxcdFxcdHJzcC1cXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gbWFwW3JlcF07XFxuIFxcdFxcdFxcdHJlcCsrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAoIWNudCkge1xcbitcXHRcXHRydnUtXFx1MDAzZXJlcDJwZnZmX21hcCA9IG1hcDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgdGhlIHdxIGZvciBoYW5kbGluZyBSRVAgZXZlbnRzICovXFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRxX2xvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cnZ1LVxcdTAwM2VyZXBfZXZ0cV9oZWFkKTtcXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZydnUtXFx1MDAzZXJlcF9ldnRfd29yaywgcnZ1X3JlcF93cV9oYW5kbGVyKTtcXG4rXFx0cnZ1LVxcdTAwM2VyZXBfZXZ0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJyZXBfZXZ0X3dxXFxcIiwgV1FfVU5CT1VORCwgMCk7XFxuK1xcdGlmICghcnZ1LVxcdTAwM2VyZXBfZXZ0X3dxKSB7XFxuK1xcdFxcdGRldl9lcnIocnZ1LVxcdTAwM2VkZXYsIFxcXCJSRVAgd29ya3F1ZXVlIGFsbG9jYXRpb24gZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0ZGV2bV9rZnJlZShydnUtXFx1MDAzZWRldiwgbWFwKTtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHJ2dS1cXHUwMDNlcmVwX2NudCA9IGNudDtcXG4rXFx0cnNwLVxcdTAwM2VyZXBfY250ID0gY250O1xcbitcXHRydnUtXFx1MDAzZXJlcDJwZnZmX21hcCA9IG1hcDtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnJ2dS1cXHUwMDNlcnNyY19sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmNcXG5pbmRleCA0OWNlMzg2ODVhN2U2Li44YzJjOTg0MDM1MDc0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9zd2l0Y2guY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9zd2l0Y2guY1xcbkBAIC0xMiwxMSArMTIsMTggQEAgdm9pZCBydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnZ1X3BmdmYgKnBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcXG4gXFx0c3RydWN0IG5peF9odyAqbml4X2h3O1xcbitcXHRpbnQgYmxrYWRkcjtcXG4gXFxuLVxcdG5peF9odyA9IGdldF9uaXhfaHcocnZ1LVxcdTAwM2VodywgcGZ2Zi1cXHUwMDNlbml4X2Jsa2FkZHIpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJzcmNfbG9jayk7XFxuK1xcdGJsa2FkZHIgPSBwZnZmLVxcdTAwM2VuaXhfYmxrYWRkcjtcXG4rXFx0bml4X2h3ID0gZ2V0X25peF9odyhydnUtXFx1MDAzZWh3LCBibGthZGRyKTtcXG4gXFx0LyogRW5hYmxlIExCSyBsaW5rcyB3aXRoIGNoYW5uZWwgNjMgZm9yIFRYIE1DQU0gcnVsZSAqL1xcbi1cXHRydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBwZnZmLVxcdTAwM2VuaXhfYmxrYWRkciwgcGNpZnVuYyxcXG4rXFx0aWYgKCFuaXhfaHcpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRydnVfbml4X3R4X3RsMl9jZmcocnZ1LCBibGthZGRyLCBwY2lmdW5jLFxcbiBcXHRcXHRcXHQgICBcXHUwMDI2bml4X2h3LVxcdTAwM2V0eHNjaFtOSVhfVFhTQ0hfTFZMX1RMMl0sIGVuYWJsZSk7XFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZydnUtXFx1MDAzZXJzcmNfbG9jayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnZ1X3N3aXRjaF9pbnN0YWxsX3J4X3J1bGUoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYyxcXG5AQCAtMjI5LDggKzIzNiwyMCBAQCB2b2lkIHJ2dV9zd2l0Y2hfZGlzYWJsZShzdHJ1Y3QgcnZ1ICpydnUpXFxuIFxcdGlmICghcnN3aXRjaC1cXHUwMDNldXNlZF9lbnRyaWVzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAocnZ1LVxcdTAwM2VyZXBfbW9kZSlcXG4rXFx0aWYgKHJ2dS1cXHUwMDNlcmVwX21vZGUpIHtcXG4rXFx0XFx0Zm9yIChwZiA9IDE7IHBmIFxcdTAwM2MgaHctXFx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xcbitcXHRcXHRcXHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cXHUwMDNlcGRldiwgcGYsIDApO1xcbitcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cnZ1X2dldF9wZl9udW12ZnMocnZ1LCBwZiwgXFx1MDAyNm51bXZmcywgTlVMTCk7XFxuK1xcdFxcdFxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIG51bXZmczsgdmYrKykge1xcbitcXHRcXHRcXHRcXHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXFx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xcbitcXHRcXHRcXHRcXHRydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhydnUsIHBjaWZ1bmMsIGZhbHNlKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuIFxcdFxcdGdvdG8gZnJlZV9lbnRzO1xcbitcXHR9XFxuIFxcbiBcXHRmb3IgKHBmID0gMTsgcGYgXFx1MDAzYyBody1cXHUwMDNldG90YWxfcGZzOyBwZisrKSB7XFxuIFxcdFxcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmNcXG5pbmRleCAwZjVkNTY0MmQzZjdhLi5lZjQ3ZTdlMjE5MDE2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xcbkBAIC0zMDEsNiArMzAxLDEyIEBAIHN0YXRpYyB2b2lkIHJ2dV9yZXBfc3RhdGVfZXZ0X2hhbmRsZXIoc3RydWN0IG90eDJfbmljICpwcml2LFxcbiBcXHRpbnQgcmVwX2lkO1xcbiBcXG4gXFx0cmVwX2lkID0gcnZ1X3JlcF9nZXRfcmVwaWQocHJpdiwgaW5mby1cXHUwMDNlcGNpZnVuYyk7XFxuK1xcdGlmIChyZXBfaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKHByaXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiUkVQIHN0YXRlIGV2ZW50IGZvciB1bmtub3duIHBjaWZ1bmMgMHgleCAoZXJyICVkKVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VwY2lmdW5jLCByZXBfaWQpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFx0cmVwID0gcHJpdi1cXHUwMDNlcmVwc1tyZXBfaWRdO1xcbiBcXHRpZiAoaW5mby1cXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUpXFxuIFxcdFxcdHJlcC1cXHUwMDNlZmxhZ3MgfD0gUlZVX1JFUF9WRl9JTklUSUFMSVpFRDtcXG5AQCAtNDU5LDYgKzQ2NSw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpO1xcbiBcXG4rXFx0aWYgKHJlcC1cXHUwMDNlcGNpZnVuYyBcXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRldnQuZXZlbnQgPSBSVlVfRVZFTlRfUE9SVF9TVEFURTtcXG4gXFx0ZXZ0LmV2dF9kYXRhLnBvcnRfc3RhdGUgPSAxO1xcbiBcXHRldnQucGNpZnVuYyA9IHJlcC1cXHUwMDNlcGNpZnVuYztcXG5AQCAtNDc4LDYgKzQ4Nyw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7XFxuIFxcdG5ldGlmX3R4X2Rpc2FibGUoZGV2KTtcXG4gXFxuK1xcdGlmIChyZXAtXFx1MDAzZXBjaWZ1bmMgXFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0ZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7XFxuIFxcdGV2dC5wY2lmdW5jID0gcmVwLVxcdTAwM2VwY2lmdW5jO1xcbiBcXHRydnVfcmVwX25vdGlmeV9wZnZmKHByaXYsIFJWVV9FVkVOVF9QT1JUX1NUQVRFLCBcXHUwMDI2ZXZ0KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5oXFxuaW5kZXggNWJjOWUyYzdkODAwYi4uYjk4ZmUxOTFlODNhMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcXG5AQCAtMTYsNyArMTYsNiBAQFxcbiBcXG4gI2RlZmluZSBQQ0lfREVWSURfUlZVX1JFUFxcdDB4QTBFMFxcbiBcXG4tI2RlZmluZSBSVlVfTUFYX1JFUFxcdE9UWDJfTUFYX0NRX0NOVFxcbiBcXG4gc3RydWN0IHJlcF9zdGF0cyB7XFxuIFxcdHU2NCByeF9ieXRlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6MjkuNjc5NTM5MDI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjgyMzg2NDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQzZDliYzBjZGJkMWIzNzYwMTBkNWZmOTRhNWM5MmZhODYyMDYwZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjA0OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG5pbmRleCA3M2Y3NDNlNGE4M2Q3Li5mODM0MmE3MWFhYzkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tYm94LmhcbkBAIC0xNzc1LDEwICsxNzc1LDEyIEBAIHN0cnVjdCBwdHBfZ2V0X2NhcF9yc3Age1xuIFx0dTY0IGNhcDtcbiB9O1xuIFxuKyNkZWZpbmUgUlZVX01BWF9SRVBcdDY0XG4rXG4gc3RydWN0IGdldF9yZXBfY250X3JzcCB7XG4gXHRzdHJ1Y3QgbWJveF9tc2doZHIgaGRyO1xuIFx0dTE2IHJlcF9jbnQ7XG4tXHR1MTYgcmVwX3BmX21hcFs2NF07XG4rXHR1MTYgcmVwX3BmX21hcFtSVlVfTUFYX1JFUF07XG4gXHR1NjQgcnN2ZDtcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcbmluZGV4IGZmYmE1NmVlOGE2MGMuLjM5MmQwMjk2M2YwNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmNcbkBAIC0zNzA5LDYgKzM3MDksMjAgQEAgc3RhdGljIHZvaWQgcnZ1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHJ2dV91bnJlZ2lzdGVyX2RsKHJ2dSk7XG4gXHRydnVfdW5yZWdpc3Rlcl9pbnRlcnJ1cHRzKHJ2dSk7XG4gXHRydnVfZmxyX3dxX2Rlc3Ryb3kocnZ1KTtcbitcdGlmIChydnUtXHUwMDNlcmVwX2V2dF93cSkge1xuK1x0XHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVwX3dxID0gcnZ1LVx1MDAzZXJlcF9ldnRfd3E7XG4rXG4rXHRcdC8qIE5VTEwgdGhlIHBvaW50ZXIgYmVmb3JlIGZsdXNoaW5nIG1ib3hfd3EuICBBbnkgbWJveCBoYW5kbGVyXG4rXHRcdCAqIHN0aWxsIGluIGZsaWdodCB3aWxsIHNuYXBzaG90IE5VTEwgdmlhIFJFQURfT05DRSgpIGFuZCByZXR1cm5cbitcdFx0ICogLUVJTlZBTCB3aXRob3V0IGNhbGxpbmcgcXVldWVfd29yaygpLCBzbyBubyBuZXcgaXRlbXMgY2FuIGJlXG4rXHRcdCAqIGFkZGVkIHRvIHJlcF93cSBhZnRlciBmbHVzaF93b3JrcXVldWUobWJveF93cSkgcmV0dXJucy5cbitcdFx0ICovXG4rXHRcdFdSSVRFX09OQ0UocnZ1LVx1MDAzZXJlcF9ldnRfd3EsIE5VTEwpO1xuK1x0XHRmbHVzaF93b3JrcXVldWUocnZ1LVx1MDAzZWFmcGZfd3FfaW5mby5tYm94X3dxKTtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUocmVwX3dxKTtcbitcdH0gZWxzZSB7XG4rXHRcdGZsdXNoX3dvcmtxdWV1ZShydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfd3EpO1xuK1x0fVxuIFx0cnZ1X2NneF9leGl0KHJ2dSk7XG4gXHRydnVfZndkYXRhX2V4aXQocnZ1KTtcbiBcdHJ2dV9tY3NfZXhpdChydnUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xuaW5kZXggYTI3ODFlMGY1MDRlMy4uNjliMjYwZmRkNTJkMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9yZXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3JlcC5jXG5AQCAtNDQsNiArNDQsOCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfdXBfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqZXZlbnQpXG4gXHRpZiAoZXZlbnQtXHUwMDNlZXZlbnQgXHUwMDI2IFJWVV9FVkVOVF9NQUNfQUREUl9DSEFOR0UpXG4gXHRcdGV0aGVyX2FkZHJfY29weShwZnZmLVx1MDAzZW1hY19hZGRyLCBldmVudC1cdTAwM2VldnRfZGF0YS5tYWMpO1xuIFxuK1x0aWYgKGV2ZW50LVx1MDAzZWV2ZW50IFx1MDAyNiBSVlVfRVZFTlRfUEZWRl9TVEFURSlcbitcdFx0cGYgPSBydnVfZ2V0X3BmKHJ2dS1cdTAwM2VwZGV2LCBldmVudC1cdTAwM2VoZHIucGNpZnVuYyk7XG4gXHRtdXRleF9sb2NrKFx1MDAyNnJ2dS1cdTAwM2VtYm94X2xvY2spO1xuIFx0bXNnID0gb3R4Ml9tYm94X2FsbG9jX21zZ19yZXBfZXZlbnRfdXBfbm90aWZ5KHJ2dSwgcGYpO1xuIFx0aWYgKCFtc2cpIHtcbkBAIC01Myw2ICs1NSwxMCBAQCBzdGF0aWMgaW50IHJ2dV9yZXBfdXBfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqZXZlbnQpXG4gXG4gXHRtc2ctXHUwMDNlaGRyLnBjaWZ1bmMgPSBldmVudC1cdTAwM2VwY2lmdW5jO1xuIFx0bXNnLVx1MDAzZWV2ZW50ID0gZXZlbnQtXHUwMDNlZXZlbnQ7XG4rXHRtc2ctXHUwMDNlcGNpZnVuYyA9IGV2ZW50LVx1MDAzZXBjaWZ1bmM7XG4rXG4rXHRpZiAoZXZlbnQtXHUwMDNlZXZlbnQgXHUwMDI2IFJWVV9FVkVOVF9QRlZGX1NUQVRFKVxuK1x0XHRtc2ctXHUwMDNlaGRyLnBjaWZ1bmMgPSBldmVudC1cdTAwM2VoZHIucGNpZnVuYztcbiBcbiBcdG1lbWNweShcdTAwMjZtc2ctXHUwMDNlZXZ0X2RhdGEsIFx1MDAyNmV2ZW50LVx1MDAzZWV2dF9kYXRhLCBzaXplb2Yoc3RydWN0IHJlcF9ldnRfZGF0YSkpO1xuIFxuQEAgLTk1LDggKzEwMSwxNyBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3dxX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbXNnX3JzcCAqcnNwKVxuIHtcbitcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTtcbiBcdHN0cnVjdCByZXBfZXZ0cV9lbnQgKnFlbnRyeTtcbiBcbitcdHdxID0gUkVBRF9PTkNFKHJ2dS1cdTAwM2VyZXBfZXZ0X3dxKTtcbitcdGlmICghd3EpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0LyogT25seSB0aGUgcmVnaXN0ZXJlZCByZXByZXNlbnRvciBQRiBtYXkgc2VuZCBSRVBfRVZFTlRfTk9USUZZLiAqL1xuK1x0aWYgKHJlcS1cdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4gXHQvKiBUaGUgbWFpbGJveCBkaXNwYXRjaGVyIG5vcm1hbGlzZXMgb25seSB0aGUgaGVhZGVyIHBjaWZ1bmM7IHRoZVxuIFx0ICogbmVzdGVkIHN0cnVjdCByZXBfZXZlbnQ6OnBjaWZ1bmMgYm9keSBmaWVsZCBpcyBzZW5kZXItY29udHJvbGxlZFxuIFx0ICogYW5kIGlzIGxhdGVyIHVzZWQgYnkgcnZ1X3JlcF91cF9ub3RpZnkoKSB0byBpbmRleCBydnUtXHUwMDNlcGZbXSAvXG5AQCAtMTA1LDYgKzEyMCwxNCBAQCBpbnQgcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHN0cnVjdCBydnUgKnJ2dSwgc3RydWN0IHJlcF9ldmVudCAqcmVxLFxuIFx0aWYgKCFpc19wZl9mdW5jX3ZhbGlkKHJ2dSwgcmVxLVx1MDAzZXBjaWZ1bmMpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbitcdC8qIE9ubHkgQ0dYLW1hcHBlZCBQRnMgYXJlIHByZXNlbnQgaW4gdGhlIHJlcHJlc2VudG9yIG1hcC4gKi9cbitcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcnZ1X2dldF9wZihydnUtXHUwMDNlcGRldiwgcmVxLVx1MDAzZXBjaWZ1bmMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoKHJlcS1cdTAwM2VldmVudCBcdTAwMjYgUlZVX0VWRU5UX1BGVkZfU1RBVEUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJ2dV9nZXRfcGYocnZ1LVx1MDAzZXBkZXYsIHJlcS1cdTAwM2VoZHIucGNpZnVuYykgXHUwMDNlPSBydnUtXHUwMDNlaHctXHUwMDNldG90YWxfcGZzKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCFxZW50cnkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTExMywzNyArMTM2LDIzIEBAIGludCBydnVfbWJveF9oYW5kbGVyX3JlcF9ldmVudF9ub3RpZnkoc3RydWN0IHJ2dSAqcnZ1LCBzdHJ1Y3QgcmVwX2V2ZW50ICpyZXEsXG4gXHRzcGluX2xvY2soXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZxZW50cnktXHUwMDNlbm9kZSwgXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2hlYWQpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuLVx0cXVldWVfd29yayhydnUtXHUwMDNlcmVwX2V2dF93cSwgXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRfd29yayk7XG4rXHRxdWV1ZV93b3JrKHdxLCBcdTAwMjZydnUtXHUwMDNlcmVwX2V2dF93b3JrKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBpbnQgcnZ1X3JlcF9ub3RpZnlfcGZ2Zl9zdGF0ZShzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcbiB7XG4tXHRzdHJ1Y3QgcmVwX2V2ZW50ICpyZXE7XG4tXHRpbnQgcGY7XG4rXHRzdHJ1Y3QgcmVwX2V2ZW50IHJlcSA9IHsgMCB9O1xuK1x0c3RydWN0IG1zZ19yc3AgcnNwO1xuIFxuIFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBydnVfZ2V0X3BmKHJ2dS1cdTAwM2VwZGV2LCBwY2lmdW5jKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0cGYgPSBydnVfZ2V0X3BmKHJ2dS1cdTAwM2VwZGV2LCBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbi1cdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfcmVwX2V2ZW50X3VwX25vdGlmeShydnUsIHBmKTtcbi1cdGlmICghcmVxKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4tXHRyZXEtXHUwMDNlaGRyLnBjaWZ1bmMgPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmM7XG4tXHRyZXEtXHUwMDNlZXZlbnQgfD0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XG4tXHRyZXEtXHUwMDNlcGNpZnVuYyA9IHBjaWZ1bmM7XG4tXHRyZXEtXHUwMDNlZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XG4tXG4tXHRvdHgyX21ib3hfd2FpdF9mb3JfemVybyhcdTAwMjZydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTtcbi1cdG90eDJfbWJveF9tc2dfc2VuZF91cChcdTAwMjZydnUtXHUwMDNlYWZwZl93cV9pbmZvLm1ib3hfdXAsIHBmKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZydnUtXHUwMDNlbWJveF9sb2NrKTtcbi1cdHJldHVybiAwO1xuK1x0cmVxLmhkci5wY2lmdW5jID0gcnZ1LVx1MDAzZXJlcF9wY2lmdW5jO1xuK1x0cmVxLmV2ZW50ID0gUlZVX0VWRU5UX1BGVkZfU1RBVEU7XG4rXHRyZXEucGNpZnVuYyA9IHBjaWZ1bmM7XG4rXHRyZXEuZXZ0X2RhdGEudmZfc3RhdGUgPSBlbmFibGU7XG4rXHRyZXR1cm4gcnZ1X21ib3hfaGFuZGxlcl9yZXBfZXZlbnRfbm90aWZ5KHJ2dSwgXHUwMDI2cmVxLCBcdTAwMjZyc3ApO1xuIH1cbiBcbiAjZGVmaW5lIFJWVV9MRl9SWF9TVEFUUyhyZWcpIFxcXG5AQCAtMzI1LDYgKzMzNCw3IEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHR1MTYgc3RhcnQgPSByc3dpdGNoLVx1MDAzZXN0YXJ0X2VudHJ5O1xuIFx0c3RydWN0IHJ2dV9od2luZm8gKmh3ID0gcnZ1LVx1MDAzZWh3O1xuIFx0dTE2IHBjaWZ1bmMsIGVudHJ5ID0gMDtcbitcdHN0cnVjdCBydnVfcGZ2ZiAqcGZ2ZjtcbiBcdGludCBwZiwgdmYsIG51bXZmcztcbiBcdGludCBlcnIsIG5peGxmLCBpO1xuIFx0dTggcmVwO1xuQEAgLTMzNCwxOSArMzQ0LDIyIEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4rXHRcdHBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcbiBcdFx0cnZ1X2dldF9uaXhfYmxrYWRkcihydnUsIHBjaWZ1bmMpO1xuK1x0XHRpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsIFx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgdHJ1ZSk7XG4gXHRcdHJlcCA9IHRydWU7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDI7IGkrKykge1xuIFx0XHRcdGVyciA9IHJ2dV9yZXBfaW5zdGFsbF9yeF9ydWxlKHJ2dSwgcGNpZnVuYyxcbiBcdFx0XHRcdFx0XHQgICAgICBzdGFydCArIGVudHJ5LCByZXApO1xuIFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0Z290byBlcnJfZGlzYWJsZV9sYms7XG4gXHRcdFx0cnN3aXRjaC1cdTAwM2VlbnRyeTJwY2lmdW5jW2VudHJ5KytdID0gcGNpZnVuYztcbiBcbiBcdFx0XHRlcnIgPSBydnVfcmVwX2luc3RhbGxfdHhfcnVsZShydnUsIHBjaWZ1bmMsXG4gXHRcdFx0XHRcdFx0ICAgICAgc3RhcnQgKyBlbnRyeSwgcmVwKTtcbiBcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbGJrO1xuIFx0XHRcdHJzd2l0Y2gtXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XG4gXHRcdFx0cmVwID0gZmFsc2U7XG4gXHRcdH1cbkBAIC0zNTQsOSArMzY3LDEyIEBAIGludCBydnVfcmVwX2luc3RhbGxfbWNhbV9ydWxlcyhzdHJ1Y3QgcnZ1ICpydnUpXG4gXHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4gXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzOyB2ZisrKSB7XG4gXHRcdFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xuK1x0XHRcdHBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcbitcdFx0XHRpZiAodGVzdF9iaXQoTklYTEZfSU5JVElBTElaRUQsIFx1MDAyNnBmdmYtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCB0cnVlKTtcbiBcdFx0XHRydnVfZ2V0X25peF9ibGthZGRyKHJ2dSwgcGNpZnVuYyk7XG4gXG4tXHRcdFx0LyogU2tpcCBpbnN0YWxsaW1nIHJ1bGVzIGlmIG5peGxmIGlzIG5vdCBhdHRhY2hlZCAqL1xuK1x0XHRcdC8qIFNraXAgaW5zdGFsbGluZyBydWxlcyBpZiBuaXhsZiBpcyBub3QgYXR0YWNoZWQgKi9cbiBcdFx0XHRlcnIgPSBuaXhfZ2V0X25peGxmKHJ2dSwgcGNpZnVuYywgXHUwMDI2bml4bGYsIE5VTEwpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zNjYsMzAgKzM4MiwzNyBAQCBpbnQgcnZ1X3JlcF9pbnN0YWxsX21jYW1fcnVsZXMoc3RydWN0IHJ2dSAqcnZ1KVxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc3RhcnQgKyBlbnRyeSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgIHJlcCk7XG4gXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9kaXNhYmxlX2xiaztcbiBcdFx0XHRcdHJzd2l0Y2gtXHUwMDNlZW50cnkycGNpZnVuY1tlbnRyeSsrXSA9IHBjaWZ1bmM7XG4gXG4gXHRcdFx0XHRlcnIgPSBydnVfcmVwX2luc3RhbGxfdHhfcnVsZShydnUsIHBjaWZ1bmMsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzdGFydCArIGVudHJ5LFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgcmVwKTtcbiBcdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdFx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbGJrO1xuIFx0XHRcdFx0cnN3aXRjaC1cdTAwM2VlbnRyeTJwY2lmdW5jW2VudHJ5KytdID0gcGNpZnVuYztcbiBcdFx0XHRcdHJlcCA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIDA7XG4gXG4tXHQvKiBJbml0aWFsaXplIHRoZSB3cSBmb3IgaGFuZGxpbmcgUkVQIGV2ZW50cyAqL1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2hlYWQpO1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0X3dvcmssIHJ2dV9yZXBfd3FfaGFuZGxlcik7XG4tXHRydnUtXHUwMDNlcmVwX2V2dF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJlcF9ldnRfd3FcIiwgV1FfUEVSQ1BVLCAwKTtcbi1cdGlmICghcnZ1LVx1MDAzZXJlcF9ldnRfd3EpIHtcbi1cdFx0ZGV2X2VycihydnUtXHUwMDNlZGV2LCBcIlJFUCB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlsZWRcXG5cIik7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK2Vycl9kaXNhYmxlX2xiazpcbitcdC8qIFVuZG8gYW55IExCSyBsaW5rcyBlbmFibGVkIGFib3ZlIGJlZm9yZSB0aGUgTUNBTSBydWxlIGZhaWx1cmUuXG4rXHQgKiBEaXNhYmxpbmcgYSBsaW5rIHRoYXQgd2FzIG5ldmVyIGVuYWJsZWQgaXMgYSBzYWZlIG5vLW9wLlxuK1x0ICovXG4rXHRmb3IgKHBmID0gMTsgcGYgXHUwMDNjIGh3LVx1MDAzZXRvdGFsX3BmczsgcGYrKykge1xuK1x0XHRpZiAoIWlzX3BmX2NneG1hcHBlZChydnUsIHBmKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVx1MDAzZXBkZXYsIHBmLCAwKTtcbitcdFx0cnZ1X3N3aXRjaF9lbmFibGVfbGJrX2xpbmsocnZ1LCBwY2lmdW5jLCBmYWxzZSk7XG4rXHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4rXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzOyB2ZisrKSB7XG4rXHRcdFx0cGNpZnVuYyA9IHJ2dV9tYWtlX3BjaWZ1bmMocnZ1LVx1MDAzZXBkZXYsIHBmLCB2ZiArIDEpO1xuK1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuK1x0XHR9XG4gXHR9XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgcnZ1X3JlcF91cGRhdGVfcnVsZXMoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYywgYm9vbCBlbmEpXG5AQCAtNDQzLDM1ICs0NjYsOTIgQEAgaW50IHJ2dV9tYm94X2hhbmRsZXJfZXN3X2NmZyhzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBlc3dfY2ZnX3JlcSAqcmVxLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcnZ1X3JlcF9nZXRfcmVwX21hcChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBnZXRfcmVwX2NudF9yc3AgKnJzcClcbit7XG4rXHRpbnQgcmVwO1xuK1xuK1x0aWYgKHJlcS1cdTAwM2VoZHIucGNpZnVuYyAhPSBydnUtXHUwMDNlcmVwX3BjaWZ1bmMpXG4rXHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRyc3AtXHUwMDNlcmVwX2NudCA9IHJ2dS1cdTAwM2VyZXBfY250O1xuK1x0Zm9yIChyZXAgPSAwOyByZXAgXHUwMDNjIHJ2dS1cdTAwM2VyZXBfY250OyByZXArKylcbitcdFx0cnNwLVx1MDAzZXJlcF9wZl9tYXBbcmVwXSA9IHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgcnZ1X21ib3hfaGFuZGxlcl9nZXRfcmVwX2NudChzdHJ1Y3QgcnZ1ICpydnUsIHN0cnVjdCBtc2dfcmVxICpyZXEsXG4gXHRcdFx0XHQgc3RydWN0IGdldF9yZXBfY250X3JzcCAqcnNwKVxuIHtcbi1cdGludCBwZiwgdmYsIG51bXZmcywgaHd2ZiwgcmVwID0gMDtcbitcdGludCBwZiwgdmYsIG51bXZmcywgaHd2ZiwgcmVwID0gMCwgY250O1xuK1x0aW50IHJldCA9IDA7XG4gXHR1MTYgcGNpZnVuYztcbitcdHUxNiAqbWFwO1xuK1xuK1x0LyogU2VyaWFsaXplIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24uIG1ib3hfd3EgaXMgV1FfUEVSQ1BVIHNvXG4rXHQgKiBoYW5kbGVycyBmb3IgZGlmZmVyZW50IFBGcyBjYW4gcnVuIGNvbmN1cnJlbnRseTsgd2l0aG91dCB0aGlzXG4rXHQgKiBsb2NrIHR3byBjYWxsZXJzIGNvdWxkIGJvdGggb2JzZXJ2ZSByZXAycGZ2Zl9tYXAgPT0gTlVMTCBhbmRcbitcdCAqIGRvdWJsZS1hbGxvY2F0ZSB0aGUgd29ya3F1ZXVlLCBsZWFraW5nIG9uZSBwZXJtYW5lbnRseS5cbitcdCAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbitcbitcdGlmIChydnUtXHUwMDNlcmVwMnBmdmZfbWFwKSB7XG4rXHRcdHJldCA9IHJ2dV9yZXBfZ2V0X3JlcF9tYXAocnZ1LCByZXEsIHJzcCk7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuIFxuIFx0cnZ1LVx1MDAzZXJlcF9wY2lmdW5jID0gcmVxLVx1MDAzZWhkci5wY2lmdW5jO1xuLVx0cnNwLVx1MDAzZXJlcF9jbnQgPSBydnUtXHUwMDNlY2d4X21hcHBlZF9wZnMgKyBydnUtXHUwMDNlY2d4X21hcHBlZF92ZnM7XG4tXHRydnUtXHUwMDNlcmVwX2NudCA9IHJzcC1cdTAwM2VyZXBfY250O1xuK1x0Y250ID0gbWluX3QoaW50LCBydnUtXHUwMDNlY2d4X21hcHBlZF9wZnMgKyBydnUtXHUwMDNlY2d4X21hcHBlZF92ZnMsXG4rXHRcdCAgICBSVlVfTUFYX1JFUCk7XG4gXG4tXHRydnUtXHUwMDNlcmVwMnBmdmZfbWFwID0gZGV2bV9remFsbG9jKHJ2dS1cdTAwM2VkZXYsIHJ2dS1cdTAwM2VyZXBfY250ICpcbi1cdFx0XHRcdFx0IHNpemVvZih1MTYpLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghcnZ1LVx1MDAzZXJlcDJwZnZmX21hcClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHQvKiBBbGxvY2F0ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCBzbyB0aGUgcG9pbnRlciBpcyBhbHdheXMgbm9uLU5VTExcbitcdCAqIG9uY2UgcHVibGlzaGVkLCBrZWVwaW5nIHRoZSBmYXN0LXBhdGggY2hlY2sgYWJvdmUgcmVsaWFibGUuXG4rXHQgKi9cbitcdG1hcCA9IGRldm1fa3phbGxvYyhydnUtXHUwMDNlZGV2LCAoY250ID86IDEpICogc2l6ZW9mKHUxNiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFtYXApIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXG4gXHRmb3IgKHBmID0gMDsgcGYgXHUwMDNjIHJ2dS1cdTAwM2Vody1cdTAwM2V0b3RhbF9wZnM7IHBmKyspIHtcbiBcdFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpXG4gXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChyZXAgXHUwMDNlPSBjbnQpXG4rXHRcdFx0YnJlYWs7XG4gXHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgMCk7XG4tXHRcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmM7XG4rXHRcdG1hcFtyZXBdID0gcGNpZnVuYztcbiBcdFx0cnNwLVx1MDAzZXJlcF9wZl9tYXBbcmVwXSA9IHBjaWZ1bmM7XG4gXHRcdHJlcCsrO1xuIFx0XHRydnVfZ2V0X3BmX251bXZmcyhydnUsIHBmLCBcdTAwMjZudW12ZnMsIFx1MDAyNmh3dmYpO1xuLVx0XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIG51bXZmczsgdmYrKykge1xuLVx0XHRcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXBbcmVwXSA9IHBjaWZ1bmMgfFxuLVx0XHRcdFx0KCh2ZiArIDEpIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spO1xuLVx0XHRcdHJzcC1cdTAwM2VyZXBfcGZfbWFwW3JlcF0gPSBydnUtXHUwMDNlcmVwMnBmdmZfbWFwW3JlcF07XG4rXHRcdGZvciAodmYgPSAwOyB2ZiBcdTAwM2MgbnVtdmZzIFx1MDAyNlx1MDAyNiByZXAgXHUwMDNjIGNudDsgdmYrKykge1xuK1x0XHRcdG1hcFtyZXBdID0gcGNpZnVuYyB8ICgodmYgKyAxKSBcdTAwMjYgUlZVX1BGVkZfRlVOQ19NQVNLKTtcbitcdFx0XHRyc3AtXHUwMDNlcmVwX3BmX21hcFtyZXBdID0gbWFwW3JlcF07XG4gXHRcdFx0cmVwKys7XG4gXHRcdH1cbiBcdH1cbi1cdHJldHVybiAwO1xuK1xuK1x0aWYgKCFjbnQpIHtcbitcdFx0cnZ1LVx1MDAzZXJlcDJwZnZmX21hcCA9IG1hcDtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHQvKiBJbml0aWFsaXplIHRoZSB3cSBmb3IgaGFuZGxpbmcgUkVQIGV2ZW50cyAqL1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2xvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cnZ1LVx1MDAzZXJlcF9ldnRxX2hlYWQpO1xuK1x0SU5JVF9XT1JLKFx1MDAyNnJ2dS1cdTAwM2VyZXBfZXZ0X3dvcmssIHJ2dV9yZXBfd3FfaGFuZGxlcik7XG4rXHRydnUtXHUwMDNlcmVwX2V2dF93cSA9IGFsbG9jX3dvcmtxdWV1ZShcInJlcF9ldnRfd3FcIiwgV1FfVU5CT1VORCwgMCk7XG4rXHRpZiAoIXJ2dS1cdTAwM2VyZXBfZXZ0X3dxKSB7XG4rXHRcdGRldl9lcnIocnZ1LVx1MDAzZWRldiwgXCJSRVAgd29ya3F1ZXVlIGFsbG9jYXRpb24gZmFpbGVkXFxuXCIpO1xuK1x0XHRkZXZtX2tmcmVlKHJ2dS1cdTAwM2VkZXYsIG1hcCk7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0cnZ1LVx1MDAzZXJlcF9jbnQgPSBjbnQ7XG4rXHRyc3AtXHUwMDNlcmVwX2NudCA9IGNudDtcbitcdHJ2dS1cdTAwM2VyZXAycGZ2Zl9tYXAgPSBtYXA7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ2dS1cdTAwM2Vyc3JjX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG5pbmRleCA0OWNlMzg2ODVhN2U2Li44YzJjOTg0MDM1MDc0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X3N3aXRjaC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfc3dpdGNoLmNcbkBAIC0xMiwxMSArMTIsMTggQEAgdm9pZCBydnVfc3dpdGNoX2VuYWJsZV9sYmtfbGluayhzdHJ1Y3QgcnZ1ICpydnUsIHUxNiBwY2lmdW5jLCBib29sIGVuYWJsZSlcbiB7XG4gXHRzdHJ1Y3QgcnZ1X3BmdmYgKnBmdmYgPSBydnVfZ2V0X3BmdmYocnZ1LCBwY2lmdW5jKTtcbiBcdHN0cnVjdCBuaXhfaHcgKm5peF9odztcbitcdGludCBibGthZGRyO1xuIFxuLVx0bml4X2h3ID0gZ2V0X25peF9odyhydnUtXHUwMDNlaHcsIHBmdmYtXHUwMDNlbml4X2Jsa2FkZHIpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZydnUtXHUwMDNlcnNyY19sb2NrKTtcbitcdGJsa2FkZHIgPSBwZnZmLVx1MDAzZW5peF9ibGthZGRyO1xuK1x0bml4X2h3ID0gZ2V0X25peF9odyhydnUtXHUwMDNlaHcsIGJsa2FkZHIpO1xuIFx0LyogRW5hYmxlIExCSyBsaW5rcyB3aXRoIGNoYW5uZWwgNjMgZm9yIFRYIE1DQU0gcnVsZSAqL1xuLVx0cnZ1X25peF90eF90bDJfY2ZnKHJ2dSwgcGZ2Zi1cdTAwM2VuaXhfYmxrYWRkciwgcGNpZnVuYyxcbitcdGlmICghbml4X2h3KVxuK1x0XHRnb3RvIHVubG9jaztcbitcdHJ2dV9uaXhfdHhfdGwyX2NmZyhydnUsIGJsa2FkZHIsIHBjaWZ1bmMsXG4gXHRcdFx0ICAgXHUwMDI2bml4X2h3LVx1MDAzZXR4c2NoW05JWF9UWFNDSF9MVkxfVEwyXSwgZW5hYmxlKTtcbit1bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cnZ1LVx1MDAzZXJzcmNfbG9jayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnZ1X3N3aXRjaF9pbnN0YWxsX3J4X3J1bGUoc3RydWN0IHJ2dSAqcnZ1LCB1MTYgcGNpZnVuYyxcbkBAIC0yMjksOCArMjM2LDIwIEBAIHZvaWQgcnZ1X3N3aXRjaF9kaXNhYmxlKHN0cnVjdCBydnUgKnJ2dSlcbiBcdGlmICghcnN3aXRjaC1cdTAwM2V1c2VkX2VudHJpZXMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmIChydnUtXHUwMDNlcmVwX21vZGUpXG4rXHRpZiAocnZ1LVx1MDAzZXJlcF9tb2RlKSB7XG4rXHRcdGZvciAocGYgPSAxOyBwZiBcdTAwM2MgaHctXHUwMDNldG90YWxfcGZzOyBwZisrKSB7XG4rXHRcdFx0aWYgKCFpc19wZl9jZ3htYXBwZWQocnZ1LCBwZikpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRwY2lmdW5jID0gcnZ1X21ha2VfcGNpZnVuYyhydnUtXHUwMDNlcGRldiwgcGYsIDApO1xuK1x0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuK1x0XHRcdHJ2dV9nZXRfcGZfbnVtdmZzKHJ2dSwgcGYsIFx1MDAyNm51bXZmcywgTlVMTCk7XG4rXHRcdFx0Zm9yICh2ZiA9IDA7IHZmIFx1MDAzYyBudW12ZnM7IHZmKyspIHtcbitcdFx0XHRcdHBjaWZ1bmMgPSBydnVfbWFrZV9wY2lmdW5jKHJ2dS1cdTAwM2VwZGV2LCBwZiwgdmYgKyAxKTtcbitcdFx0XHRcdHJ2dV9zd2l0Y2hfZW5hYmxlX2xia19saW5rKHJ2dSwgcGNpZnVuYywgZmFsc2UpO1xuK1x0XHRcdH1cbitcdFx0fVxuIFx0XHRnb3RvIGZyZWVfZW50cztcbitcdH1cbiBcbiBcdGZvciAocGYgPSAxOyBwZiBcdTAwM2MgaHctXHUwMDNldG90YWxfcGZzOyBwZisrKSB7XG4gXHRcdGlmICghaXNfcGZfY2d4bWFwcGVkKHJ2dSwgcGYpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuaW5kZXggMGY1ZDU2NDJkM2Y3YS4uZWY0N2U3ZTIxOTAxNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jXG5AQCAtMzAxLDYgKzMwMSwxMiBAQCBzdGF0aWMgdm9pZCBydnVfcmVwX3N0YXRlX2V2dF9oYW5kbGVyKHN0cnVjdCBvdHgyX25pYyAqcHJpdixcbiBcdGludCByZXBfaWQ7XG4gXG4gXHRyZXBfaWQgPSBydnVfcmVwX2dldF9yZXBpZChwcml2LCBpbmZvLVx1MDAzZXBjaWZ1bmMpO1xuK1x0aWYgKHJlcF9pZCBcdTAwM2MgMCkge1xuK1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChwcml2LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICAgXCJSRVAgc3RhdGUgZXZlbnQgZm9yIHVua25vd24gcGNpZnVuYyAweCV4IChlcnIgJWQpXFxuXCIsXG4rXHRcdFx0XHQgICAgIGluZm8tXHUwMDNlcGNpZnVuYywgcmVwX2lkKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFx0cmVwID0gcHJpdi1cdTAwM2VyZXBzW3JlcF9pZF07XG4gXHRpZiAoaW5mby1cdTAwM2VldnRfZGF0YS52Zl9zdGF0ZSlcbiBcdFx0cmVwLVx1MDAzZWZsYWdzIHw9IFJWVV9SRVBfVkZfSU5JVElBTElaRUQ7XG5AQCAtNDU5LDYgKzQ2NSw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9jYXJyaWVyX29uKGRldik7XG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7XG4gXG4rXHRpZiAocmVwLVx1MDAzZXBjaWZ1bmMgXHUwMDI2IFJWVV9QRlZGX0ZVTkNfTUFTSylcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRldnQuZXZlbnQgPSBSVlVfRVZFTlRfUE9SVF9TVEFURTtcbiBcdGV2dC5ldnRfZGF0YS5wb3J0X3N0YXRlID0gMTtcbiBcdGV2dC5wY2lmdW5jID0gcmVwLVx1MDAzZXBjaWZ1bmM7XG5AQCAtNDc4LDYgKzQ4Nyw5IEBAIHN0YXRpYyBpbnQgcnZ1X3JlcF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuIFx0bmV0aWZfdHhfZGlzYWJsZShkZXYpO1xuIFxuK1x0aWYgKHJlcC1cdTAwM2VwY2lmdW5jIFx1MDAyNiBSVlVfUEZWRl9GVU5DX01BU0spXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0ZXZ0LmV2ZW50ID0gUlZVX0VWRU5UX1BPUlRfU1RBVEU7XG4gXHRldnQucGNpZnVuYyA9IHJlcC1cdTAwM2VwY2lmdW5jO1xuIFx0cnZ1X3JlcF9ub3RpZnlfcGZ2Zihwcml2LCBSVlVfRVZFTlRfUE9SVF9TVEFURSwgXHUwMDI2ZXZ0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbmluZGV4IDViYzllMmM3ZDgwMGIuLmI5OGZlMTkxZTgzYTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuaFxuQEAgLTE2LDcgKzE2LDYgQEBcbiBcbiAjZGVmaW5lIFBDSV9ERVZJRF9SVlVfUkVQXHQweEEwRTBcbiBcbi0jZGVmaW5lIFJWVV9NQVhfUkVQXHRPVFgyX01BWF9DUV9DTlRcbiBcbiBzdHJ1Y3QgcmVwX3N0YXRzIHtcbiBcdHU2NCByeF9ieXRlcztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjI5LjY3OTU0MDM4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MzYzNzM0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIFN5emthbGxlciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIHNlZWluZyBpZiB0aGlzIHBhdGNoIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdC5cblxuVGhlIG1vZGlmaWVkIGZpbGVzIGp1bXAgb3V0OiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWJveC5oYCwgYHJ2dS5jYCwgYHJ2dV9yZXAuY2AsIGBydnVfc3dpdGNoLmNgLCBgbmljL3JlcC5jYCwgYW5kIGBuaWMvcmVwLmhgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgT2N0ZW9uVFgyIEV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIHRoZSBNYXJ2ZWxsIGVjb3N5c3RlbS4gU28sIHRoZSBxdWVzdGlvbiBiZWNvbWVzLCBpcyB0aGlzIGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLCBvciBpcyB0aGVyZSBhbiBlbXVsYXRlZCBlbnZpcm9ubWVudD8gSXMgdGhpcyBhIFNtYXJ0TklDIG9yIGp1c3Qgc3RhbmRhcmQgbmV0d29yayBmdW5jdGlvbmFsaXR5P1xuXG5Ob3csIHRvIGFzc2VzcyBpdHMgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkLCBzb21ldGhpbmcgdmVuZG9yLXNwZWNpZmljIGxpa2UgYSBQQ0llIFNtYXJ0TklDLCBvciBzb21ldGhpbmcgZW11bGF0ZWQ/IE15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBzZWFyY2gsIG1heWJlIGBncmVwYCB0aGUgY29kZWJhc2UsIG9yIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGRldmljZSBpcyBhY2Nlc3NlZCBhbmQgY29uZmlndXJlZC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgZGVmaW5lIHRoZSBlYXNlIG9mIHNldHRpbmcgdXAgYW4gZW52aXJvbm1lbnQgdG8gZnV6eiB0aGlzIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NTMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDozNC4xMTU5MTYyMzRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4OTQ2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DVEVPTlRYMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTIyPWNvbmZpZyBORENfRElTX0RZTkFNSUNfQ0FDSElOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjMxOmNvbmZpZyBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjM0LjE2MTgxNjE5M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NzEyMjg5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBPY3Rlb24gVFgyIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIE1hcnZlbGwgT2N0ZW9uIFRYMiBFdGhlcm5ldCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBsaWVzLCBkZWZpbmluZyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMsIGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIHNwZWNpZmljIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGlzIGRyaXZlciBhbmQgdGFpbG9yIGl0IHRvIGEgcGFydGljdWxhciB1c2UgY2FzZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBzeW1ib2xzLCB0aGVpciBkZWZhdWx0cywgYW5kIGFueSBjb25zdHJhaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NjEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDozNi4xMzMwNDc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFydmVsbCBSVlUgTmV0d29yayBkcml2ZXJzIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE9DVEVPTlRYMl9NQk9YXFxuICAgNzpcXHRcXHR0cmlzdGF0ZVxcbiAgIDg6XFx0XFxuICAgOTpcXHRjb25maWcgT0NURU9OVFgyX0FGXFxuICAxMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgUlZVIEFkbWluIEZ1bmN0aW9uIGRyaXZlclxcXCJcXG4gIDExOlxcdFxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTU6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMTY6XFx0XFx0aGVscFxcbiAgMTc6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNYXJ2ZWxsJ3MgT2N0ZW9uVFgyIFJlc291cmNlIFZpcnR1YWxpemF0aW9uXFxuICAxODpcXHRcXHQgIFVuaXQncyBhZG1pbiBmdW5jdGlvbiBtYW5hZ2VyIHdoaWNoIG1hbmFnZXMgYWxsIFJWVSBIVyByZXNvdXJjZXNcXG4gIDE5OlxcdFxcdCAgYW5kIHByb3ZpZGVzIGEgbWVkaXVtIHRvIG90aGVyIFBGL1ZGcyB0byBjb25maWd1cmUgSFcuIFNob3VsZCBiZVxcbiAgMjA6XFx0XFx0ICBlbmFibGVkIGZvciBvdGhlciBSVlUgZGV2aWNlIGRyaXZlcnMgdG8gd29yay5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIE5EQ19ESVNfRFlOQU1JQ19DQUNISU5HXFxuICAyMzpcXHRcXHRib29sIFxcXCJEaXNhYmxlIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIGluIE5EQ1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX0FGXFxuICAyNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgVGhpcyBjb25maWcgb3B0aW9uIGRpc2FibGVzIGNhY2hpbmcgb2YgZHluYW1pYyBlbnRyaWVzIHN1Y2ggYXMgTklYIFNRRXNcXG4gIDI4OlxcdFxcdCAgLCBOUEEgc3RhY2sgcGFnZXMgZXRjIGluIE5EQy4gQWxzbyBsb2NrcyBkb3duIE5JWCBTUS9DUS9SUS9SU1MgYW5kXFxuICAyOTpcXHRcXHQgIE5QQSBBdXJhL1Bvb2wgY29udGV4dHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBPQ1RFT05UWDJfUEZcXG4gIDMyOlxcdFxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbiAgMzM6XFx0XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDM1OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDM2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFUyBpZiBNQUNTRUNcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gKDY0QklUIFxcdTAwMjZcXHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcXG4gIDM4OlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICA0MTpcXHRcXHRkZXBlbmRzIG9uIE1BQ1NFQyB8fCAhTUFDU0VDXFxuICA0MjpcXHRcXHRoZWxwXFxuICA0MzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwncyBPY3Rlb25UWDIgTklDIHBoeXNpY2FsIGZ1bmN0aW9uLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRjb25maWcgT0NURU9OVFgyX1ZGXFxuICA0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG4gIDQ4OlxcdFxcdGhlbHBcXG4gIDQ5OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIE9jdGVvblRYMiBOSUMgdmlydHVhbCBmdW5jdGlvbi5cXG4gIDUwOlxcdFxcbiAgNTE6XFx0Y29uZmlnIFJWVV9FU1dJVENIXFxuICA1MjpcXHRcXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFxcXCJcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuICA1NDpcXHRcXHRkZWZhdWx0IG1cXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCdzIFJWVSBFLVN3aXRjaCB0aGF0XFxuICA1NzpcXHRcXHQgIHByb3ZpZGVzIGludGVybmFsIFNSSU9WIHBhY2tldCBzdGVlcmluZyBhbmQgc3dpdGNoaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDozNi4xMzMxOTUwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMTk3OTc0NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUcmlhZ2UgQ3JpdGVyaWEgYW5kIE9jdGVvblRYMiBDb21wYXRpYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBmYWxscyB1bmRlciBvdXIgc3RhbmRhcmQgdHJpYWdlIGd1aWRlbGluZXMsIHNwZWNpZmljYWxseSB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIFNlY3Rpb24gMiBoaWdobGlnaHRzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFdlJ3JlIGxvb2tpbmcgYXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCAqcmVxdWlyZSogc3BlY2lmaWMgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGlzIGlzIGEgY3J1Y2lhbCBwb2ludC5cblxuTm93LCBsZXQncyBmb2N1cyBvbiB0aGUgT2N0ZW9uVFgyLiBJdCdzIE1hcnZlbGwncyBBUk02NCBTb0MsIGEgbmV0d29yayBwcm9jZXNzb3IsIGVzc2VudGlhbGx5IGEgU21hcnROSUMgd2l0aCBpdHMgUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCAoUlZVKSBBZG1pbiBGdW5jdGlvbiBhbmQgUGh5c2ljYWwgRnVuY3Rpb24uIEFscmlnaHQsIGltcG9ydGFudCBub3RlcyBoZXJlLiBUaGVyZSBhcmUgZGVwZW5kZW5jeSBjaGVja3M6IGl0IHJlbGllcyBvbiBib3RoIDY0LWJpdCBhcmNoaXRlY3R1cmUgd2l0aCBhIGNvbXBpbGUgdGVzdCwgKm9yKiBqdXN0IHRoZSBBUk02NCBhcmNoaXRlY3R1cmUsIGFuZCAqYWxzbyogcmVxdWlyZXMgUENJIHN1cHBvcnQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgT2N0ZW9uVFgyICppcyogYSBwaHlzaWNhbCBQQ0kgb3IgU29DIGRldmljZS4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtLiBJZiBpdCBpcywgdGhlbiB0aGUgbmVnYXRpdmUgY3JpdGVyaWEgY291bGQgY29tZSBpbnRvIHBsYXkuXG5cbkkgbmVlZCB0byBkaWcgaW50byB0aGUgcHJvYmluZyByb3V0aW5lcyDigJMgYHJ2dV9wcm9iZWAgYW5kIGBvdHgyX3Byb2JlYC4gVGhlc2Ugd2lsbCB0ZWxsIHVzIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgYW5kIHdoZXRoZXIgaXTigJlzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgcGh5c2ljYWwgZGV2aWNlIGluIGEgd2F5IHRoYXTigJlzIGluY29tcGF0aWJsZSB3aXRoIG91ciBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGlzIHdpbGwgY29uZmlybSBpZiBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgT2N0ZW9uVFgyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTUxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjQxLjQ1Mjk5NTU0MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk2OTgwOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjQxLjQ5Nzk3MDIyMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjAwODczMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIE9jdGVvbiBUWDIgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBwY2lfcmVnaXN0ZXJfZHJpdmVyYCBjYWxsLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBPY3Rlb24gVFgyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciByZWdpc3RyYXRpb24gaXMgaGFuZGxlZCBvbiB0aGlzIHBsYXRmb3JtLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBudWFuY2VzIG9yIHF1aXJrcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yIGludGVycnVwdCBoYW5kbGluZy4gQXJlIHRoZXJlIGFueSBjdXN0b20gaG9va3Mgb3Igb3ZlcnJpZGVzIGluIHBsYWNlIGNvbXBhcmVkIHRvIGEgbW9yZSBnZW5lcmljIFBDSSBkcml2ZXIgcmVnaXN0cmF0aW9uPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5J3JlIG1hbmFnaW5nIGRldmljZSBJRCBtYXRjaGluZyBhbmQgcHJvYmUgcm91dGluZXMgd2l0aGluIHRoZSBPY3Rlb24gZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgY2hpcCdzIGludGVybmFsIHJlZ2lzdGVycyB0byBzZWUgaG93IHRoYXQncyBoYW5kbGVkLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgaW50byB0aGUgT2N0ZW9uIFRYMidzIHN5c3RlbS1vbi1jaGlwIGZyYW1ld29yay4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcywgb3IgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHRoYXQgbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwOTQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDo0My43NTgwNjAwNTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk5OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9Mzc2NT1zdGF0aWMgaW50IF9faW5pdCBydnVfaW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc3MTpcXHRlcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZjZ3hfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzcyLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNzc1OlxcdGVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnB0cF9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3NzYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy0zNzc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjM3Nzk6XFx0ZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2bWNzX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4MC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM3ODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6Mzc4MzpcXHRlcnIgPSAgcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2cnZ1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzc4NC1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzU4MT1zdGF0aWMgaW50IF9faW5pdCBvdHgyX3J2dXBmX2luaXRfbW9kdWxlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1ODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTg1OlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZvdHgyX3BmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTg2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9ODY5PXN0YXRpYyBpbnQgX19pbml0IG90eDJ2Zl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYy04NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYzo4NzM6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNm90eDJ2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtODc0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz04ODE9c3RhdGljIGludCBfX2luaXQgcnZ1X3JlcF9pbml0X21vZHVsZSh2b2lkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy04ODIte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYzo4ODM6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnJ2dV9yZXBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtODg0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6NDMuODA0MDY1NTUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDA3MjEzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipQQ0kgSUQgVmVyaWZpY2F0aW9uIGZvciBPY3Rlb24gVFgyIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcyBkcml2ZXIgd29yayBmb3IgdGhlIE9jdGVvbiBUWDIuIEZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIEkgZXZlbiAqdGhpbmsqIGFib3V0IGRpdmluZyBpbnRvIHRoZSBjb2RlLCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBmdW5kYW1lbnRhbCDigJMgdGhlIFBDSSBJRHMuIEkgaGF2ZSB0byBtYWtlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IHRoZXNlIGRyaXZlcnMgYXJlIHRhcmdldGluZyB0aGUgY29ycmVjdCBkZXZpY2VzLiBBIG1pc2lkZW50aWZpY2F0aW9uIGhlcmUsIGV2ZW4gYXQgdGhpcyBlYXJseSBzdGFnZSwgY291bGQgbGVhZCB0byBhIG1hc3NpdmUgaGVhZGFjaGUgZG93biB0aGUgbGluZSwgcG90ZW50aWFsbHkgY2F1c2luZyBtYWpvciBzeXN0ZW0gaW5zdGFiaWxpdHkgb3IsIGV2ZW4gd29yc2UsIGJyaWNraW5nIHNvbWUgaGFyZHdhcmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBQQ0kgaWRlbnRpZmllcnMgYXJlIGNvcnJlY3Qgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkcml2ZXJzLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgY29kZSBtZXRpY3Vsb3VzbHkgdG8gY29uZmlybSB0aGF0IHRoZSBkcml2ZXIgY29uZmlndXJhdGlvbiBpcyB1c2luZyB0aGUgcmlnaHQgUENJIHZlbmRvciBhbmQgZGV2aWNlIElEcyBmb3IgdGhlIE9jdGVvbiBUWDIuIEl04oCZcyBhIGNydWNpYWwgZmlyc3Qgc3RlcDsgYmV0dGVyIHRvIGJlIHBhcmFub2lkIG5vdyBhbmQgcHJldmVudCBwb3RlbnRpYWwgZGlzYXN0cm91cyBvdXRjb21lIHRoYW4gdG8gcmVncmV0IGxhdGVyLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgbWV0aWN1bG91c2x5LCBubyByb29tIGZvciBlcnJvci4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjQ2LjUwNDc4OTcyN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwNTU5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX2RldmljZV9pZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Mz1zdGF0aWMgaW50IGNneF9md2lfbGlua19jaGFuZ2Uoc3RydWN0IGNneCAqY2d4LCBpbnQgbG1hY19pZCwgYm9vbCBlbik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02NS0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02Ny1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM9MTkxNj1zdGF0aWMgc3RydWN0IG1hY19vcHNcXHRjZ3hfbWFjX29wcyAgICA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTE5NTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6MTk1MTpzdGF0aWMgaW50IGNneF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTE5NTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmM6MjA6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1jc19pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21jcy5jLTIxLVxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX01DUykgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL21jcy5jPTE0OTc9c3RhdGljIHN0cnVjdCBtY3Nfb3BzIGNuMTBrYl9tY3Nfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTUwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9tY3MuYzoxNTA3OnN0YXRpYyBpbnQgbWNzX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvbWNzLmMtMTUwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz03Nz1zdGF0aWMgc3RydWN0IHB0cCAqZmlyc3RfcHRwX2Jsb2NrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjc4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy03OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jPTUxNz1zdGF0aWMgaW50IHB0cF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1MTg6XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTUxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYz01NzE9c3RhdGljIHZvaWQgcHRwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU4OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHB0cF9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5MC1cXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQxPXN0YXRpYyBpcnFyZXR1cm5fdCBydnVfbWJveF9pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcnZ1X2lycSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy00My0vKiBTdXBwb3J0ZWQgZGV2aWNlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjQ0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy00NS1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9MzU0NT1zdGF0aWMgYXRvbWljX3QgZGV2aWNlX2JvdW5kID0gQVRPTUlDX0lOSVQoMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzU0Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNTQ3OnN0YXRpYyBpbnQgcnZ1X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzU0OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1LS8qIFN1cHBvcnRlZCBkZXZpY2VzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNjpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml9wZl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzctXFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzE1Mj1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTMxNTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozMTU0OnN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzE1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjI6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTIzLVxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9NTUxPXN0YXRpYyBpbnQgb3R4MnZmX3JlYWxsb2NfbXNpeF92ZWN0b3JzKHN0cnVjdCBvdHgyX25pYyAqdmYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jLTU3MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjU3MTpzdGF0aWMgaW50IG90eDJ2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtNTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6MjI6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9yZXBfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtMjMtXFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfUlZVX1JFUCkgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz03NDU9c3RhdGljIGludCBydnVfZ2V0X3JlcF9jbnQoc3RydWN0IG90eDJfbmljICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3JlcC5jLTc3OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6NzgwOnN0YXRpYyBpbnQgcnZ1X3JlcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy03ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowNDo0Ni41NDk4NTA3NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTk1MzUyNzM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmUqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBhdCB0aGlzIHBhdGNoIGFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLCBJIHRoaW5rIHdlIGhhdmUgYSBkZWZpbml0aXZlIGFuc3dlci4gVGhlc2UgY2hhbmdlcyBhcmUgYWxsIGRlZXBseSB0aWVkIHRvIHRoZSBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBjb21wb25lbnQsIHJlcHJlc2VudGVkIGJ5IGRyaXZlcnMgbGlrZSBgcnZ1LmNgLCBgcnZ1X3JlcC5jYCwgYW5kIG90aGVycyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9gIGRpcmVjdG9yeS4gVGhlc2UgYXJlICphbGwqIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzIChDYXZpdW0vTWFydmVsbCkgZm9yIE9jdGVvblRYMiBQQ0kgZGV2aWNlcyDigJMgd2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgUENJX1ZFTkRPUl9JRF9DQVZJVU1gLCBhbmQgZGlzdGluY3QgZGV2aWNlIElEcyBzdWNoIGFzIGBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRmAuXG5cblRoZSBjb3JlIHByb2JsZW0gaXMgdGhhdCAqc3RhbmRhcmQqIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpIGVudmlyb25tZW50cyBzaW1wbHkgZG8gbm90IGVtdWxhdGUgdGhpcyBPY3Rlb25UWDIgaGFyZHdhcmUuIE15IGtub3dsZWRnZSBvZiB0aGVzZSBzZXR1cHMgdGVsbHMgbWUgdGhlcmUncyBubyB3YXkgdG8gaW5zdGFudGlhdGUgdGhlc2UgZGV2aWNlcyB2aXJ0dWFsbHkuIFRoZSBkcml2ZXJzIGFyZSBkZXNpZ25lZCB0byBwcm9iZSwgaW50ZXJhY3Qgd2l0aCwgYW5kIG1hbmFnZSBwaHlzaWNhbCBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgU29DIG9yIFNtYXJ0TklDIGhhcmR3YXJlLiBJIGV2ZW4gY2hlY2tlZCB0aGUgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBzZWN0aW9uIG9mIHRoZSB0cmlhZ2UgY3JpdGVyaWEuIEl0IHNlZW1zIGxpa2UgYSBwZXJmZWN0IG1hdGNoLlxuXG5CYXNlZCBvbiB0aGUgdHJpYWdlIGNyaXRlcmlhLCBpdCBsb29rcyBsaWtlIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZSBiZWNhdXNlIHRoZSBtb2RpZmllZCBjb2RlIHN0cmljdGx5IGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTogKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIi5cblxuU28sIEknbSBnb2luZyB0byBzZXQgbXkgcmVzdWx0cyBhcyBmb2xsb3dzOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9gKSwgc3BlY2lmaWNhbGx5IHJlcHJlc2VudG9yIG1haWxib3ggaGFuZGxpbmcsIE1DQU0gcnVsZSBtYW5hZ2VtZW50LCBhbmQgdGVhcmRvd24gbG9naWMuIFRoaXMgY29kZSByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsL0Nhdml1bSBPY3Rlb25UWDIgaGFyZHdhcmUgLyBTbWFydE5JQyBBU0lDIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVS9HQ0UpLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlxuKiAgIGBFbmFibGVDb25maWdzYDogW11cbiogICBgRm9jdXNTeW1ib2xzYDogW11cblxuQW5kIHRoZW4gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3OCwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDQ6NTIuNTAzMzgwMjA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIFJWVSAoUmVzb3VyY2UgVmlydHVhbGl6YXRpb24gVW5pdCkgZXRoZXJuZXQgZHJpdmVyIGFuZCByZXByZXNlbnRvciBoYW5kbGluZyB1bmRlciBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi8uIFRoaXMgY29kZSByZXF1aXJlcyBwcm9wcmlldGFyeSBDYXZpdW0vTWFydmVsbCBPY3Rlb25UWDIgaGFyZHdhcmUvU21hcnROSUMgQVNJQ3MgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgUlZVIChSZXNvdXJjZSBWaXJ0dWFsaXphdGlvbiBVbml0KSBldGhlcm5ldCBkcml2ZXIgYW5kIHJlcHJlc2VudG9yIGhhbmRsaW5nIHVuZGVyIGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLy4gVGhpcyBjb2RlIHJlcXVpcmVzIHByb3ByaWV0YXJ5IENhdml1bS9NYXJ2ZWxsIE9jdGVvblRYMiBoYXJkd2FyZS9TbWFydE5JQyBBU0lDcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjA0OjUyLjUwMzQwNjQ0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowh6kz2[1] Phase: Running StartedAt: 2026-09-04 10:05:04 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowh6kz2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-04 10:05:04 +0000 UTC FinishedAt: 2026-09-04 10: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,}