Name: series-workflownc99q Phase: Failed StartedAt: 2026-09-09 15:19:02 +0000 UTC FinishedAt: 2026-09-09 16:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflownc99q[0] Phase: Succeeded StartedAt: 2026-09-09 15:19:02 +0000 UTC FinishedAt: 2026-09-09 16:05:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownc99q[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 15:19:02 +0000 UTC FinishedAt: 2026-09-09 16:05:32 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgRGV2aWNlIFRyZWUgYmluZGluZ3MgZG9jdW1lbnRhdGlvbiBhbmQgYWRkcyBzdXBwb3J0IGZvciBFY29OZXQgRU43NTEyMjEgU29DcyBhbmQgcGFzc3Rocm91Z2ggbW9kZSB0byB0aGUgTWVkaWFUZWsgTVQ3NTMwIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKikuIFRoaXMgZHJpdmVyIGNvbnRyb2xzIHNwZWNpZmljIHBoeXNpY2FsIE1lZGlhVGVrL0Vjb05ldCBTb0MgZXRoZXJuZXQgc3dpdGNoZXMgYW5kIE1ESU8vTU1JTyBkZXZpY2VzIHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzhhNzI2ZTk2NmFkZDljMzAzZjM4Y2NmYjE5MTY3NWU4MTQwMjZlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTY6MDQ6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxuaW5kZXggOTBiMzU4MmI3NjE5MC4uMTA2YzQwODc1MjhkNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxuQEAgLTI5LDYgJiM0MzsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfFxuICAgYW5kIHRoZSBzd2l0Y2ggcmVnaXN0ZXJzIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byBTb0MmIzM5O3MgbWVtb3J5IG1hcCByYXRoZXIgdGhhblxuICAgdXNpbmcgTURJTy4gVGhlIERTQSBkcml2ZXIgY3VycmVudGx5IGRvZXNuJiMzOTt0IHN1cHBvcnQgTVQ3NjIwIHZhcmlhbnRzLlxuIFxuJiM0MzsgIEVjb05ldCBFTjc1MTIyMSBTb0NzIGhhdmUgYSBtZW1vcnkgbWFwcGVkIE1UNzUzMCB3aXRoIDN4IDEwLzEwMCBQSFlzIGFuZCAxeFxuJiM0MzsgIGdpZ2FiaXQgUEhZLiBTb21lIEVONzUxMjIxIGNoaXBzIHN1Y2ggYXMgRU43NTEzRyBhbmQgRU43NTI2RyBoYXZlIGEgbXVsdGktY2hpcFxuJiM0MzsgIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTVQ3NTMwIGFzIHdlbGwgYXMgdGhlIG9uLWRpZSBzd2l0Y2guIEluIHRoZXNlXG4mIzQzOyAgcGFja2FnZXMsIHRoZSBtdWx0aS1jaGlwIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gcG9ydCA1IG9mIHRoZSBvbi1kaWUgc3dpdGNoXG4mIzQzOyAgdmlhIGEgVFJHTUlJIGxpbmsuXG4mIzQzO1xuICAgVGhlcmUgaXMgb25seSB0aGUgc3RhbmRhbG9uZSB2ZXJzaW9uIG9mIE1UNzUzMS5cbiBcbiAgIFBvcnQgNSBvbiBNVDc1MzAgc3VwcG9ydHMgdmFyaW91cyBjb25maWd1cmF0aW9uczpcbkBAIC03Myw2ICYjNDM7NzksMTMgQEAgZGVzY3JpcHRpb246IHxcbiBcbiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LlxuIFxuJiM0MzsgIFRoZSBNVDc1MzAgYW5kIE1UNzUzMSBzd2l0Y2hlcyBhcmUgY2FwYWJsZSBvZiBiZWluZyBvcGVyYXRlZCBpbiBcJiMzNDtwYXNzdGhyb3VnaFwmIzM0O1xuJiM0MzsgIG1vZGUuIEluIHRoaXMgbW9kZSwgdHJhZmZpYyBpcyB1bmNvbmRpdGlvbmFsbHkgcGFzc2VkIGJldHdlZW4gdGhlIENQVSBwb3J0XG4mIzQzOyAgYW5kIHRoZSBEU0EgcG9ydCB3aGljaCBsaW5rcyB0byBhIHNlY29uZCBzd2l0Y2guIFRvIHVzZSBwYXNzdGhyb3VnaCBtb2RlLCB0aGVcbiYjNDM7ICB1cHN0cmVhbSBzd2l0Y2ggaXMgY29uZmlndXJlZCB3aXRoIGEgRFNBIGxpbmsgdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLiBJblxuJiM0MzsgIHBhc3N0aHJvdWdoIG1vZGUgdGhlIHVwc3RyZWFtIHN3aXRjaCBpcyByZXN0cmljdGVkLCB3aXRoIG5vIG90aGVyIHBvcnRzIG9yXG4mIzQzOyAgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYWxsb3dlZC5cbiYjNDM7XG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuQEAgLTEwNCw2ICYjNDM7MTE3LDE0IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgIEJ1aWx0LWluIHN3aXRjaCBvZiB0aGUgRWNvTmV0IEVONzUyOCBTb0NcbiAgICAgICAgIGNvbnN0OiBlY29uZXQsZW43NTI4LXN3aXRjaFxuIFxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIEVjb05ldCBFTjc1MTIyMSBTb0NcbiYjNDM7ICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxuJiM0MztcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgIE11bHRpLWNoaXAgbW9kdWxlIE1UNzUzMCBpbiBFTjc1MTIyMSBTb0NcbiYjNDM7ICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxXG4mIzQzO1xuICAgcmVnOlxuICAgICBtYXhJdGVtczogMVxuIFxuQEAgLTE1Myw4ICYjNDM7MTc0LDggQEAgcHJvcGVydGllczpcbiAgIG1lZGlhdGVrLG1jbTpcbiAgICAgdHlwZTogYm9vbGVhblxuICAgICBkZXNjcmlwdGlvbjpcbi0gICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCBhbmQgTVQ3NjIzQUkgU29DcyB3aGljaCB0aGUgTVQ3NTMwXG4tICAgICAgc3dpdGNoIGlzIGEgcGFydCBvZiB0aGUgbXVsdGktY2hpcCBtb2R1bGUuXG4mIzQzOyAgICAgIFVzZWQgZm9yIE1UNzYyMUFULCBNVDc2MjFEQVQsIE1UNzYyMVNULCBNVDc2MjNBSSBhbmQgRU43NTEyMjEgU29DcyB3aGljaFxuJiM0MzsgICAgICB0aGUgTVQ3NTMwIHN3aXRjaCBpcyBhIHBhcnQgb2YgdGhlIG11bHRpLWNoaXAgbW9kdWxlLlxuIFxuICAgcmVzZXQtZ3Bpb3M6XG4gICAgIGRlc2NyaXB0aW9uOiB8XG5AQCAtMjE2LDYgJiM0MzsyMzcsMjAgQEAgJGRlZnM6XG4gICAgICAgICAgICAgICAgIHBoeS1tb2RlOlxuICAgICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbFxuIFxuJiM0MzsgIG10NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydDpcbiYjNDM7ICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBcJiMzNDteKGV0aGVybmV0LSk/cG9ydHMkXCYjMzQ7OlxuJiM0MzsgICAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgXCYjMzQ7XihldGhlcm5ldC0pP3BvcnRAWzAtNl0kXCYjMzQ7OlxuJiM0MzsgICAgICAgICAgICBpZjpcbiYjNDM7ICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF1cbiYjNDM7ICAgICAgICAgICAgdGhlbjpcbiYjNDM7ICAgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgICAgICAgICBjb25zdDogNlxuJiM0MzsgICAgICAgICAgICAgICAgcGh5LW1vZGU6XG4mIzQzOyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWlcbiYjNDM7XG4gICBtdDc1MzAtZHNhLXBvcnQ6XG4gICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuICAgICAgIFwmIzM0O14oZXRoZXJuZXQtKT9wb3J0cyRcJiMzNDs6XG5AQCAtMzIzLDYgJiM0MzszNTgsNyBAQCBhbGxPZjpcbiAgICAgICAgICAgICAtIGFpcm9oYSxlbjc1ODEtc3dpdGNoXG4gICAgICAgICAgICAgLSBhaXJvaGEsYW43NTgzLXN3aXRjaFxuICAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUyOC1zd2l0Y2hcbiYjNDM7ICAgICAgICAgICAgLSBlY29uZXQsZW43NTEyMjEtc3dpdGNoXG4gICAgIHRoZW46XG4gICAgICAgJHJlZjogXCYjMzQ7Iy8kZGVmcy9idWlsdGluLWRzYS1wb3J0XCYjMzQ7XG4gICAgICAgcHJvcGVydGllczpcbkBAIC0zMzAsNiAmIzQzOzM2NiwxNiBAQCBhbGxPZjpcbiAgICAgICAgIG1lZGlhdGVrLG1jbTogZmFsc2VcbiAgICAgICAgIHJlc2V0LW5hbWVzOiBmYWxzZVxuIFxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUxMjIxXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICAkcmVmOiBcJiMzNDsjLyRkZWZzL210NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydFwmIzM0O1xuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIG1lZGlhdGVrLG1jbVxuJiM0MztcbiB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4gXG4gZXhhbXBsZXM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xuaW5kZXggMjRlZjU0ZjNkYjJhNi4uMmZkOTg3ZmY4NTEwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xuQEAgLTEzOSw2ICYjNDM7MTM5LDcgQEAgbXQ3NTMxX2NyZWF0ZV9zZ21paShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTEyMjFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NjIxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc2MjFdLCB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMwXSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc1MzFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuaW5kZXggY2YzYmRiMjNhMmQ1NC4uMWEyOWIxZWVmYjJjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OTg4X29mX21hdGNoW10gPSB7XG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGFuNzU4My1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1MTIyMS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc5ODgtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG5AQCAtNjEsNyAmIzQzOzYyLDEyIEBAIG10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbi1cdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKHByaXYtXHUwMDNlZHMpO1xuJiM0MztcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG10Nzk4OF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNcbmluZGV4IDI4Zjk0Y2QyNWI5NTUuLjZmZDQ3MTlhYWI4OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyBtdDc1MzBfbWliW10gPSB7XG4gXHRNSUJfREVTQygxLCBNVDc1MzBfUE9SVF9NSUJfUlhfQVJMX0RST1AsIFwmIzM0O1J4QXJsRHJvcFwmIzM0OyksXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MzttdDc1M3hfY3RybF9waHlfYWRkcihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMSlcbiYjNDM7XHRcdHJldHVybiAxMjtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghcHJpdi1cdTAwM2VtZGlvZGV2KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBEZWZhdWx0IGlzIDFzdCBQSFkgKi9cbiYjNDM7XHRyZXR1cm4gKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyICYjNDM7IDEpIFx1MDAyNiAoUEhZX01BWF9BRERSIC0gMSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBtdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuQEAgLTYzLDMyICYjNDM7NzYsMzYgQEAgbXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gc3RhdGljIHZvaWRcbiBjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbiB7XG4mIzQzO1x0aW50IGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZWJ1cztcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKCFidXMpXG4mIzQzO1x0XHRidXMgPSBwcml2LVx1MDAzZWNoaWxkX2J1cztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkZXNpcmVkIE1NRCBEZXZhZCAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCByZWcpO1xuJiM0MztcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgcmVnKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuJiM0MztcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksXG4gXHRcdFx0IE1JSV9NTURfQ1RSTCwgTURJT19NTURfVkVORDIgfCBNSUlfTU1EX0NUUkxfTk9JTkNSKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQmIzM5O3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCB2YWwpO1xuJiM0MztcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgdmFsKTtcbiBlcnI6XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRkZXZfZXJyKFx1MDAyNmJ1cy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcXG5cJiMzNDspO1xuQEAgLTk5LDMzICYjNDM7MTE2LDM3IEBAIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuIHN0YXRpYyB2b2lkXG4gY29yZV9ybXcoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHNldClcbiB7XG4mIzQzO1x0aW50IGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZWJ1cztcbiBcdHUzMiB2YWw7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmICghYnVzKVxuJiM0MztcdFx0YnVzID0gcHJpdi1cdTAwM2VjaGlsZF9idXM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWJ1cykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG4gXG4gXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4mIzQzO1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkZXNpcmVkIE1NRCByZWdpc3RlciBhZGRyZXNzICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0IE1JSV9NTURfREFUQSwgcmVnKTtcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHJlZyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFNlbGVjdCB0aGUgRnVuY3Rpb24gOiBEQVRBIHdpdGggbm8gcG9zdCBpbmNyZW1lbnQgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LFxuIFx0XHRcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXJlYWQoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0TUlJX01NRF9EQVRBKTtcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNlcmVhZChidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcdHZhbCA9IHJldDtcbkBAIC0xMzMsOCAmIzQzOzE1NCw3IEBAIGNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXG4gXHR2YWwgXHUwMDI2PSB+bWFzaztcbiBcdHZhbCB8PSBzZXQ7XG4gXHQvKiBXcml0ZSB0aGUgZGF0YSBpbnRvIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCBNSUlfTU1EX0RBVEEsIHZhbCk7XG4mIzQzO1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCB2YWwpO1xuIGVycjpcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGRldl9lcnIoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIG1tZCByZWdpc3RlclxcblwmIzM0Oyk7XG5AQCAtMzI3LDEyICYjNDM7MzQ3LDE5IEBAIG10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4gXHRyZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLCBcdTAwMjZ4dGFsKTtcbiBcdHh0YWwgXHUwMDI2PSBNVDc1MzBfWFRBTF9NQVNLO1xuIFxuJiM0MztcdC8qIEVONzUxMjIxIG9uLWRpZSBkb2VzIG5vdCByZXBvcnQgY2xvY2sgc3BlZWQgaW4gTVRSQVAgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMSlcbiYjNDM7XHRcdHh0YWwgPSBNVDc1MzBfWFRBTF8yNU1IWjtcbiYjNDM7XG4gXHRpZiAoeHRhbCA9PSBNVDc1MzBfWFRBTF8yNU1IWilcbiBcdFx0c3NjX2RlbHRhID0gMHg1NztcbiBcdGVsc2VcbiBcdFx0c3NjX2RlbHRhID0gMHg4NztcbiBcbi1cdGlmIChwcml2LVx1MDAzZWlkID09IElEX01UNzYyMSkge1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxX0VYVCB8fCBwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxKSB7XG4mIzQzO1x0XHQvKiBQTEwgZnJlcXVlbmN5OiAzNjIuNU1oeiAqL1xuJiM0MztcdFx0bmNwbzEgPSAweDFkMDA7XG4mIzQzO1x0fSBlbHNlIGlmIChwcml2LVx1MDAzZWlkID09IElEX01UNzYyMSkge1xuIFx0XHQvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi9cbiBcdFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXG4gXHRcdFx0bmNwbzEgPSAweDA2NDA7XG5AQCAtNDQ5LDYgJiM0Mzs0NzYsMjUxIEBAIG10NzUzMV9wbGxfc2V0dXAoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0dXNsZWVwX3JhbmdlKDI1LCAzNSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbFxuJiM0Mztlbjc1MTIyMV90cmdtaWlfY2FsX29rKHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsIHUzMiByZWcsIGludCBjaGFuLCBpbnQgaSlcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfcmVhZChyeC1cdTAwM2VyZWdtYXAsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUocngtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCB8IEVER0VfQ0hLKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUocngtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCBcdTAwMjYgfkVER0VfQ0hLKTtcbiYjNDM7XHRyZWdtYXBfcmVhZChyeC1cdTAwM2VyZWdtYXAsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEZJRUxEX0dFVChSRF9WQUxVRV9NQVNLLCB2YWwpID09IFRHTUlJX1REX1BBVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIUZJRUxEX0dFVChSRF9FUlJfTUFTSywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG10NzUzMF9wcml2ICpyeCxcbiYjNDM7XHRcdFx0XHQgICAgdTggKmRlZmF1bHRfdGFwcylcbiYjNDM7e1xuJiM0MztcdGludCBjaGFubmVsO1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHModHgtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7XG4mIzQzO1xuJiM0MztcdC8qIFB1dCBmYWlsIHBhdHRlcm4gb24gZXZlcnkgY2hhbm5lbCAqL1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspXG4mIzQzO1x0XHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4mIzQzO1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFRHTUlJX1REX0ZBSUxfUEFUKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiByeF9yZWcgPSBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpO1xuJiM0MztcdFx0aW50IGJlc3RfdGFwID0gLTEsIGJlc3RfcmFuZ2UgPSAtMTtcbiYjNDM7XHRcdGludCBmaXJzdCA9IC0xO1xuJiM0MztcdFx0dTggZGFjO1xuJiM0MztcdFx0Y2hhciBsb2dbVERfVEFQX01BWCAmIzQzOyAxXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBQdXQgdGVzdCBwYXR0ZXJuIG9uIGNvcnJlY3QgY2hhbm5lbCAqL1xuJiM0MztcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxuJiM0MztcdFx0XHRcdCAgIFRHTUlJX1REX1BBVF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIEZJRUxEX1BSRVAoVEdNSUlfVERfUEFUX01BU0ssIFRHTUlJX1REX1BBVCkpO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoZGFjID0gMDsgZGFjIFx1MDAzYyBURF9UQVBfTUFYOyBkYWMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdC8qIFNldCBUQVAgKi9cbiYjNDM7XHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgIFJEX1RBUChkYWMpKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIENoZWNrIGlmIHdlIGNhbiBnZXQgYSBnb29kIHJlYWQgKi9cbiYjNDM7XHRcdFx0aWYgKGVuNzUxMjIxX3RyZ21paV9jYWxfb2socngsIHJ4X3JlZywgY2hhbm5lbCwgZGFjKSkge1xuJiM0MztcdFx0XHRcdGxvZ1tkYWNdID0gJiMzOTsmIzQzOyYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAoZmlyc3QgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0XHRmaXJzdCA9IGRhYztcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKChkYWMgLSBmaXJzdCkgXHUwMDNlIGJlc3RfcmFuZ2UpIHtcbiYjNDM7XHRcdFx0XHRcdGJlc3RfdGFwID0gKGZpcnN0ICYjNDM7IGRhYykgLyAyO1xuJiM0MztcdFx0XHRcdFx0YmVzdF9yYW5nZSA9IGRhYyAtIGZpcnN0O1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRsb2dbZGFjXSA9ICYjMzk7LiYjMzk7O1xuJiM0MztcdFx0XHRcdGZpcnN0ID0gLTE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsb2dbVERfVEFQX01BWF0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChiZXN0X3RhcCBcdTAwM2UgLTEpIHtcbiYjNDM7XHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgIFJEX1RBUChiZXN0X3RhcCkpO1xuJiM0MztcbiYjNDM7XHRcdFx0bG9nW2Jlc3RfdGFwXSA9ICYjMzk7WCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdFx0ZGV2X2luZm8ocngtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtUUkdNSUkgbGFuZSAlZDogJXMgdGFwICVkIG9sZCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgY2hhbm5lbCwgbG9nLCBiZXN0X3RhcCwgZGVmYXVsdF90YXBzW2NoYW5uZWxdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJlZ21hcF91cGRhdGVfYml0cyhyeC1cdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICBSRF9UQVAoZGVmYXVsdF90YXBzW2NoYW5uZWxdKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRkZXZfd2FybihyeC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O1RSR01JSSBsYW5lICVkOiAlcyBjYWxpYnJhdGlvbiBmYWlsZWQsIHByZXNlcnZpbmcgdGFwICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBjaGFubmVsLCBsb2csIGRlZmF1bHRfdGFwc1tjaGFubmVsXSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogUmV0dXJuIGNoYW5uZWwgdG8gZmFpbHVyZSBwYXR0ZXJuICovXG4mIzQzO1x0XHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4mIzQzO1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFRHTUlJX1REX0ZBSUxfUEFUKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyh0eC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUUkFJTl9UWEVOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXG4mIzQzO1x0XHQgICAgICB1OCBjbGtfZHJ2bilcbiYjNDM7e1xuJiM0MztcdGludCBjaGFubmVsO1xuJiM0MztcbiYjNDM7XHQvKiBUeCBkcml2aW5nIGZvciBUUkdNSUkgcGF0aCBvbiBTb0MgKi9cbiYjNDM7XHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwmIzQzOyYjNDM7KVxuJiM0MztcdFx0cmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1REX09EVChjaGFubmVsKSxcbiYjNDM7XHRcdFx0ICAgICBURF9ETV9EUlZQKGRydnApIHwgVERfRE1fRFJWTihkcnZuKSk7XG4mIzQzO1xuJiM0MztcdC8qIFVuZG9jdW1lbnRlZCA2dGggY2hhbm5lbCwgcHJvYmFibHkgZHJpdmUgc3RyZW5ndGggZm9yIGNsb2NrIGxpbmUuICovXG4mIzQzO1x0cmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1REX09EVCg1KSwgVERfRE1fRFJWUChkcnZwKSB8XG4mIzQzO1x0XHQgICAgIFREX0RNX0RSVk4oZHJ2bikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mztlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKmV4dCwgaW50IGV4dF9wb3J0LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKm9uZGllLCBpbnQgb25kaWVfcG9ydClcbiYjNDM7e1xuJiM0MztcdHU4IGRlZmF1bHRfdGFwc19vbmRpZVtOVU1fVFJHTUlJX0NUUkxdO1xuJiM0MztcdHU4IGRlZmF1bHRfdGFwc19leHRbTlVNX1RSR01JSV9DVFJMXTtcbiYjNDM7XHR1MzIgbWNyX2Rvd24sIG1jcl91cDtcbiYjNDM7XHRpbnQgY2hhbm5lbDtcbiYjNDM7XHRpbnQgcmVnX3ZhbDtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUHV0IGludGVyZmFjZXMgaW4gYSBkb3duZWQgc3RhdGUgKi9cbiYjNDM7XHRtY3JfZG93biA9IFBNQ1JfSUZHX1hNSVQoUE1DUl9JRkdfWE1JVF82NCkgfCBQTUNSX01BQ19NT0RFIHxcbiYjNDM7XHRcdCAgIE1UNzUzMF9GT1JDRV9NT0RFIHwgUE1DUl9NQUNfUlhfRU4gfCBQTUNSX0JBQ0tPRkZfRU4gfFxuJiM0MztcdFx0ICAgUE1DUl9CQUNLUFJfRU4gfCBQTUNSX0ZPUkNFX1NQRUVEXzEwMDAgfCBQTUNSX0ZPUkNFX0ZEWDtcbiYjNDM7XHRyZWdtYXBfd3JpdGUob25kaWUtXHUwMDNlcmVnbWFwLCAgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX2Rvd24pO1xuJiM0MztcdHJlZ21hcF93cml0ZShleHQtXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKGV4dF9wb3J0KSwgbWNyX2Rvd24pO1xuJiM0MztcdHVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUmVzZXQgVFggKi9cbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4mIzQzO1x0cmVnbWFwX3NldF9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4mIzQzO1x0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xuJiM0MztcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xuJiM0MztcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4mIzQzO1xuJiM0MztcdC8qIEJPVEg6IFJlc2V0IFJYIGNvbnRyb2xsZXJzIGRvd24gKi9cbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTtcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMob25kaWUtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpO1xuJiM0MztcbiYjNDM7XHQvKiBCT1RIOiBTZXQgVFggZHJpdmUgc3RyZW5ndGgsIE1DTSB1c2VzIG1vcmUgKi9cbiYjNDM7XHRlbjc1MTIyMV9zZXRfdHhfZHJpdmUob25kaWUsIDgsIDgsIDcsIDcpO1xuJiM0MztcdGVuNzUxMjIxX3NldF90eF9kcml2ZShleHQsIDExLCAxMSwgMTYsIDE2KTtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi9cbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpO1xuJiM0MztcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUG9ydHMgdXAgKi9cbiYjNDM7XHRtY3JfdXAgPSBtY3JfZG93biB8IFBNQ1JfTUFDX1RYX0VOIHwgUE1DUl9GT1JDRV9MTks7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX3VwKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChleHRfcG9ydCksIG1jcl91cCk7XG4mIzQzO1xuJiM0MztcdC8qIE1DTTogU2V0IEV4dC1cdTAwM2VTb0MgVFggZGVsYXkgdG8gMCAqL1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspXG4mIzQzO1x0XHRyZWdtYXBfY2xlYXJfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4mIzQzO1x0XHRcdFx0ICBUR01JSV9URF9UQVBfTUFTSyk7XG4mIzQzO1xuJiM0MztcdC8qIFNPQzogT0RUICovXG4mIzQzO1x0cmVnbWFwX3NldF9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfUlRULFxuJiM0MztcdFx0XHREUVMxX0dBVEUgfCBEUVMwX0dBVEUgfCBFTjc1MTIyMV9CMTcpO1xuJiM0MztcbiYjNDM7XHQvKiBTT0M6IFVuZG9jdW1lbnRlZCAqL1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspXG4mIzQzO1x0XHRyZWdtYXBfd3JpdGUob25kaWUtXHUwMDNlcmVnbWFwLCAgKDB4N2ExNCAmIzQzOyBjaGFubmVsICogOCksXG4mIzQzO1x0XHRcdCAgICAgMHgzMjI3NzAwKTtcbiYjNDM7XG4mIzQzO1x0LyogTUNNOiBTcHJlYWQgc3BlY3RydW0gY2xvY2sqL1xuJiM0MztcdGNvcmVfY2xlYXIoZXh0LCBDT1JFX1BMTF9HUk9VUDgsIFJHX0xDRERTX1NTQ19FTik7XG4mIzQzO1xuJiM0MztcdC8qIEJPVEg6IFplcm8gY2xvY2sgZGVsYXkgKi9cbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLFxuJiM0MztcdFx0XHQgIERRU0kwX1RBUF9NQVNLKTtcbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsXG4mIzQzO1x0XHRcdCAgRFFTSTBfVEFQX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBCT1RIOiBDb2xsZWN0IGFuZCB0aGVuIHplcm8gZXZlcnkgUlggVEFQICovXG4mIzQzO1x0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVnX3ZhbCA9IDA7XG4mIzQzO1x0XHRyZWdtYXBfcmVhZChleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLCBcdTAwMjZyZWdfdmFsKTtcbiYjNDM7XHRcdGRlZmF1bHRfdGFwc19leHRbY2hhbm5lbF0gPSBGSUVMRF9HRVQoUkRfVEFQX01BU0ssIHJlZ192YWwpO1xuJiM0MztcdFx0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSxcbiYjNDM7XHRcdFx0XHQgIFJEX1RBUF9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfdmFsID0gMDtcbiYjNDM7XHRcdHJlZ21hcF9yZWFkKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSwgXHUwMDI2cmVnX3ZhbCk7XG4mIzQzO1x0XHRkZWZhdWx0X3RhcHNfb25kaWVbY2hhbm5lbF0gPSBGSUVMRF9HRVQoUkRfVEFQX01BU0ssIHJlZ192YWwpO1xuJiM0MztcdFx0cmVnbWFwX2NsZWFyX2JpdHMob25kaWUtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLFxuJiM0MztcdFx0XHRcdCAgUkRfVEFQX01BU0spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24ob25kaWUsIGV4dCwgZGVmYXVsdF90YXBzX2V4dCk7XG4mIzQzO1x0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oZXh0LCBvbmRpZSwgZGVmYXVsdF90YXBzX2V4dCk7XG4mIzQzO1xuJiM0MztcdGRldl9pbmZvKG9uZGllLVx1MDAzZWRldiwgXCYjMzQ7VFJHTUlJIGludGVyLXN3aXRjaCBsaW5rIGluaXRpYWxpemVkXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7bXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpwZWVyX2RzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnBlZXI7XG4mIzQzO1x0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuJiM0MztcdHN0cnVjdCBkc2FfbGluayAqZGw7XG4mIzQzO1x0dTMyIHBtc3IgPSAwO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoZHAtXHUwMDNldHlwZSAhPSBEU0FfUE9SVF9UWVBFX0RTQSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmVnbWFwX3JlYWQocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QTVNSX1AoZHAtXHUwMDNlaW5kZXgpLCBcdTAwMjZwbXNyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocG1zciBcdTAwMjYgUE1TUl9MSU5LKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkbCwgXHUwMDI2ZHMtXHUwMDNlZHN0LVx1MDAzZXJ0YWJsZSwgbGlzdCkge1xuJiM0MztcdFx0aWYgKGRsLVx1MDAzZWRwICE9IGRwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RwID0gZGwtXHUwMDNlbGlua19kcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGVlcl9kcC1cdTAwM2V0eXBlICE9IERTQV9QT1JUX1RZUEVfRFNBKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RzID0gZGwtXHUwMDNlbGlua19kcC1cdTAwM2VkcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBlZXJfZHMtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2Vjb25ldCxlbjc1MTIyMS1zd2l0Y2hcJiMzNDspKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyID0gcGVlcl9kcy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZWVyLVx1MDAzZWlkICE9IElEX0VONzUxMjIxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChwcml2LCBkcC1cdTAwM2VpbmRleCwgcGVlcixcbiYjNDM7XHRcdFx0XHRcdCAgIHBlZXJfZHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIG10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbkBAIC0xMjgxLDEzICYjNDM7MTU1Myw0MSBAQCBtdDc1M3hfdHJhcF9mcmFtZXMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0XHRcdFx0ICAgVE9fQ1BVX0ZXX0NQVV9PTkxZKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7bXQ3NTMwX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbmV3X210dSk7XG4mIzQzO1xuJiM0MzsvKiBJZiB0aGlzIHN3aXRjaCBpcyBkb3duc3RyZWFtIG9mIGFub3RoZXIgc3dpdGNoIHRoYXQgaXMgaW4gcGFzc3Rocm91Z2ggbW9kZSxcbiYjNDM7ICogdGhlIFwmIzM0O0NQVVwmIzM0OyBwb3J0IGlzIGFjdHVhbGx5IGEgRFNBIHBvcnQuXG4mIzQzOyAqL1xuIHN0YXRpYyB2b2lkXG4gbXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXG4tXHQvKiBFbmFibGUgTWVkaWF0ZWsgaGVhZGVyIG1vZGUgb24gdGhlIGNwdSBwb3J0ICovXG4tXHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSwgUE9SVF9TUEVDX1RBRyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2gpIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgcGFyc2luZyBvZiB0aGUgRFNBIHRhZywgaXQgd2lsbCBiZSBmb3J3YXJkZWQgYmxpbmRseVxuJiM0MztcdFx0ICogdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSxcbiYjNDM7XHRcdFx0ICAgICBWTEFOX0FUVFIoTVQ3NTMwX1ZMQU5fVFJBTlNQQVJFTlQpIHxcbiYjNDM7XHRcdFx0ICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gcGFyc2UgRFNBIHRhZ3MsIHNvIHRoZXkgYXJlXG4mIzQzO1x0XHQgKiBsaWFibGUgdG8gYmUgY29uZnVzZWQgZm9yIGxlbmd0aCBmaWVsZHMsIHNvIGxlbmd0aCBjaGVjayBpc1xuJiM0MztcdFx0ICogZGlzYWJsZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1M1hfQUdDLCBBR0NfTDJMRU5fQ0hLKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbiBwYXNzdGhyb3VnaCBtb2RlLCBNVFUgaXMgb25seSBlbmZvcmNlZCBkb3duc3RyZWFtICovXG4mIzQzO1x0XHRtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KGRzLCBwb3J0LCBNVDc1MzBfTUFYX01UVSk7XG4mIzQzO1xuJiM0MztcdFx0LyogTG9vcCBkZXRlY3Rpb24gaGFzIG5vIHZhbHVlIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cbiYjNDM7XHRcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLFxuJiM0MztcdFx0XHRcdE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogTm90IHBhc3N0aHJvdWdoLCBlbmFibGUgRFNBIHRhZyBoYW5kbGluZyBvbiBDUFUgcG9ydC4gKi9cbiYjNDM7XHRcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBFbmFibGUgZmxvb2Rpbmcgb24gdGhlIENQVSBwb3J0ICovXG4gXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzWF9NRkMsXG5AQCAtMTMxNyw2ICYjNDM7MTYxNyw3IEBAIHN0YXRpYyBpbnRcbiBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiB7XG4mIzQzO1x0aW50IHVwc3RyZWFtX3B0ID0gZHNhX3N3aXRjaF91cHN0cmVhbV9wb3J0KGRzKTtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFxuQEAgLTEzMjcsMTcgJiM0MzsxNjI4LDQzIEBAIG10NzUzMF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ICogYnJpZGdlLlxuIFx0ICovXG4gXHRpZiAoZHNhX3BvcnRfaXNfdXNlcihkcCkpIHtcbi1cdFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkcC1cdTAwM2VjcHVfZHA7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKHVwc3RyZWFtX3B0KSk7XG4mIzQzO1xuJiM0MztcdH0gZWxzZSBpZiAoZHNhX3BvcnRfaXNfZHNhKGRwKSBcdTAwMjZcdTAwMjYgZHAtXHUwMDNlaW5kZXggIT0gdXBzdHJlYW1fcHQpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTaG91bGQgbm90IGhhcHBlbiAqL1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKCFwcml2LVx1MDAzZWlzX3Bhc3N0aHJvdWdoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXZSBhcmUgcGFzc2luZyB0aHJvdWdoIHRvIGEgZG93bnN0cmVhbSBzd2l0Y2ggc28gd2Ugc2V0IGJvdGhcbiYjNDM7XHRcdCAqIENQVSBhbmQgZG93bnN0cmVhbSBsaW5rIHRvIHBhc3MgdHJhZmZpYyB1bnRvdWNoZWQgc28gdGhhdFxuJiM0MztcdFx0ICogdGhlIFNUQUcgZnJvbSB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggd2lsbCBwYXNzIHRvIHRoZSB1cHN0cmVhbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksXG4mIzQzO1x0XHRcdCAgICAgVkxBTl9BVFRSKE1UNzUzMF9WTEFOX1RSQU5TUEFSRU5UKSB8XG4mIzQzO1x0XHRcdCAgICAgUFZDX0VHX1RBRyhNVDc1MzBfVkxBTl9FR19ESVNBQkxFRCkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi9cbiYjNDM7XHRcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01GQywgQkNfRkZQKEJJVChwb3J0KSkgfFxuJiM0MztcdFx0XHRcdFVOTV9GRlAoQklUKHBvcnQpKSB8IFVOVV9GRlAoQklUKHBvcnQpKSk7XG4gXG4tXHRcdHByaXYtXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQoY3B1X2RwLVx1MDAzZWluZGV4KSk7XG4mIzQzO1x0XHQvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuXG4mIzQzO1x0XHQgKiBUaGlzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBQT1JUX1NQRUNfVEFHIGlzIHVuc2V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QQ1JfUCh1cHN0cmVhbV9wdCksXG4mIzQzO1x0XHRcdCAgICAgUENSX01BVFJJWChCSVQocG9ydCkpKTtcbiBcdH1cbiBcdHByaXYtXHUwMDNlcG9ydHNbcG9ydF0uZW5hYmxlID0gdHJ1ZTtcbi1cdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BDUl9QKHBvcnQpLCBQQ1JfTUFUUklYX01BU0ssXG4tXHRcdFx0ICAgcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSk7XG4mIzQzO1xuJiM0MztcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIENQVSBwb3J0IG1hc2sgaXMgc2V0IGFib3ZlLiAqL1xuJiM0MztcdGlmICghKHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2ggXHUwMDI2XHUwMDI2IGRwLVx1MDAzZWluZGV4ID09IHVwc3RyZWFtX3B0KSlcbiYjNDM7XHRcdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BDUl9QKHBvcnQpLFxuJiM0MztcdFx0XHRcdCAgIFBDUl9NQVRSSVhfTUFTSywgcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSk7XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc1MzAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxX0VYVClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAocG9ydCA9PSA1KVxuQEAgLTEzNjQsNyAmIzQzOzE2OTEsOCBAQCBtdDc1MzBfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc1MzAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxX0VYVClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogRG8gbm90IHNldCBNVDc1MzBfUDVfRElTIHdoZW4gcG9ydCA1IGlzIGJlaW5nIHVzZWQgZm9yIFBIWSBtdXhpbmcuICovXG5AQCAtMTM4NSw3ICYjNDM7MTcxMyw3IEBAIG10NzUzMF9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXG4gXHQgKiBsYXJnZXN0IE1UVSBvZiB0aGUgdXNlciBwb3J0cy4gQmVjYXVzZSB0aGUgc3dpdGNoIG9ubHkgaGFzIGEgZ2xvYmFsXG4gXHQgKiBSWCBsZW5ndGggcmVnaXN0ZXIsIG9ubHkgYWxsb3dpbmcgQ1BVIHBvcnQgaGVyZSBpcyBlbm91Z2guXG4gXHQgKi9cbi1cdGlmICghZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSlcbiYjNDM7XHRpZiAoIWRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBwb3J0KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRyZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX0dNQUNDUiwgXHUwMDI2dmFsKTtcbkBAIC0yMzMzLDcgJiM0MzsyNjYxLDcgQEAgbXQ3NTMwX2ZyZWVfbWRpb19pcnEoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50XG4mIzQzO2ludFxuIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucCwgKm5wID0gcHJpdi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbkBAIC0yMzQzLDYgJiM0MzsyNjcxLDEwIEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdHN0YXRpYyBpbnQgaWR4O1xuIFx0aW50IHJldCA9IDA7XG4gXG4mIzQzO1x0LyogQWxyZWFkeSBkb25lICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpbGRfYnVzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuIFxuIFx0aWYgKG1ucCBcdTAwMjZcdTAwMjYgIW9mX2RldmljZV9pc19hdmFpbGFibGUobW5wKSlcbkBAIC0yMzcwLDggJiM0MzsyNzAyLDExIEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdGlmIChwcml2LVx1MDAzZWlycV9kb21haW4gXHUwMDI2XHUwMDI2ICFtbnApXG4gXHRcdG10NzUzMF9zZXR1cF9tZGlvX2lycShwcml2KTtcbiBcbiYjNDM7XHRwcml2LVx1MDAzZWNoaWxkX2J1cyA9IGJ1cztcbiYjNDM7XG4gXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XG4gXHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWNoaWxkX2J1cyA9IE5VTEw7XG4gXHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRpZiAocHJpdi1cdTAwM2VpcnFfZG9tYWluIFx1MDAyNlx1MDAyNiAhbW5wKVxuIFx0XHRcdG10NzUzMF9mcmVlX21kaW9faXJxKHByaXYpO1xuQEAgLTIzODEsNiAmIzQzOzI3MTYsNyBAQCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gXHRvZl9ub2RlX3B1dChtbnApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG10NzUzMF9zZXR1cF9tZGlvKTtcbiBcbiBzdGF0aWMgaW50XG4gbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbkBAIC0yNDA2LDExICYjNDM7Mjc0Miw2IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKCFkbikge1xuLVx0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCYjMzQ7cGFyZW50IE9GIG5vZGUgb2YgRFNBIGNvbmR1aXQgbm90IGZvdW5kXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4gXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4gXHRkcy1cdTAwM2V1bnRhZ192bGFuX2F3YXJlX2JyaWRnZV9wdmlkID0gdHJ1ZTtcbiBcdGRzLVx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcbkBAIC0yNDg5LDYgJiM0MzsyODIwLDEyIEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdFx0ICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX1BIWV9JTkRJUkVDVF9BQ0NFU1MsXG4gXHRcdFx0ICAgTVQ3NTMwX0NIR19UUkFQKTtcbiBcbiYjNDM7XHQvKiBFTjc1MTIyMSBNQ00gc3RhcnRzIG9uIHRoZSB3cm9uZyBmcmVxdWVuY3kgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMV9FWFQpXG4mIzQzO1x0XHRyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzWF9NVFJBUCxcbiYjNDM7XHRcdFx0XHQgICBNVDc1MzBfQ0hHX1RSQVAgfCBNVDc1MzBfQ0tfU0VMLFxuJiM0MztcdFx0XHRcdCAgIE1UNzUzMF9DSEdfVFJBUCk7XG4mIzQzO1xuIFx0aWYgKCh2YWwgXHUwMDI2IE1UNzUzMF9YVEFMX01BU0spID09IE1UNzUzMF9YVEFMXzQwTUhaKVxuIFx0XHRtdDc1MzBfcGxsX3NldHVwKHByaXYpO1xuIFxuQEAgLTI1MTIsNyAmIzQzOzI4NDksNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHQvKiBEaXNhYmxlIGxlYXJuaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovXG4gXHRcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BTQ19QKGkpLCBTQV9ESVMpO1xuIFxuLVx0XHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkge1xuJiM0MztcdFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xuIFx0XHRcdG10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xuQEAgLTI1MzYsNyAmIzQzOzI4NzMsNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogQ2hlY2sgZm9yIFBIWSBtdXhpbmcgb24gcG9ydCA1ICovXG4tXHRpZiAoZHNhX2lzX3VudXNlZF9wb3J0KGRzLCA1KSkge1xuJiM0MztcdGlmIChkbiBcdTAwMjZcdTAwMjYgZHNhX2lzX3VudXNlZF9wb3J0KGRzLCA1KSkge1xuIFx0XHQvKiBTY2FuIHRoZSBldGhlcm5ldCBub2Rlcy4gTG9vayBmb3IgR01BQzEsIGxvb2t1cCB0aGUgdXNlZCBQSFkuXG4gXHRcdCAqIFNldCBwcml2LVx1MDAzZXA1X21vZGUgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGlmIFBIWSBtdXhpbmcgaXNcbiBcdFx0ICogZGV0ZWN0ZWQuXG5AQCAtMjYzNiw3ICYjNDM7Mjk3Myw3IEBAIG10NzUzMV9zZXR1cF9jb21tb24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMV9EQkdfQ05UKGkpLFxuIFx0XHRcdFx0TVQ3NTMxX0RJU19DTFIpO1xuIFxuLVx0XHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkge1xuJiM0MztcdFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xuIFx0XHRcdG10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xuQEAgLTI2NzQsOCAmIzQzOzMwMTEsMTEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTMyIHZhbCwgaWQ7XG4mIzQzO1x0aW50IGN0bF9waHk7XG4gXHRpbnQgcmV0LCBpO1xuIFxuJiM0MztcdGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTtcbiYjNDM7XG4gXHQvKiBSZXNldCB3aG9sZSBjaGlwIHRocm91Z2ggZ3BpbyBwaW4gb3IgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgZm9yXG4gXHQgKiBkaWZmZXJlbnQgdHlwZSBvZiBoYXJkd2FyZVxuIFx0ICovXG5AQCAtMjc0MywyNSAmIzQzOzMwODMsMjEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdCAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duXG4gXHQgKiBtdDc1MzFfaW5kX21tZF9waHlfW3JlYWQsd3JpdGVdIHRvIGNvbXBsZXRlIHRoaXMgZnVuY3Rpb24uXG4gXHQgKi9cbi1cdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsXG4tXHRcdFx0XHQgICAgICBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0XHQgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0KTtcbiYjNDM7XHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZChwcml2LCBjdGxfcGh5LCBNRElPX01NRF9WRU5EMixcbiYjNDM7XHRcdFx0XHQgICAgICBDT1JFX1BMTF9HUk9VUDQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHZhbCA9IHJldDtcbiBcdHZhbCB8PSBNVDc1MzFfUkdfU1lTUExMX0RNWTIgfCBNVDc1MzFfUEhZX1BMTF9CWVBBU1NfTU9ERTtcbiBcdHZhbCBcdTAwMjY9IH5NVDc1MzFfUEhZX1BMTF9PRkY7XG4tXHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdixcbi1cdFx0XHRcdCAgICAgICBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0XHQgICAgICAgTURJT19NTURfVkVORDIsIENPUkVfUExMX0dST1VQNCwgdmFsKTtcbiYjNDM7XHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIENPUkVfUExMX0dST1VQNCwgdmFsKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBEaXNhYmxlIEVFRSBhZHZlcnRpc2VtZW50IG9uIHRoZSBzd2l0Y2ggUEhZcy4gKi9cbi1cdGZvciAoaSA9IE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKTtcbi1cdCAgICAgaSBcdTAwM2MgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpICYjNDM7IE1UNzUzMF9OVU1fUEhZUztcbi1cdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSBjdGxfcGh5OyBpIFx1MDAzYyBjdGxfcGh5ICYjNDM7IE1UNzUzMF9OVU1fUEhZUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsIGksIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYsXG4gXHRcdFx0XHRcdCAwKTtcbiBcdH1cbkBAIC0yOTEwLDYgJiM0MzszMjQ2LDQ0IEBAIHN0YXRpYyB2b2lkIGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHBvcnQpIHtcbiYjNDM7XHQvKiBFTjc1MTIyMSBwb3J0cyAwLi4zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVncmF0ZWQgRkUgUEhZcy4gKi9cbiYjNDM7XHRjYXNlIDAgLi4uIDM6XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuJiM0MztcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHQvKiBQb3J0IDQgaXMgY29ubmVjdGVkIHRvIHRoZSBzdGFuZGFsb25lIEVONzUxMi9FTjc1MjEgR1BIWS4gKi9cbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuJiM0MztcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0LyogUG9ydCA1IGlzIHRoZSAxIEdiaXQvcyBUUkdNSUkgY2FzY2FkZSB0byB0aGUgZXh0ZXJuYWwgTVQ3NTMwLiAqL1xuJiM0MztcdGNhc2UgNTpcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJLFxuJiM0MztcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHQvKiBQb3J0IDYgaXMgdGhlIDEgR2JpdC9zIENQVSBsaW5rIHRvIEdETTEuICovXG4mIzQzO1x0Y2FzZSA2OlxuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcbiYjNDM7XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBtdDc1MzBfbWFjX2NvbmZpZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0ICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuQEAgLTMwNTksNiAmIzQzOzM0MzMsOSBAQCBzdGF0aWMgdm9pZCBtdDc1M3hfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdH1cbiBcbiBcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC1cdTAwM2VpbmRleCksIG1jcik7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSlcbiYjNDM7XHRcdG10NzUzMF9jYWxfaW50ZXJzd2l0Y2hfdHJnbWlpKGRwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NTN4X3BoeWxpbmtfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuQEAgLTMyOTgsMTAgJiM0MzszNjc1LDExIEBAIG10NzUzeF9jb25kdWl0X3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4gXG4gXHQvKiBTZXQgdGhlIENQVSBwb3J0IHRvIHRyYXAgZnJhbWVzIHRvIGZvciBNVDc1MzAuIFRyYXBwZWQgZnJhbWVzIHdpbGwgYmVcbiBcdCAqIGZvcndhcmRlZCB0byB0aGUgbnVtZXJpY2FsbHkgc21hbGxlc3QgQ1BVIHBvcnQgd2hvc2UgY29uZHVpdFxuLVx0ICogaW50ZXJmYWNlIGlzIHVwLlxuJiM0MztcdCAqIGludGVyZmFjZSBpcyB1cC4gTk9URTogXCYjMzQ7Q1BVIHBvcnRcJiMzNDsgY2FuIGFsc28gbWVhbiBhbiB1cHN0cmVhbSBEU0EgbGluay5cbiBcdCAqL1xuIFx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSBcdTAwMjZcdTAwMjZcbi1cdCAgICBwcml2LVx1MDAzZWlkICE9IElEX0VONzUyOClcbiYjNDM7XHQgICAgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MjggXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtYXNrID0gQklUKGNwdV9kcC1cdTAwM2VpbmRleCk7XG5AQCAtMzM5Myw2ICYjNDM7Mzc3MSw3NiBAQCBzdGF0aWMgaW50IG10Nzk4OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRyZXR1cm4gbXQ3NTMxX3NldHVwX2NvbW1vbihkcyk7XG4gfVxuIFxuJiM0MzsvKiAxIGlmIHBhc3N0aHJvdWdoLCBuZWdhdGl2ZSBpZiBlcnJvci4gKi9cbiYjNDM7c3RhdGljIGludCBtdDc1M3hfY2hlY2tfcGFzc3Rocm91Z2goc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cywgKnBvcnQ7XG4mIzQzO1x0aW50IHBhc3N0aHJvdWdoX3BvcnRzID0gMDtcbiYjNDM7XHRpbnQgZW5hYmxlZF9wb3J0cyA9IDA7XG4mIzQzO1xuJiM0MztcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3BvcnRzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIXBvcnRzKVxuJiM0MztcdFx0cG9ydHMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcG9ydHNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBvcnRzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7bm8gcG9ydHMgY2hpbGQgbm9kZSBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBvcnRzLCBwb3J0KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxpbms7XG4mIzQzO1xuJiM0MztcdFx0ZW5hYmxlZF9wb3J0cyYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXCYjMzQ7ZXRoZXJuZXRcJiMzNDssIDApO1xuJiM0MztcdFx0aWYgKCFsaW5rKVxuJiM0MztcdFx0XHRsaW5rID0gb2ZfcGFyc2VfcGhhbmRsZShwb3J0LCBcJiMzNDtsaW5rXCYjMzQ7LCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWxpbmspXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG9mX25vZGVfcHV0KGxpbmspO1xuJiM0MztcbiYjNDM7XHRcdHBhc3N0aHJvdWdoX3BvcnRzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9mX25vZGVfcHV0KHBvcnRzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHN3aXRjaCBpcyBjb25zaWRlcmVkIHBhc3N0aHJvdWdoIGlmIGV4YWN0bHkgdHdvIGF2YWlsYWJsZVxuJiM0MztcdCAqIHBvcnRzIGhhdmUgYW4gXCYjMzQ7ZXRoZXJuZXRcJiMzNDsgb3IgXCYjMzQ7bGlua1wmIzM0OyBwaGFuZGxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYXNzdGhyb3VnaF9wb3J0cyBcdTAwM2UgMiB8fFxuJiM0MztcdCAgICAocGFzc3Rocm91Z2hfcG9ydHMgPT0gMiBcdTAwMjZcdTAwMjYgZW5hYmxlZF9wb3J0cyAhPSAyKVxuJiM0MztcdCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O09ubHkgdHdvIHBvcnRzIGFsbG93ZWQgaW4gcGFzc3Rocm91Z2ggbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYXNzdGhyb3VnaF9wb3J0cyA9PSAyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBObyBtYW5pcHVsYXRpb24gb2YgZm9yd2FyZGluZyBydWxlcyBhbGxvd2VkIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHtcbiYjNDM7XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdGtfZ2V0X3RhZ19wcm90b2NvbCxcbiYjNDM7XHQuc2V0dXBcdFx0XHQ9IG10NzUzeF9zZXR1cCxcbiYjNDM7XHQudGVhcmRvd25cdFx0PSBtdDc1M3hfdGVhcmRvd24sXG4mIzQzO1x0LnByZWZlcnJlZF9kZWZhdWx0X2xvY2FsX2NwdV9wb3J0ID0gbXQ3NTN4X3ByZWZlcnJlZF9kZWZhdWx0X2xvY2FsX2NwdV9wb3J0LFxuJiM0MztcdC5nZXRfc3RyaW5nc1x0XHQ9IG10NzUzMF9nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLFxuJiM0MztcdC5nZXRfc3NldF9jb3VudFx0XHQ9IG10NzUzMF9nZXRfc3NldF9jb3VudCxcbiYjNDM7XHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfcm1vbl9zdGF0c1x0XHQ9IG10NzUzMF9nZXRfcm1vbl9zdGF0cyxcbiYjNDM7XHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IG10NzUzMF9nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO1x0LmdldF9zdGF0czY0XHRcdD0gbXQ3NTMwX2dldF9zdGF0czY0LFxuJiM0MztcdC5wb3J0X2VuYWJsZVx0XHQ9IG10NzUzMF9wb3J0X2VuYWJsZSxcbiYjNDM7XHQucG9ydF9kaXNhYmxlXHRcdD0gbXQ3NTMwX3BvcnRfZGlzYWJsZSxcbiYjNDM7XHQucGh5bGlua19nZXRfY2Fwc1x0PSBtdDc1M3hfcGh5bGlua19nZXRfY2FwcyxcbiYjNDM7XHQuc3VwcG9ydF9lZWVcdFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxuJiM0MztcdC5zZXRfbWFjX2VlZVx0XHQ9IG10NzUzeF9zZXRfbWFjX2VlZSxcbiYjNDM7XHQuY29uZHVpdF9zdGF0ZV9jaGFuZ2VcdD0gbXQ3NTN4X2NvbmR1aXRfc3RhdGVfY2hhbmdlLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzUzMF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2xcdD0gbXRrX2dldF90YWdfcHJvdG9jb2wsXG4gXHQuc2V0dXBcdFx0XHQ9IG10NzUzeF9zZXR1cCxcbkBAIC0zNTE5LDE0ICYjNDM7Mzk2Nyw0MCBAQCBjb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gbXQ3NTN4X3RhYmxlW10gPSB7XG4gXHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlLFxuIFx0XHQubWFjX3BvcnRfZ2V0X2NhcHMgPSBlbjc1MjhfbWFjX3BvcnRfZ2V0X2NhcHMsXG4gXHR9LFxuJiM0MztcdFtJRF9FTjc1MTIyMV0gPSB7XG4mIzQzO1x0XHQuaWQgPSBJRF9FTjc1MTIyMSxcbiYjNDM7XHRcdC5wY3Nfb3BzID0gXHUwMDI2bXQ3NTMwX3Bjc19vcHMsXG4mIzQzO1x0XHQuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsXG4mIzQzO1x0XHQucGh5X3JlYWRfYzIyID0gbXQ3NTMxX2luZF9jMjJfcGh5X3JlYWQsXG4mIzQzO1x0XHQucGh5X3dyaXRlX2MyMiA9IG10NzUzMV9pbmRfYzIyX3BoeV93cml0ZSxcbiYjNDM7XHRcdC5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCxcbiYjNDM7XHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlLFxuJiM0MztcdFx0Lm1hY19wb3J0X2dldF9jYXBzID0gZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMsXG4mIzQzO1x0XHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXG4mIzQzO1x0fSxcbiYjNDM7XHRbSURfRU43NTEyMjFfRVhUXSA9IHtcbiYjNDM7XHRcdC5pZCA9IElEX0VONzUxMjIxX0VYVCxcbiYjNDM7XHRcdC5wY3Nfb3BzID0gXHUwMDI2bXQ3NTMwX3Bjc19vcHMsXG4mIzQzO1x0XHQuc3dfc2V0dXAgPSBtdDc1MzBfc2V0dXAsXG4mIzQzO1x0XHQucGh5X3JlYWRfYzIyID0gbXQ3NTMwX3BoeV9yZWFkX2MyMixcbiYjNDM7XHRcdC5waHlfd3JpdGVfYzIyID0gbXQ3NTMwX3BoeV93cml0ZV9jMjIsXG4mIzQzO1x0XHQucGh5X3JlYWRfYzQ1ID0gbXQ3NTMwX3BoeV9yZWFkX2M0NSxcbiYjNDM7XHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMwX3BoeV93cml0ZV9jNDUsXG4mIzQzO1x0XHQubWFjX3BvcnRfZ2V0X2NhcHMgPSBtdDc1MzBfbWFjX3BvcnRfZ2V0X2NhcHMsXG4mIzQzO1x0XHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXG4mIzQzO1x0fSxcbiB9O1xuIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7XG4gXG4gaW50XG4gbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuJiM0MztcdGludCBwYXNzdGhyb3VnaCA9IG10NzUzeF9jaGVja19wYXNzdGhyb3VnaChwcml2LVx1MDAzZWRldik7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcbiYjNDM7XHRpZiAocGFzc3Rocm91Z2ggXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcGFzc3Rocm91Z2g7XG4mIzQzO1xuIFx0cHJpdi1cdTAwM2VkcyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdi1cdTAwM2VkcyksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwcml2LVx1MDAzZWRzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0zNTQ0LDcgJiM0Mzs0MDE4LDE0IEBAIG10NzUzMF9wcm9iZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0cHJpdi1cdTAwM2VpZCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VpZDtcbiBcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuIFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbi1cdHByaXYtXHUwMDNlZHMtXHUwMDNlb3BzID0gXHUwMDI2bXQ3NTMwX3N3aXRjaF9vcHM7XG4mIzQzO1xuJiM0MztcdGlmIChwYXNzdGhyb3VnaCkge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VvcHMgPSBcdTAwMjZtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcztcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2ggPSB0cnVlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWRzLVx1MDAzZW9wcyA9IFx1MDAyNm10NzUzMF9zd2l0Y2hfb3BzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwcml2LVx1MDAzZWRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNm10NzUzeF9waHlsaW5rX21hY19vcHM7XG4gXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcmVnX211dGV4KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oXG5pbmRleCAyYmJiZTYxN2I1MmVlLi4xYTQzMjk3NDljMGYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcbkBAIC0yNCw2ICYjNDM7MjQsOCBAQCBlbnVtIG10NzUzeF9pZCB7XG4gXHRJRF9FTjc1ODEgPSA0LFxuIFx0SURfQU43NTgzID0gNSxcbiBcdElEX0VONzUyOCA9IDYsXG4mIzQzO1x0SURfRU43NTEyMjEgPSA3LFxuJiM0MztcdElEX0VONzUxMjIxX0VYVCA9IDgsXG4gfTtcbiBcbiAjZGVmaW5lXHROVU1fVFJHTUlJX0NUUkxcdFx0XHQ1XG5AQCAtNDAsNiAmIzQzOzQyLDcgQEAgZW51bSBtdDc1M3hfaWQge1xuIC8qIFJlZ2lzdGVyIGZvciBBUkwgZ2xvYmFsIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1UNzUzWF9BR0NcdFx0XHQweGNcbiAjZGVmaW5lICBMT0NBTF9FTlx0XHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBBR0NfTDJMRU5fQ0hLXHRcdFx0QklUKDQpXG4gXG4gLyogUmVnaXN0ZXIgZm9yIE1BQyBmb3J3YXJkIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1UNzUzWF9NRkNcdFx0XHQweDEwXG5AQCAtMzU1LDYgJiM0MzszNTgsOSBAQCBlbnVtIG10NzUzMF92bGFuX3BvcnRfYWNjX2ZybSB7XG4gI2RlZmluZSBNVDc1M1hfUE1DUl9QKHgpXHRcdCgweDMwMDAgJiM0MzsgKCh4KSAqIDB4MTAwKSlcbiAjZGVmaW5lICBQTUNSX0lGR19YTUlUX01BU0tcdFx0R0VOTUFTSygxOSwgMTgpXG4gI2RlZmluZSAgUE1DUl9JRkdfWE1JVCh4KVx0XHRGSUVMRF9QUkVQKFBNQ1JfSUZHX1hNSVRfTUFTSywgeClcbiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzk2XHRcdDBcbiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUX1JBTkRcdFx0MVxuJiM0MzsjZGVmaW5lICAgIFBNQ1JfSUZHX1hNSVRfNjRcdFx0MlxuICNkZWZpbmUgIFBNQ1JfRVhUX1BIWVx0XHRcdEJJVCgxNylcbiAjZGVmaW5lICBQTUNSX01BQ19NT0RFXHRcdFx0QklUKDE2KVxuICNkZWZpbmUgIE1UNzUzMF9GT1JDRV9NT0RFXHRcdEJJVCgxNSlcbkBAIC01ODMsNiAmIzQzOzU4OSw4IEBAIGVudW0gbXQ3NTMxX2Nsa19za2V3IHtcbiAjZGVmaW5lIE1UNzUzWF9NVFJBUFx0XHRcdDB4NzgwNFxuICNkZWZpbmUgIE1UNzUzMF9QNV9QSFkwX1NFTFx0XHRCSVQoMjApXG4gI2RlZmluZSAgTVQ3NTMwX0NIR19UUkFQXHRcdEJJVCgxNilcbiYjNDM7I2RlZmluZSAgTVQ3NTMwX0NLX1NFTFx0XHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgTVQ3NTMwX0xPT1BfREVUX0RJU0FCTEVcdEJJVCgxNClcbiAjZGVmaW5lICBNVDc1MzBfUDVfTUFDX1NFTFx0XHRCSVQoMTMpXG4gI2RlZmluZSAgTVQ3NTMwX1A2X0RJU1x0XHRcdEJJVCg4KVxuICNkZWZpbmUgIE1UNzUzMF9QNV9SR01JSV9NT0RFXHRcdEJJVCg3KVxuQEAgLTU5OSw2ICYjNDM7NjA3LDggQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcbiAvKiBSZWdpc3RlciBmb3IgVE9QIHNpZ25hbCBjb250cm9sICovXG4gI2RlZmluZSBNVDc1MzBfVE9QX1NJR19DVFJMXHRcdDB4NzgwOFxuICNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9OT1JNQUxcdFx0KEJJVCgxNykgfCBCSVQoMTYpKVxuJiM0MzsvKiBVbmRvY3VtZW50ZWQgKi9cbiYjNDM7I2RlZmluZSAgVE9QX1NJR19DVFJMX0IwXHRcdEJJVCgwKVxuIFxuICNkZWZpbmUgTVQ3NTMxX1RPUF9TSUdfU1JcdFx0MHg3ODBjXG4gI2RlZmluZSAgUEFEX0RVQUxfU0dNSUlfRU5cdFx0QklUKDEpXG5AQCAtNjQ1LDE4ICYjNDM7NjU1LDMxIEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1JDS19SVFRcdFx0MHg3YTA0XG4gI2RlZmluZSAgRFFTMV9HQVRFXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIERRUzBfR0FURVx0XHRcdEJJVCgzMClcbiYjNDM7LyogVW5kb2N1bWVudGVkICovXG4mIzQzOyNkZWZpbmUgIEVONzUxMjIxX0IxN1x0XHRcdEJJVCgxNylcbiBcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkQoeClcdFx0KDB4N2ExMCAmIzQzOyAoeCkgKiA4KVxuICNkZWZpbmUgIEJTTElQX0VOXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIEVER0VfQ0hLXHRcdFx0QklUKDMwKVxuJiM0MzsjZGVmaW5lICBSRF9WQUxVRV9NQVNLXHRcdFx0R0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgIFJEX0VSUl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgOClcbiAjZGVmaW5lICBSRF9UQVBfTUFTS1x0XHRcdEdFTk1BU0soNiwgMClcbiAjZGVmaW5lICBSRF9UQVAoeClcdFx0XHRGSUVMRF9QUkVQKFJEX1RBUF9NQVNLLCB4KVxuJiM0MzsvKiBUcmFpbmluZyBkb2VzIG5vdCB0cnkgYW55dGhpbmcgYmV5b25kIHRoaXMgKi9cbiYjNDM7I2RlZmluZSAgVERfVEFQX01BWFx0XHRcdDY0XG4gXG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1RYQ1RSTFx0XHQweDdhNDBcbiAjZGVmaW5lICBUUkFJTl9UWEVOXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIFRYQ19JTlZcdFx0XHRCSVQoMzApXG4gI2RlZmluZSAgVFhfUlNUXHRcdFx0XHRCSVQoMjgpXG4gXG4mIzQzOyNkZWZpbmUgRU43NTMwX1RSR01JSV9URF9DVFJMKHgpXHQoMHg3YTUwICYjNDM7ICh4KSAqIDgpXG4mIzQzOyNkZWZpbmUgICBUR01JSV9URF9UQVBfTUFTS1x0XHRHRU5NQVNLKDExLCA4KVxuJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfUEFUX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsvKiBVc2UgYSAwMTAxMDEwMSBiaXQgcGF0dGVybiAqL1xuJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfUEFUXHRcdFx0MHg1NVxuJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfRkFJTF9QQVRcdFx0MHhhYVxuJiM0MztcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfVERfT0RUKGkpXHRcdCgweDdhNTQgJiM0MzsgOCAqIChpKSlcbiAjZGVmaW5lICBURF9ETV9EUlZQX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuICNkZWZpbmUgIFREX0RNX0RSVlAoeClcdFx0XHRGSUVMRF9QUkVQKFREX0RNX0RSVlBfTUFTSywgeClcbkBAIC03NDcsOCAmIzQzOzc3MCw2IEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSAgTVQ3NTMxX1BIWV9QTExfT0ZGXHRcdEJJVCg1KVxuICNkZWZpbmUgIE1UNzUzMV9QSFlfUExMX0JZUEFTU19NT0RFXHRCSVQoNClcbiBcbi0jZGVmaW5lIE1UNzUzWF9DVFJMX1BIWV9BRERSKGFkZHIpXHQoKChhZGRyKSAmIzQzOyAxKSBcdTAwMjYgKFBIWV9NQVhfQUREUiAtIDEpKVxuLVxuICNkZWZpbmUgQ09SRV9QTExfR1JPVVA1XHRcdFx0MHg0MDRcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzFfTUFTS1x0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzEoeClcdFx0RklFTERfUFJFUChSR19MQ0REU19QQ1dfTkNQTzFfTUFTSywgeClcbkBAIC03NjQsNiAmIzQzOzc4NSw5IEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSAgUkdfTENDRFNfQyh4KVx0XHRcdEZJRUxEX1BSRVAoUkdfTENDRFNfQ19NQVNLLCB4KVxuICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPX0NIR1x0XHRCSVQoMylcbiBcbiYjNDM7I2RlZmluZSBDT1JFX1BMTF9HUk9VUDhcdFx0XHQweDQwN1xuJiM0MzsjZGVmaW5lICBSR19MQ0REU19TU0NfRU5cdFx0QklUKDEwKVxuJiM0MztcbiAjZGVmaW5lIENPUkVfUExMX0dST1VQMTBcdFx0MHg0MDlcbiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEFfTUFTS1x0R0VOTUFTSygxMSwgMClcbiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEEoeClcdFx0RklFTERfUFJFUChSR19MQ0REU19TU0NfREVMVEFfTUFTSywgeClcbkBAIC04ODYsNiAmIzQzOzkxMCw5IEBAIHN0cnVjdCBtdDc1M3hfaW5mbyB7XG4gICogQGRldjpcdFx0VGhlIGRldmljZSBwb2ludGVyXG4gICogQGRzOlx0XHRcdFRoZSBwb2ludGVyIHRvIHRoZSBkc2EgY29yZSBzdHJ1Y3R1cmVcbiAgKiBAYnVzOlx0XHRUaGUgYnVzIHVzZWQgZm9yIHRoZSBkZXZpY2UgYW5kIGJ1aWx0LWluIFBIWVxuJiM0MzsgKiBAY2hpbGRfYnVzOlx0XHRUaGUgYnVzIGNyZWF0ZWQgYnkgdGhlIGRldmljZSwgb24gTURJTyBpbXBsZW1lbnRhdGlvbnNcbiYjNDM7ICpcdFx0XHR0aGlzIGlzIGJ1cyBpbmRpcmVjdGx5IGFjY2Vzc2VzIGBidXNgLCBvbiBNTUlPXG4mIzQzOyAqXHRcdFx0aW1wbGVtZW50YXRpb25zIHRoaXMgYnVzIGlzIHBhcnQgb2YgdGhlIHN3aXRjaC5cbiAgKiBAcmVnbWFwOlx0XHRUaGUgcmVnbWFwIGluc3RhbmNlIHJlcHJlc2VudGluZyBhbGwgc3dpdGNoIHJlZ2lzdGVyc1xuICAqIEByc3RjOlx0XHRUaGUgcG9pbnRlciB0byByZXNldCBjb250cm9sIHVzZWQgYnkgTUNNXG4gICogQGNvcmVfcHdyOlx0XHRUaGUgcG93ZXIgc3VwcGxpZWQgaW50byB0aGUgY29yZVxuQEAgLTg5OSw2ICYjNDM7OTI2LDkgQEAgc3RydWN0IG10NzUzeF9pbmZvIHtcbiAgKiBAcDVfbW9kZTpcdFx0SG9sZGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHBvcnQgNSBvZiB0aGUgTVQ3NTMwIHN3aXRjaFxuICAqIEBwNV9zZ21paTpcdFx0RmxhZyBmb3IgZGlzdGluZ3Vpc2hpbmcgaWYgcG9ydCA1IG9mIHRoZSBNVDc1MzEgc3dpdGNoXG4gICpcdFx0XHRoYXMgZ290IFNHTUlJXG4mIzQzOyAqIEBpc19wYXNzdGhyb3VnaDpcdElmIHRoaXMgc3dpdGNoIGlzIHRvIHBhc3MgdHJhZmZpYyBiZXR3ZWVuIHRoZSB1cHN0cmVhbVxuJiM0MzsgKlx0XHRcdChDUFUpIHBvcnQgYW5kIGEgc2Vjb25kIGRvd25zdHJlYW0gc3dpdGNoLCB3aXRob3V0XG4mIzQzOyAqXHRcdFx0YWx0ZXJpbmcgdGhlIERTQSB0YWcuXG4gICogQGlycV9kb21haW46XHRcdElSUSBkb21haW4gb2YgdGhlIHN3aXRjaCBpcnFfY2hpcFxuICAqIEBjcmVhdGVfc2dtaWk6XHRQb2ludGVyIHRvIGZ1bmN0aW9uIGNyZWF0aW5nIFNHTUlJIFBDUyBpbnN0YW5jZShzKVxuICAqIEBhY3RpdmVfY3B1X3BvcnRzOlx0SG9sZGluZyB0aGUgYWN0aXZlIENQVSBwb3J0c1xuQEAgLTkxMSw2ICYjNDM7OTQxLDcgQEAgc3RydWN0IG10NzUzMF9wcml2IHtcbiBcdHN0cnVjdCBkZXZpY2VcdFx0KmRldjtcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoXHQqZHM7XG4gXHRzdHJ1Y3QgbWlpX2J1c1x0XHQqYnVzO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzXHRcdCpjaGlsZF9idXM7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdCpyZWdtYXA7XG4gXHRzdHJ1Y3QgcmVzZXRfY29udHJvbFx0KnJzdGM7XG4gXHRzdHJ1Y3QgcmVndWxhdG9yXHQqY29yZV9wd3I7XG5AQCAtOTIzLDYgJiM0Mzs5NTQsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYge1xuIFx0Ym9vbFx0XHRcdHA1X3NnbWlpO1xuIFx0dThcdFx0XHRtaXJyb3Jfcng7XG4gXHR1OFx0XHRcdG1pcnJvcl90eDtcbiYjNDM7XHRib29sXHRcdFx0aXNfcGFzc3Rocm91Z2g7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3BvcnRcdHBvcnRzW01UNzUzMF9OVU1fUE9SVFNdO1xuIFx0c3RydWN0IG10NzUzeF9wY3NcdHBjc1tNVDc1MzBfTlVNX1BPUlRTXTtcbiBcdC8qIHByb3RlY3QgYW1vbmcgcHJvY2Vzc2VzIGZvciByZWdpc3RlcnMgYWNjZXNzKi9cbkBAIC05NjEsNiAmIzQzOzk5MywxNiBAQCBzdHJ1Y3QgbXQ3NTMwX2h3X3N0YXRzIHtcbiBpbnQgbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpO1xuIHZvaWQgbXQ3NTMwX3JlbW92ZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KTtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2hlbiBhbiBNTUlPIGJhc2VkIHN3aXRjaCBoYXMgYW4gTURJTyBidXMgd2hpY2ggY29udGFpbnMgYSBkb3duc3RyZWFtIE1ESU9cbiYjNDM7ICogc3dpdGNoLCB0aGUgTURJTyBidXMgaXMgbm90IG5vcm1hbGx5IHNldHVwIHVudGlsIG10NzUzeF9zZXR1cCgpIGhhcyBiZWVuXG4mIzQzOyAqIGNhbGxlZC4gQnV0IG10NzUzeF9zZXR1cCgpIGlzIG5vdCBjYWxsZWQgdW50aWwgRFNBIHNlZXMgdGhhdCBldmVyeSBzd2l0Y2ggaW5cbiYjNDM7ICogdGhlIHRyZWUgaGFzIGJlZW4gcHJvYmVkLiBDYWxsaW5nIG10NzUzMF9zZXR1cF9tZGlvKCkgYWZ0ZXIgYXQgdGhlIGVuZCBvZlxuJiM0MzsgKiB0aGUgTU1JTyBwcm9iZSBmdW5jdGlvbiBhbGxvd3MgdGhlIGRvd25zdHJlYW0gc3dpdGNoIHRvIHJlZ2lzdGVyLCBjb21wbGV0aW5nXG4mIzQzOyAqIHRoZSB0cmVlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdik7XG4mIzQzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gbXQ3NTN4X3RhYmxlW107XG4gXG4gI2VuZGlmIC8qIF9fTVQ3NTMwX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIGFuZCBhZGRzIHN1cHBvcnQgZm9yIEVjb05ldCBFTjc1MTIyMSBTb0NzIGFuZCBwYXNzdGhyb3VnaCBtb2RlIHRvIHRoZSBNZWRpYVRlayBNVDc1MzAgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAqKS4gVGhpcyBkcml2ZXIgY29udHJvbHMgc3BlY2lmaWMgcGh5c2ljYWwgTWVkaWFUZWsvRWNvTmV0IFNvQyBldGhlcm5ldCBzd2l0Y2hlcyBhbmQgTURJTy9NTUlPIGRldmljZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOGE3MjZlOTY2YWRkOWMzMDNmMzhjY2ZiMTkxNjc1ZTgxNDAyNmU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNjowNDo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwKaW5kZXggOTBiMzU4MmI3NjE5MC4uMTA2YzQwODc1MjhkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwKQEAgLTI5LDYgJiM0MzsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfAogICBhbmQgdGhlIHN3aXRjaCByZWdpc3RlcnMgYXJlIGRpcmVjdGx5IG1hcHBlZCBpbnRvIFNvQyYjMzk7cyBtZW1vcnkgbWFwIHJhdGhlciB0aGFuCiAgIHVzaW5nIE1ESU8uIFRoZSBEU0EgZHJpdmVyIGN1cnJlbnRseSBkb2VzbiYjMzk7dCBzdXBwb3J0IE1UNzYyMCB2YXJpYW50cy4KIAomIzQzOyAgRWNvTmV0IEVONzUxMjIxIFNvQ3MgaGF2ZSBhIG1lbW9yeSBtYXBwZWQgTVQ3NTMwIHdpdGggM3ggMTAvMTAwIFBIWXMgYW5kIDF4CiYjNDM7ICBnaWdhYml0IFBIWS4gU29tZSBFTjc1MTIyMSBjaGlwcyBzdWNoIGFzIEVONzUxM0cgYW5kIEVONzUyNkcgaGF2ZSBhIG11bHRpLWNoaXAKJiM0MzsgIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTVQ3NTMwIGFzIHdlbGwgYXMgdGhlIG9uLWRpZSBzd2l0Y2guIEluIHRoZXNlCiYjNDM7ICBwYWNrYWdlcywgdGhlIG11bHRpLWNoaXAgbW9kdWxlIGlzIGNvbm5lY3RlZCB0byBwb3J0IDUgb2YgdGhlIG9uLWRpZSBzd2l0Y2gKJiM0MzsgIHZpYSBhIFRSR01JSSBsaW5rLgomIzQzOwogICBUaGVyZSBpcyBvbmx5IHRoZSBzdGFuZGFsb25lIHZlcnNpb24gb2YgTVQ3NTMxLgogCiAgIFBvcnQgNSBvbiBNVDc1MzAgc3VwcG9ydHMgdmFyaW91cyBjb25maWd1cmF0aW9uczoKQEAgLTczLDYgJiM0Mzs3OSwxMyBAQCBkZXNjcmlwdGlvbjogfAogCiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LgogCiYjNDM7ICBUaGUgTVQ3NTMwIGFuZCBNVDc1MzEgc3dpdGNoZXMgYXJlIGNhcGFibGUgb2YgYmVpbmcgb3BlcmF0ZWQgaW4gJiMzNDtwYXNzdGhyb3VnaCYjMzQ7CiYjNDM7ICBtb2RlLiBJbiB0aGlzIG1vZGUsIHRyYWZmaWMgaXMgdW5jb25kaXRpb25hbGx5IHBhc3NlZCBiZXR3ZWVuIHRoZSBDUFUgcG9ydAomIzQzOyAgYW5kIHRoZSBEU0EgcG9ydCB3aGljaCBsaW5rcyB0byBhIHNlY29uZCBzd2l0Y2guIFRvIHVzZSBwYXNzdGhyb3VnaCBtb2RlLCB0aGUKJiM0MzsgIHVwc3RyZWFtIHN3aXRjaCBpcyBjb25maWd1cmVkIHdpdGggYSBEU0EgbGluayB0byB0aGUgZG93bnN0cmVhbSBzd2l0Y2guIEluCiYjNDM7ICBwYXNzdGhyb3VnaCBtb2RlIHRoZSB1cHN0cmVhbSBzd2l0Y2ggaXMgcmVzdHJpY3RlZCwgd2l0aCBubyBvdGhlciBwb3J0cyBvcgomIzQzOyAgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYWxsb3dlZC4KJiM0MzsKIHByb3BlcnRpZXM6CiAgIGNvbXBhdGlibGU6CiAgICAgb25lT2Y6CkBAIC0xMDQsNiAmIzQzOzExNywxNCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgIEJ1aWx0LWluIHN3aXRjaCBvZiB0aGUgRWNvTmV0IEVONzUyOCBTb0MKICAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1Mjgtc3dpdGNoCiAKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBCdWlsdC1pbiBzd2l0Y2ggb2YgRWNvTmV0IEVONzUxMjIxIFNvQwomIzQzOyAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1MTIyMS1zd2l0Y2gKJiM0MzsKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBNdWx0aS1jaGlwIG1vZHVsZSBNVDc1MzAgaW4gRU43NTEyMjEgU29DCiYjNDM7ICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxCiYjNDM7CiAgIHJlZzoKICAgICBtYXhJdGVtczogMQogCkBAIC0xNTMsOCAmIzQzOzE3NCw4IEBAIHByb3BlcnRpZXM6CiAgIG1lZGlhdGVrLG1jbToKICAgICB0eXBlOiBib29sZWFuCiAgICAgZGVzY3JpcHRpb246Ci0gICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCBhbmQgTVQ3NjIzQUkgU29DcyB3aGljaCB0aGUgTVQ3NTMwCi0gICAgICBzd2l0Y2ggaXMgYSBwYXJ0IG9mIHRoZSBtdWx0aS1jaGlwIG1vZHVsZS4KJiM0MzsgICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCwgTVQ3NjIzQUkgYW5kIEVONzUxMjIxIFNvQ3Mgd2hpY2gKJiM0MzsgICAgICB0aGUgTVQ3NTMwIHN3aXRjaCBpcyBhIHBhcnQgb2YgdGhlIG11bHRpLWNoaXAgbW9kdWxlLgogCiAgIHJlc2V0LWdwaW9zOgogICAgIGRlc2NyaXB0aW9uOiB8CkBAIC0yMTYsNiAmIzQzOzIzNywyMCBAQCAkZGVmczoKICAgICAgICAgICAgICAgICBwaHktbW9kZToKICAgICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbAogCiYjNDM7ICBtdDc1MzAtcGFzc3Rocm91Z2gtZHNhLXBvcnQ6CiYjNDM7ICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgICAgICYjMzQ7XihldGhlcm5ldC0pP3BvcnRzJCYjMzQ7OgomIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICYjMzQ7XihldGhlcm5ldC0pP3BvcnRAWzAtNl0kJiMzNDs6CiYjNDM7ICAgICAgICAgICAgaWY6CiYjNDM7ICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF0KJiM0MzsgICAgICAgICAgICB0aGVuOgomIzQzOyAgICAgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICAgICAgcmVnOgomIzQzOyAgICAgICAgICAgICAgICAgIGNvbnN0OiA2CiYjNDM7ICAgICAgICAgICAgICAgIHBoeS1tb2RlOgomIzQzOyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWkKJiM0MzsKICAgbXQ3NTMwLWRzYS1wb3J0OgogICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgogICAgICAgJiMzNDteKGV0aGVybmV0LSk/cG9ydHMkJiMzNDs6CkBAIC0zMjMsNiAmIzQzOzM1OCw3IEBAIGFsbE9mOgogICAgICAgICAgICAgLSBhaXJvaGEsZW43NTgxLXN3aXRjaAogICAgICAgICAgICAgLSBhaXJvaGEsYW43NTgzLXN3aXRjaAogICAgICAgICAgICAgLSBlY29uZXQsZW43NTI4LXN3aXRjaAomIzQzOyAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUxMjIxLXN3aXRjaAogICAgIHRoZW46CiAgICAgICAkcmVmOiAmIzM0OyMvJGRlZnMvYnVpbHRpbi1kc2EtcG9ydCYjMzQ7CiAgICAgICBwcm9wZXJ0aWVzOgpAQCAtMzMwLDYgJiM0MzszNjYsMTYgQEAgYWxsT2Y6CiAgICAgICAgIG1lZGlhdGVrLG1jbTogZmFsc2UKICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlCiAKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgLSBlY29uZXQsZW43NTEyMjEKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICAkcmVmOiAmIzM0OyMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0JiMzNDsKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gbWVkaWF0ZWssbWNtCiYjNDM7CiB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiAKIGV4YW1wbGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYwppbmRleCAyNGVmNTRmM2RiMmE2Li4yZmQ5ODdmZjg1MTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYwpAQCAtMTM5LDYgJiM0MzsxMzksNyBAQCBtdDc1MzFfY3JlYXRlX3NnbWlpKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O2Vjb25ldCxlbjc1MTIyMSYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWVkaWF0ZWssbXQ3NjIxJiMzNDssIC5kYXRhID0gJmFtcDttdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDttZWRpYXRlayxtdDc1MzAmIzM0OywgLmRhdGEgPSAmYW1wO210NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O21lZGlhdGVrLG10NzUzMSYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jCmluZGV4IGNmM2JkYjIzYTJkNTQuLjFhMjliMWVlZmIyYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OTg4X29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7YWlyb2hhLGFuNzU4My1zd2l0Y2gmIzM0OywgLmRhdGEgPSAmYW1wO210NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O2Fpcm9oYSxlbjc1ODEtc3dpdGNoJiMzNDssIC5kYXRhID0gJmFtcDttdDc1M3hfdGFibGVbSURfRU43NTgxXSwgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7ZWNvbmV0LGVuNzUxMjIxLXN3aXRjaCYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaCYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX0VONzUyOF0sIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWVkaWF0ZWssbXQ3OTg4LXN3aXRjaCYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CkBAIC02MSw3ICYjNDM7NjIsMTIgQEAgbXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKElTX0VSUihwcml2LSZndDtyZWdtYXApKQogCQlyZXR1cm4gUFRSX0VSUihwcml2LSZndDtyZWdtYXApOwogCi0JcmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi0mZ3Q7ZHMpOwomIzQzOwlyZXQgPSBkc2FfcmVnaXN0ZXJfc3dpdGNoKHByaXYtJmd0O2RzKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCmluZGV4IDI4Zjk0Y2QyNWI5NTUuLjZmZDQ3MTlhYWI4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKQEAgLTQ2LDYgJiM0Mzs0NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyBtdDc1MzBfbWliW10gPSB7CiAJTUlCX0RFU0MoMSwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FSTF9EUk9QLCAmIzM0O1J4QXJsRHJvcCYjMzQ7KSwKIH07CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxKQomIzQzOwkJcmV0dXJuIDEyOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwcml2LSZndDttZGlvZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBEZWZhdWx0IGlzIDFzdCBQSFkgKi8KJiM0MzsJcmV0dXJuIChwcml2LSZndDttZGlvZGV2LSZndDthZGRyICYjNDM7IDEpICZhbXA7IChQSFlfTUFYX0FERFIgLSAxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogbXQ3NTMwX211dGV4X2xvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQogewpAQCAtNjMsMzIgJiM0Mzs3NiwzNiBAQCBtdDc1MzBfbXV0ZXhfdW5sb2NrKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIHN0YXRpYyB2b2lkCiBjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKIHsKJiM0MzsJaW50IGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTsKIAlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0mZ3Q7YnVzOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFidXMpCiYjNDM7CQlidXMgPSBwcml2LSZndDtjaGlsZF9idXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWJ1cykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbXQ3NTMwX211dGV4X2xvY2socHJpdik7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi8KLQlyZXQgPSBidXMtJmd0O3dyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciksCi0JCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnI7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKLQkJCSBNSUlfTU1EX0RBVEEsIHJlZyk7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHJlZyk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyOwogCiAJLyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKJiM0MzsJcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIGN0bF9waHksCiAJCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMiB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAogCS8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJiMzOTtzIHNlbGVjdGVkIHJlZ2lzdGVyICovCi0JcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHIpLAotCQkJIE1JSV9NTURfREFUQSwgdmFsKTsKJiM0MzsJcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgdmFsKTsKIGVycjoKIAlpZiAocmV0ICZsdDsgMCkKIAkJZGV2X2VycigmYW1wO2J1cy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcbiYjMzQ7KTsKQEAgLTk5LDMzICYjNDM7MTE2LDM3IEBAIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQogc3RhdGljIHZvaWQKIGNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpCiB7CiYjNDM7CWludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7CiAJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtJmd0O2J1czsKIAl1MzIgdmFsOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFidXMpCiYjNDM7CQlidXMgPSBwcml2LSZndDtjaGlsZF9idXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWJ1cykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbXQ3NTMwX211dGV4X2xvY2socHJpdik7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi8KLQlyZXQgPSBidXMtJmd0O3dyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciksCi0JCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnI7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKLQkJCSBNSUlfTU1EX0RBVEEsIHJlZyk7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHJlZyk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyOwogCiAJLyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKJiM0MzsJcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIGN0bF9waHksCiAJCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMiB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAogCS8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqLwotCXJldCA9IGJ1cy0mZ3Q7cmVhZChidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHIpLAotCQkJTUlJX01NRF9EQVRBKTsKJiM0MzsJcmV0ID0gYnVzLSZndDtyZWFkKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnI7CiAJdmFsID0gcmV0OwpAQCAtMTMzLDggJiM0MzsxNTQsNyBAQCBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KQogCXZhbCAmYW1wOz0gfm1hc2s7CiAJdmFsIHw9IHNldDsKIAkvKiBXcml0ZSB0aGUgZGF0YSBpbnRvIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKLQkJCSBNSUlfTU1EX0RBVEEsIHZhbCk7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHZhbCk7CiBlcnI6CiAJaWYgKHJldCAmbHQ7IDApCiAJCWRldl9lcnIoJmFtcDtidXMtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gd3JpdGUgbW1kIHJlZ2lzdGVyXG4mIzM0Oyk7CkBAIC0zMjcsMTIgJiM0MzszNDcsMTkgQEAgbXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIAlyZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIE1UNzUzWF9NVFJBUCwgJmFtcDt4dGFsKTsKIAl4dGFsICZhbXA7PSBNVDc1MzBfWFRBTF9NQVNLOwogCiYjNDM7CS8qIEVONzUxMjIxIG9uLWRpZSBkb2VzIG5vdCByZXBvcnQgY2xvY2sgc3BlZWQgaW4gTVRSQVAgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxKQomIzQzOwkJeHRhbCA9IE1UNzUzMF9YVEFMXzI1TUhaOwomIzQzOwogCWlmICh4dGFsID09IE1UNzUzMF9YVEFMXzI1TUhaKQogCQlzc2NfZGVsdGEgPSAweDU3OwogCWVsc2UKIAkJc3NjX2RlbHRhID0gMHg4NzsKIAotCWlmIChwcml2LSZndDtpZCA9PSBJRF9NVDc2MjEpIHsKJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxX0VYVCB8fCBwcml2LSZndDtpZCA9PSBJRF9FTjc1MTIyMSkgewomIzQzOwkJLyogUExMIGZyZXF1ZW5jeTogMzYyLjVNaHogKi8KJiM0MzsJCW5jcG8xID0gMHgxZDAwOwomIzQzOwl9IGVsc2UgaWYgKHByaXYtJmd0O2lkID09IElEX01UNzYyMSkgewogCQkvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi8KIAkJaWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopCiAJCQluY3BvMSA9IDB4MDY0MDsKQEAgLTQ0OSw2ICYjNDM7NDc2LDI1MSBAQCBtdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIAl1c2xlZXBfcmFuZ2UoMjUsIDM1KTsKIH0KIAomIzQzO3N0YXRpYyBib29sCiYjNDM7ZW43NTEyMjFfdHJnbWlpX2NhbF9vayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LCB1MzIgcmVnLCBpbnQgY2hhbiwgaW50IGkpCiYjNDM7ewomIzQzOwl1MzIgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmVnbWFwX3JlYWQocngtJmd0O3JlZ21hcCwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CXJlZ21hcF93cml0ZShyeC0mZ3Q7cmVnbWFwLCByZWcsIHZhbCB8IEVER0VfQ0hLKTsKJiM0MzsJcmVnbWFwX3dyaXRlKHJ4LSZndDtyZWdtYXAsIHJlZywgdmFsICZhbXA7IH5FREdFX0NISyk7CiYjNDM7CXJlZ21hcF9yZWFkKHJ4LSZndDtyZWdtYXAsIHJlZywgJmFtcDt2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gRklFTERfR0VUKFJEX1ZBTFVFX01BU0ssIHZhbCkgPT0gVEdNSUlfVERfUEFUICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICFGSUVMRF9HRVQoUkRfRVJSX01BU0ssIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCwKJiM0MzsJCQkJICAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsCiYjNDM7CQkJCSAgICB1OCAqZGVmYXVsdF90YXBzKQomIzQzO3sKJiM0MzsJaW50IGNoYW5uZWw7CiYjNDM7CiYjNDM7CXJlZ21hcF9zZXRfYml0cyh0eC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7CiYjNDM7CiYjNDM7CS8qIFB1dCBmYWlsIHBhdHRlcm4gb24gZXZlcnkgY2hhbm5lbCAqLwomIzQzOwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsICZsdDsgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsJiM0MzsmIzQzOykKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyh0eC0mZ3Q7cmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksCiYjNDM7CQkJCSAgIFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkJICAgICAgVEdNSUlfVERfRkFJTF9QQVQpKTsKJiM0MzsKJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiByeF9yZWcgPSBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpOwomIzQzOwkJaW50IGJlc3RfdGFwID0gLTEsIGJlc3RfcmFuZ2UgPSAtMTsKJiM0MzsJCWludCBmaXJzdCA9IC0xOwomIzQzOwkJdTggZGFjOwomIzQzOwkJY2hhciBsb2dbVERfVEFQX01BWCAmIzQzOyAxXTsKJiM0MzsKJiM0MzsJCS8qIFB1dCB0ZXN0IHBhdHRlcm4gb24gY29ycmVjdCBjaGFubmVsICovCiYjNDM7CQlyZWdtYXBfdXBkYXRlX2JpdHModHgtJmd0O3JlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLAomIzQzOwkJCQkgICBUR01JSV9URF9QQVRfTUFTSywKJiM0MzsJCQkJICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSywgVEdNSUlfVERfUEFUKSk7CiYjNDM7CiYjNDM7CQlmb3IgKGRhYyA9IDA7IGRhYyAmbHQ7IFREX1RBUF9NQVg7IGRhYyYjNDM7JiM0MzspIHsKJiM0MzsJCQkvKiBTZXQgVEFQICovCiYjNDM7CQkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LSZndDtyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssCiYjNDM7CQkJCQkgICBSRF9UQVAoZGFjKSk7CiYjNDM7CiYjNDM7CQkJLyogQ2hlY2sgaWYgd2UgY2FuIGdldCBhIGdvb2QgcmVhZCAqLwomIzQzOwkJCWlmIChlbjc1MTIyMV90cmdtaWlfY2FsX29rKHJ4LCByeF9yZWcsIGNoYW5uZWwsIGRhYykpIHsKJiM0MzsJCQkJbG9nW2RhY10gPSAmIzM5OyYjNDM7JiMzOTs7CiYjNDM7CiYjNDM7CQkJCWlmIChmaXJzdCAmbHQ7IDApCiYjNDM7CQkJCQlmaXJzdCA9IGRhYzsKJiM0MzsKJiM0MzsJCQkJaWYgKChkYWMgLSBmaXJzdCkgJmd0OyBiZXN0X3JhbmdlKSB7CiYjNDM7CQkJCQliZXN0X3RhcCA9IChmaXJzdCAmIzQzOyBkYWMpIC8gMjsKJiM0MzsJCQkJCWJlc3RfcmFuZ2UgPSBkYWMgLSBmaXJzdDsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWxvZ1tkYWNdID0gJiMzOTsuJiMzOTs7CiYjNDM7CQkJCWZpcnN0ID0gLTE7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJbG9nW1REX1RBUF9NQVhdID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwkJaWYgKGJlc3RfdGFwICZndDsgLTEpIHsKJiM0MzsJCQlyZWdtYXBfdXBkYXRlX2JpdHMocngtJmd0O3JlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSywKJiM0MzsJCQkJCSAgIFJEX1RBUChiZXN0X3RhcCkpOwomIzQzOwomIzQzOwkJCWxvZ1tiZXN0X3RhcF0gPSAmIzM5O1gmIzM5OzsKJiM0MzsKJiM0MzsJCQlkZXZfaW5mbyhyeC0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtUUkdNSUkgbGFuZSAlZDogJXMgdGFwICVkIG9sZCAlZFxuJiMzNDssCiYjNDM7CQkJCSBjaGFubmVsLCBsb2csIGJlc3RfdGFwLCBkZWZhdWx0X3RhcHNbY2hhbm5lbF0pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZWdtYXBfdXBkYXRlX2JpdHMocngtJmd0O3JlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSywKJiM0MzsJCQkJCSAgIFJEX1RBUChkZWZhdWx0X3RhcHNbY2hhbm5lbF0pKTsKJiM0MzsKJiM0MzsJCQlkZXZfd2FybihyeC0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtUUkdNSUkgbGFuZSAlZDogJXMgY2FsaWJyYXRpb24gZmFpbGVkLCBwcmVzZXJ2aW5nIHRhcCAldVxuJiMzNDssCiYjNDM7CQkJCSBjaGFubmVsLCBsb2csIGRlZmF1bHRfdGFwc1tjaGFubmVsXSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBSZXR1cm4gY2hhbm5lbCB0byBmYWlsdXJlIHBhdHRlcm4gKi8KJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyh0eC0mZ3Q7cmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksCiYjNDM7CQkJCSAgIFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkJICAgICAgVEdNSUlfVERfRkFJTF9QQVQpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZWdtYXBfY2xlYXJfYml0cyh0eC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsCiYjNDM7CQkgICAgICB1OCBjbGtfZHJ2bikKJiM0Mzt7CiYjNDM7CWludCBjaGFubmVsOwomIzQzOwomIzQzOwkvKiBUeCBkcml2aW5nIGZvciBUUkdNSUkgcGF0aCBvbiBTb0MgKi8KJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1REX09EVChjaGFubmVsKSwKJiM0MzsJCQkgICAgIFREX0RNX0RSVlAoZHJ2cCkgfCBURF9ETV9EUlZOKGRydm4pKTsKJiM0MzsKJiM0MzsJLyogVW5kb2N1bWVudGVkIDZ0aCBjaGFubmVsLCBwcm9iYWJseSBkcml2ZSBzdHJlbmd0aCBmb3IgY2xvY2sgbGluZS4gKi8KJiM0MzsJcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9URF9PRFQoNSksIFREX0RNX0RSVlAoZHJ2cCkgfAomIzQzOwkJICAgICBURF9ETV9EUlZOKGRydm4pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0Mztlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKmV4dCwgaW50IGV4dF9wb3J0LAomIzQzOwkJCSAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KQomIzQzO3sKJiM0MzsJdTggZGVmYXVsdF90YXBzX29uZGllW05VTV9UUkdNSUlfQ1RSTF07CiYjNDM7CXU4IGRlZmF1bHRfdGFwc19leHRbTlVNX1RSR01JSV9DVFJMXTsKJiM0MzsJdTMyIG1jcl9kb3duLCBtY3JfdXA7CiYjNDM7CWludCBjaGFubmVsOwomIzQzOwlpbnQgcmVnX3ZhbDsKJiM0MzsKJiM0MzsJLyogQk9USDogUHV0IGludGVyZmFjZXMgaW4gYSBkb3duZWQgc3RhdGUgKi8KJiM0MzsJbWNyX2Rvd24gPSBQTUNSX0lGR19YTUlUKFBNQ1JfSUZHX1hNSVRfNjQpIHwgUE1DUl9NQUNfTU9ERSB8CiYjNDM7CQkgICBNVDc1MzBfRk9SQ0VfTU9ERSB8IFBNQ1JfTUFDX1JYX0VOIHwgUE1DUl9CQUNLT0ZGX0VOIHwKJiM0MzsJCSAgIFBNQ1JfQkFDS1BSX0VOIHwgUE1DUl9GT1JDRV9TUEVFRF8xMDAwIHwgUE1DUl9GT1JDRV9GRFg7CiYjNDM7CXJlZ21hcF93cml0ZShvbmRpZS0mZ3Q7cmVnbWFwLCAgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX2Rvd24pOwomIzQzOwlyZWdtYXBfd3JpdGUoZXh0LSZndDtyZWdtYXAsIE1UNzUzWF9QTUNSX1AoZXh0X3BvcnQpLCBtY3JfZG93bik7CiYjNDM7CXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTsKJiM0MzsKJiM0MzsJLyogQk9USDogUmVzZXQgVFggKi8KJiM0MzsJcmVnbWFwX3NldF9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTsKJiM0MzsJcmVnbWFwX3NldF9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpOwomIzQzOwl1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7CiYjNDM7CXJlZ21hcF9jbGVhcl9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTsKJiM0MzsJcmVnbWFwX2NsZWFyX2JpdHMob25kaWUtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IFJlc2V0IFJYIGNvbnRyb2xsZXJzIGRvd24gKi8KJiM0MzsJcmVnbWFwX3NldF9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpOwomIzQzOwlyZWdtYXBfc2V0X2JpdHMob25kaWUtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTsKJiM0MzsKJiM0MzsJLyogQk9USDogU2V0IFRYIGRyaXZlIHN0cmVuZ3RoLCBNQ00gdXNlcyBtb3JlICovCiYjNDM7CWVuNzUxMjIxX3NldF90eF9kcml2ZShvbmRpZSwgOCwgOCwgNywgNyk7CiYjNDM7CWVuNzUxMjIxX3NldF90eF9kcml2ZShleHQsIDExLCAxMSwgMTYsIDE2KTsKJiM0MzsKJiM0MzsJLyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi8KJiM0MzsJcmVnbWFwX2NsZWFyX2JpdHMoZXh0LSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7CiYjNDM7CXJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IFBvcnRzIHVwICovCiYjNDM7CW1jcl91cCA9IG1jcl9kb3duIHwgUE1DUl9NQUNfVFhfRU4gfCBQTUNSX0ZPUkNFX0xOSzsKJiM0MzsJcmVnbWFwX3dyaXRlKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzWF9QTUNSX1Aob25kaWVfcG9ydCksIG1jcl91cCk7CiYjNDM7CXJlZ21hcF93cml0ZShleHQtJmd0O3JlZ21hcCwgTVQ3NTNYX1BNQ1JfUChleHRfcG9ydCksIG1jcl91cCk7CiYjNDM7CiYjNDM7CS8qIE1DTTogU2V0IEV4dC0mZ3Q7U29DIFRYIGRlbGF5IHRvIDAgKi8KJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspCiYjNDM7CQlyZWdtYXBfY2xlYXJfYml0cyhleHQtJmd0O3JlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLAomIzQzOwkJCQkgIFRHTUlJX1REX1RBUF9NQVNLKTsKJiM0MzsKJiM0MzsJLyogU09DOiBPRFQgKi8KJiM0MzsJcmVnbWFwX3NldF9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX1JUVCwKJiM0MzsJCQlEUVMxX0dBVEUgfCBEUVMwX0dBVEUgfCBFTjc1MTIyMV9CMTcpOwomIzQzOwomIzQzOwkvKiBTT0M6IFVuZG9jdW1lbnRlZCAqLwomIzQzOwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsICZsdDsgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsJiM0MzsmIzQzOykKJiM0MzsJCXJlZ21hcF93cml0ZShvbmRpZS0mZ3Q7cmVnbWFwLCAgKDB4N2ExNCAmIzQzOyBjaGFubmVsICogOCksCiYjNDM7CQkJICAgICAweDMyMjc3MDApOwomIzQzOwomIzQzOwkvKiBNQ006IFNwcmVhZCBzcGVjdHJ1bSBjbG9jayovCiYjNDM7CWNvcmVfY2xlYXIoZXh0LCBDT1JFX1BMTF9HUk9VUDgsIFJHX0xDRERTX1NTQ19FTik7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IFplcm8gY2xvY2sgZGVsYXkgKi8KJiM0MzsJcmVnbWFwX2NsZWFyX2JpdHMoZXh0LSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsCiYjNDM7CQkJICBEUVNJMF9UQVBfTUFTSyk7CiYjNDM7CXJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsCiYjNDM7CQkJICBEUVNJMF9UQVBfTUFTSyk7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IENvbGxlY3QgYW5kIHRoZW4gemVybyBldmVyeSBSWCBUQVAgKi8KJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspIHsKJiM0MzsJCXJlZ192YWwgPSAwOwomIzQzOwkJcmVnbWFwX3JlYWQoZXh0LSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksICZhbXA7cmVnX3ZhbCk7CiYjNDM7CQlkZWZhdWx0X3RhcHNfZXh0W2NoYW5uZWxdID0gRklFTERfR0VUKFJEX1RBUF9NQVNLLCByZWdfdmFsKTsKJiM0MzsJCXJlZ21hcF9jbGVhcl9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLAomIzQzOwkJCQkgIFJEX1RBUF9NQVNLKTsKJiM0MzsKJiM0MzsJCXJlZ192YWwgPSAwOwomIzQzOwkJcmVnbWFwX3JlYWQob25kaWUtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSwgJmFtcDtyZWdfdmFsKTsKJiM0MzsJCWRlZmF1bHRfdGFwc19vbmRpZVtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7CiYjNDM7CQlyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLAomIzQzOwkJCQkgIFJEX1RBUF9NQVNLKTsKJiM0MzsJfQomIzQzOwomIzQzOwllbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihvbmRpZSwgZXh0LCBkZWZhdWx0X3RhcHNfZXh0KTsKJiM0MzsJZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oZXh0LCBvbmRpZSwgZGVmYXVsdF90YXBzX2V4dCk7CiYjNDM7CiYjNDM7CWRldl9pbmZvKG9uZGllLSZndDtkZXYsICYjMzQ7VFJHTUlJIGludGVyLXN3aXRjaCBsaW5rIGluaXRpYWxpemVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLSZndDtkczsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKnBlZXJfZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDsKJiM0MzsJc3RydWN0IG10NzUzMF9wcml2ICpwZWVyOwomIzQzOwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7CiYjNDM7CXN0cnVjdCBkc2FfbGluayAqZGw7CiYjNDM7CXUzMiBwbXNyID0gMDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aWQgIT0gSURfRU43NTEyMjFfRVhUKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZHAtJmd0O3R5cGUgIT0gRFNBX1BPUlRfVFlQRV9EU0EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BNU1JfUChkcC0mZ3Q7aW5kZXgpLCAmYW1wO3Btc3IpOwomIzQzOwomIzQzOwlpZiAoIShwbXNyICZhbXA7IFBNU1JfTElOSykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZGwsICZhbXA7ZHMtJmd0O2RzdC0mZ3Q7cnRhYmxlLCBsaXN0KSB7CiYjNDM7CQlpZiAoZGwtJmd0O2RwICE9IGRwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcGVlcl9kcCA9IGRsLSZndDtsaW5rX2RwOwomIzQzOwomIzQzOwkJaWYgKHBlZXJfZHAtJmd0O3R5cGUgIT0gRFNBX1BPUlRfVFlQRV9EU0EpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlwZWVyX2RzID0gZGwtJmd0O2xpbmtfZHAtJmd0O2RzOwomIzQzOwomIzQzOwkJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwZWVyX2RzLSZndDtkZXYtJmd0O29mX25vZGUsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZWNvbmV0LGVuNzUxMjIxLXN3aXRjaCYjMzQ7KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXBlZXIgPSBwZWVyX2RzLSZndDtwcml2OwomIzQzOwomIzQzOwkJaWYgKHBlZXItJmd0O2lkICE9IElEX0VONzUxMjIxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZW43NTEyMjFfdHJnbWlpX3BhaXJfc2V0dXAocHJpdiwgZHAtJmd0O2luZGV4LCBwZWVyLAomIzQzOwkJCQkJICAgcGVlcl9kcC0mZ3Q7aW5kZXgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIG10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogewpAQCAtMTI4MSwxMyAmIzQzOzE1NTMsNDEgQEAgbXQ3NTN4X3RyYXBfZnJhbWVzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIAkJCQkgICBUT19DUFVfRldfQ1BVX09OTFkpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO210NzUzMF9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpOwomIzQzOwomIzQzOy8qIElmIHRoaXMgc3dpdGNoIGlzIGRvd25zdHJlYW0gb2YgYW5vdGhlciBzd2l0Y2ggdGhhdCBpcyBpbiBwYXNzdGhyb3VnaCBtb2RlLAomIzQzOyAqIHRoZSAmIzM0O0NQVSYjMzQ7IHBvcnQgaXMgYWN0dWFsbHkgYSBEU0EgcG9ydC4KJiM0MzsgKi8KIHN0YXRpYyB2b2lkCiBtdDc1M3hfY3B1X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCiB7CiAJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiAKLQkvKiBFbmFibGUgTWVkaWF0ZWsgaGVhZGVyIG1vZGUgb24gdGhlIGNwdSBwb3J0ICovCi0JcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX3Bhc3N0aHJvdWdoKSB7CiYjNDM7CQkvKiBEaXNhYmxlIHBhcnNpbmcgb2YgdGhlIERTQSB0YWcsIGl0IHdpbGwgYmUgZm9yd2FyZGVkIGJsaW5kbHkKJiM0MzsJCSAqIHRvIHRoZSBkb3duc3RyZWFtIHN3aXRjaC4KJiM0MzsJCSAqLwomIzQzOwkJcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLAomIzQzOwkJCSAgICAgVkxBTl9BVFRSKE1UNzUzMF9WTEFOX1RSQU5TUEFSRU5UKSB8CiYjNDM7CQkJICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgcG9ydCBpcyBub3QgY29uZmlndXJlZCB0byBwYXJzZSBEU0EgdGFncywgc28gdGhleSBhcmUKJiM0MzsJCSAqIGxpYWJsZSB0byBiZSBjb25mdXNlZCBmb3IgbGVuZ3RoIGZpZWxkcywgc28gbGVuZ3RoIGNoZWNrIGlzCiYjNDM7CQkgKiBkaXNhYmxlZC4KJiM0MzsJCSAqLwomIzQzOwkJcmVnbWFwX2NsZWFyX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1M1hfQUdDLCBBR0NfTDJMRU5fQ0hLKTsKJiM0MzsKJiM0MzsJCS8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIE1UVSBpcyBvbmx5IGVuZm9yY2VkIGRvd25zdHJlYW0gKi8KJiM0MzsJCW10NzUzMF9wb3J0X2NoYW5nZV9tdHUoZHMsIHBvcnQsIE1UNzUzMF9NQVhfTVRVKTsKJiM0MzsKJiM0MzsJCS8qIExvb3AgZGV0ZWN0aW9uIGhhcyBubyB2YWx1ZSBpbiBwYXNzdGhyb3VnaCBtb2RlICovCiYjNDM7CQlyZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1M1hfTVRSQVAsCiYjNDM7CQkJCU1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIE5vdCBwYXNzdGhyb3VnaCwgZW5hYmxlIERTQSB0YWcgaGFuZGxpbmcgb24gQ1BVIHBvcnQuICovCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksIFBPUlRfU1BFQ19UQUcpOwomIzQzOwl9CiAKIAkvKiBFbmFibGUgZmxvb2Rpbmcgb24gdGhlIENQVSBwb3J0ICovCiAJcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTNYX01GQywKQEAgLTEzMTcsNiAmIzQzOzE2MTcsNyBAQCBzdGF0aWMgaW50CiBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKIHsKJiM0MzsJaW50IHVwc3RyZWFtX3B0ID0gZHNhX3N3aXRjaF91cHN0cmVhbV9wb3J0KGRzKTsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOwogCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwogCkBAIC0xMzI3LDE3ICYjNDM7MTYyOCw0MyBAQCBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkgKiBicmlkZ2UuCiAJICovCiAJaWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKSB7Ci0JCXN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZHAtJmd0O2NwdV9kcDsKJiM0MzsJCXByaXYtJmd0O3BvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKHVwc3RyZWFtX3B0KSk7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAoZHNhX3BvcnRfaXNfZHNhKGRwKSAmYW1wOyZhbXA7IGRwLSZndDtpbmRleCAhPSB1cHN0cmVhbV9wdCkgewomIzQzOwkJcHJpdi0mZ3Q7cG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTsKJiM0MzsKJiM0MzsJCS8qIFNob3VsZCBub3QgaGFwcGVuICovCiYjNDM7CQlXQVJOX09OX09OQ0UoIXByaXYtJmd0O2lzX3Bhc3N0aHJvdWdoKTsKJiM0MzsKJiM0MzsJCS8qIFdlIGFyZSBwYXNzaW5nIHRocm91Z2ggdG8gYSBkb3duc3RyZWFtIHN3aXRjaCBzbyB3ZSBzZXQgYm90aAomIzQzOwkJICogQ1BVIGFuZCBkb3duc3RyZWFtIGxpbmsgdG8gcGFzcyB0cmFmZmljIHVudG91Y2hlZCBzbyB0aGF0CiYjNDM7CQkgKiB0aGUgU1RBRyBmcm9tIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB3aWxsIHBhc3MgdG8gdGhlIHVwc3RyZWFtLgomIzQzOwkJICovCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksCiYjNDM7CQkJICAgICBWTEFOX0FUVFIoTVQ3NTMwX1ZMQU5fVFJBTlNQQVJFTlQpIHwKJiM0MzsJCQkgICAgIFBWQ19FR19UQUcoTVQ3NTMwX1ZMQU5fRUdfRElTQUJMRUQpKTsKJiM0MzsKJiM0MzsJCS8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi8KJiM0MzsJCXJlZ21hcF9zZXRfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzWF9NRkMsIEJDX0ZGUChCSVQocG9ydCkpIHwKJiM0MzsJCQkJVU5NX0ZGUChCSVQocG9ydCkpIHwgVU5VX0ZGUChCSVQocG9ydCkpKTsKIAotCQlwcml2LSZndDtwb3J0c1twb3J0XS5wbSB8PSBQQ1JfTUFUUklYKEJJVChjcHVfZHAtJmd0O2luZGV4KSk7CiYjNDM7CQkvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuCiYjNDM7CQkgKiBUaGlzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBQT1JUX1NQRUNfVEFHIGlzIHVuc2V0LgomIzQzOwkJICovCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUENSX1AodXBzdHJlYW1fcHQpLAomIzQzOwkJCSAgICAgUENSX01BVFJJWChCSVQocG9ydCkpKTsKIAl9CiAJcHJpdi0mZ3Q7cG9ydHNbcG9ydF0uZW5hYmxlID0gdHJ1ZTsKLQlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUENSX1AocG9ydCksIFBDUl9NQVRSSVhfTUFTSywKLQkJCSAgIHByaXYtJmd0O3BvcnRzW3BvcnRdLnBtKTsKJiM0MzsKJiM0MzsJLyogSW4gcGFzc3Rocm91Z2ggbW9kZSwgQ1BVIHBvcnQgbWFzayBpcyBzZXQgYWJvdmUuICovCiYjNDM7CWlmICghKHByaXYtJmd0O2lzX3Bhc3N0aHJvdWdoICZhbXA7JmFtcDsgZHAtJmd0O2luZGV4ID09IHVwc3RyZWFtX3B0KSkKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzMF9QQ1JfUChwb3J0KSwKJiM0MzsJCQkJICAgUENSX01BVFJJWF9NQVNLLCBwcml2LSZndDtwb3J0c1twb3J0XS5wbSk7CiAKIAltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbXV0ZXgpOwogCi0JaWYgKHByaXYtJmd0O2lkICE9IElEX01UNzUzMCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX01UNzYyMSkKJiM0MzsJaWYgKHByaXYtJmd0O2lkICE9IElEX01UNzUzMCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX01UNzYyMSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwcml2LSZndDtpZCAhPSBJRF9FTjc1MTIyMSAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxX0VYVCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocG9ydCA9PSA1KQpAQCAtMTM2NCw3ICYjNDM7MTY5MSw4IEBAIG10NzUzMF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIAogCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19tdXRleCk7CiAKLQlpZiAocHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NTMwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NjIxKQomIzQzOwlpZiAocHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NTMwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NjIxICZhbXA7JmFtcDsKJiM0MzsJICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxICZhbXA7JmFtcDsgcHJpdi0mZ3Q7aWQgIT0gSURfRU43NTEyMjFfRVhUKQogCQlyZXR1cm47CiAKIAkvKiBEbyBub3Qgc2V0IE1UNzUzMF9QNV9ESVMgd2hlbiBwb3J0IDUgaXMgYmVpbmcgdXNlZCBmb3IgUEhZIG11eGluZy4gKi8KQEAgLTEzODUsNyAmIzQzOzE3MTMsNyBAQCBtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KQogCSAqIGxhcmdlc3QgTVRVIG9mIHRoZSB1c2VyIHBvcnRzLiBCZWNhdXNlIHRoZSBzd2l0Y2ggb25seSBoYXMgYSBnbG9iYWwKIAkgKiBSWCBsZW5ndGggcmVnaXN0ZXIsIG9ubHkgYWxsb3dpbmcgQ1BVIHBvcnQgaGVyZSBpcyBlbm91Z2guCiAJICovCi0JaWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKQomIzQzOwlpZiAoIWRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBwb3J0KSkKIAkJcmV0dXJuIDA7CiAKIAlyZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIE1UNzUzMF9HTUFDQ1IsICZhbXA7dmFsKTsKQEAgLTIzMzMsNyAmIzQzOzI2NjEsNyBAQCBtdDc1MzBfZnJlZV9tZGlvX2lycShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiAJfQogfQogCi1zdGF0aWMgaW50CiYjNDM7aW50CiBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICptbnAsICpucCA9IHByaXYtJmd0O2Rldi0mZ3Q7b2Zfbm9kZTsKQEAgLTIzNDMsNiAmIzQzOzI2NzEsMTAgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQogCXN0YXRpYyBpbnQgaWR4OwogCWludCByZXQgPSAwOwogCiYjNDM7CS8qIEFscmVhZHkgZG9uZSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpbGRfYnVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJbW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsICYjMzQ7bWRpbyYjMzQ7KTsKIAogCWlmIChtbnAgJmFtcDsmYW1wOyAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShtbnApKQpAQCAtMjM3MCw4ICYjNDM7MjcwMiwxMSBAQCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiAJaWYgKHByaXYtJmd0O2lycV9kb21haW4gJmFtcDsmYW1wOyAhbW5wKQogCQltdDc1MzBfc2V0dXBfbWRpb19pcnEocHJpdik7CiAKJiM0MzsJcHJpdi0mZ3Q7Y2hpbGRfYnVzID0gYnVzOwomIzQzOwogCXJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTsKIAlpZiAocmV0KSB7CiYjNDM7CQlwcml2LSZndDtjaGlsZF9idXMgPSBOVUxMOwogCQlkZXZfZXJyKGRldiwgJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXM6ICVkXG4mIzM0OywgcmV0KTsKIAkJaWYgKHByaXYtJmd0O2lycV9kb21haW4gJmFtcDsmYW1wOyAhbW5wKQogCQkJbXQ3NTMwX2ZyZWVfbWRpb19pcnEocHJpdik7CkBAIC0yMzgxLDYgJiM0MzsyNzE2LDcgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQogCW9mX25vZGVfcHV0KG1ucCk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtdDc1MzBfc2V0dXBfbWRpbyk7CiAKIHN0YXRpYyBpbnQKIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCkBAIC0yNDA2LDExICYjNDM7Mjc0Miw2IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCWJyZWFrOwogCX0KIAotCWlmICghZG4pIHsKLQkJZGV2X2Vycihkcy0mZ3Q7ZGV2LCAmIzM0O3BhcmVudCBPRiBub2RlIG9mIERTQSBjb25kdWl0IG5vdCBmb3VuZCYjMzQ7KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJZHMtJmd0O2Fzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTsKIAlkcy0mZ3Q7dW50YWdfdmxhbl9hd2FyZV9icmlkZ2VfcHZpZCA9IHRydWU7CiAJZHMtJmd0O210dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTsKQEAgLTI0ODksNiAmIzQzOzI4MjAsMTIgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJCSAgIE1UNzUzMF9DSEdfVFJBUCB8IE1UNzUzMF9QSFlfSU5ESVJFQ1RfQUNDRVNTLAogCQkJICAgTVQ3NTMwX0NIR19UUkFQKTsKIAomIzQzOwkvKiBFTjc1MTIyMSBNQ00gc3RhcnRzIG9uIHRoZSB3cm9uZyBmcmVxdWVuY3kgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxX0VYVCkKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzWF9NVFJBUCwKJiM0MzsJCQkJICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX0NLX1NFTCwKJiM0MzsJCQkJICAgTVQ3NTMwX0NIR19UUkFQKTsKJiM0MzsKIAlpZiAoKHZhbCAmYW1wOyBNVDc1MzBfWFRBTF9NQVNLKSA9PSBNVDc1MzBfWFRBTF80ME1IWikKIAkJbXQ3NTMwX3BsbF9zZXR1cChwcml2KTsKIApAQCAtMjUxMiw3ICYjNDM7Mjg0OSw3IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCS8qIERpc2FibGUgbGVhcm5pbmcgYnkgZGVmYXVsdCBvbiBhbGwgcG9ydHMgKi8KIAkJcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BTQ19QKGkpLCBTQV9ESVMpOwogCi0JCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKSB7CiYjNDM7CQlpZiAoZHNhX2lzX3Vwc3RyZWFtX3BvcnQoZHMsIGkpKSB7CiAJCQltdDc1M3hfY3B1X3BvcnRfZW5hYmxlKGRzLCBpKTsKIAkJfSBlbHNlIHsKIAkJCW10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpOwpAQCAtMjUzNiw3ICYjNDM7Mjg3Myw3IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBDaGVjayBmb3IgUEhZIG11eGluZyBvbiBwb3J0IDUgKi8KLQlpZiAoZHNhX2lzX3VudXNlZF9wb3J0KGRzLCA1KSkgewomIzQzOwlpZiAoZG4gJmFtcDsmYW1wOyBkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7CiAJCS8qIFNjYW4gdGhlIGV0aGVybmV0IG5vZGVzLiBMb29rIGZvciBHTUFDMSwgbG9va3VwIHRoZSB1c2VkIFBIWS4KIAkJICogU2V0IHByaXYtJmd0O3A1X21vZGUgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGlmIFBIWSBtdXhpbmcgaXMKIAkJICogZGV0ZWN0ZWQuCkBAIC0yNjM2LDcgJiM0MzsyOTczLDcgQEAgbXQ3NTMxX3NldHVwX2NvbW1vbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJlZ21hcF9zZXRfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzMV9EQkdfQ05UKGkpLAogCQkJCU1UNzUzMV9ESVNfQ0xSKTsKIAotCQlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkgewomIzQzOwkJaWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkgewogCQkJbXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShkcywgaSk7CiAJCX0gZWxzZSB7CiAJCQltdDc1MzBfcG9ydF9kaXNhYmxlKGRzLCBpKTsKQEAgLTI2NzQsOCAmIzQzOzMwMTEsMTEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKIAl1MzIgdmFsLCBpZDsKJiM0MzsJaW50IGN0bF9waHk7CiAJaW50IHJldCwgaTsKIAomIzQzOwljdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7CiYjNDM7CiAJLyogUmVzZXQgd2hvbGUgY2hpcCB0aHJvdWdoIGdwaW8gcGluIG9yIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGZvcgogCSAqIGRpZmZlcmVudCB0eXBlIG9mIGhhcmR3YXJlCiAJICovCkBAIC0yNzQzLDI1ICYjNDM7MzA4MywyMSBAQCBtdDc1MzFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCSAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duCiAJICogbXQ3NTMxX2luZF9tbWRfcGh5X1tyZWFkLHdyaXRlXSB0byBjb21wbGV0ZSB0aGlzIGZ1bmN0aW9uLgogCSAqLwotCXJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsCi0JCQkJICAgICAgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciksCi0JCQkJICAgICAgTURJT19NTURfVkVORDIsIENPUkVfUExMX0dST1VQNCk7CiYjNDM7CXJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsIGN0bF9waHksIE1ESU9fTU1EX1ZFTkQyLAomIzQzOwkJCQkgICAgICBDT1JFX1BMTF9HUk9VUDQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiAJdmFsID0gcmV0OwogCXZhbCB8PSBNVDc1MzFfUkdfU1lTUExMX0RNWTIgfCBNVDc1MzFfUEhZX1BMTF9CWVBBU1NfTU9ERTsKIAl2YWwgJmFtcDs9IH5NVDc1MzFfUEhZX1BMTF9PRkY7Ci0JcmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsCi0JCQkJICAgICAgIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHIpLAotCQkJCSAgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0LCB2YWwpOwomIzQzOwlyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsCiYjNDM7CQkJCSAgICAgICBDT1JFX1BMTF9HUk9VUDQsIHZhbCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBEaXNhYmxlIEVFRSBhZHZlcnRpc2VtZW50IG9uIHRoZSBzd2l0Y2ggUEhZcy4gKi8KLQlmb3IgKGkgPSBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKTsKLQkgICAgIGkgJmx0OyBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSAmIzQzOyBNVDc1MzBfTlVNX1BIWVM7Ci0JICAgICBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSBjdGxfcGh5OyBpICZsdDsgY3RsX3BoeSAmIzQzOyBNVDc1MzBfTlVNX1BIWVM7IGkmIzQzOyYjNDM7KSB7CiAJCW10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZShwcml2LCBpLCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLAogCQkJCQkgMCk7CiAJfQpAQCAtMjkxMCw2ICYjNDM7MzI0Niw0NCBAQCBzdGF0aWMgdm9pZCBlbjc1MjhfbWFjX3BvcnRfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBlbjc1MTIyMV9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHBvcnQpIHsKJiM0MzsJLyogRU43NTEyMjEgcG9ydHMgMC4uMyBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlZ3JhdGVkIEZFIFBIWXMuICovCiYjNDM7CWNhc2UgMCAuLi4gMzoKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsCiYjNDM7CQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsKJiM0MzsJCWNvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CS8qIFBvcnQgNCBpcyBjb25uZWN0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgRU43NTEyL0VONzUyMSBHUEhZLiAqLwomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJLyogUG9ydCA1IGlzIHRoZSAxIEdiaXQvcyBUUkdNSUkgY2FzY2FkZSB0byB0aGUgZXh0ZXJuYWwgTVQ3NTMwLiAqLwomIzQzOwljYXNlIDU6CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSwKJiM0MzsJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwomIzQzOwkJY29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJLyogUG9ydCA2IGlzIHRoZSAxIEdiaXQvcyBDUFUgbGluayB0byBHRE0xLiAqLwomIzQzOwljYXNlIDY6CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIG10NzUzMF9tYWNfY29uZmlnKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVuc2lnbmVkIGludCBtb2RlLAogCQkgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCkBAIC0zMDU5LDYgJiM0MzszNDMzLDkgQEAgc3RhdGljIHZvaWQgbXQ3NTN4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJfQogCiAJcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC0mZ3Q7aW5kZXgpLCBtY3IpOwomIzQzOwomIzQzOwlpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpCiYjNDM7CQltdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShkcCk7CiB9CiAKIHN0YXRpYyB2b2lkIG10NzUzeF9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZykKQEAgLTMyOTgsMTAgJiM0MzszNjc1LDExIEBAIG10NzUzeF9jb25kdWl0X3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiAKIAkvKiBTZXQgdGhlIENQVSBwb3J0IHRvIHRyYXAgZnJhbWVzIHRvIGZvciBNVDc1MzAuIFRyYXBwZWQgZnJhbWVzIHdpbGwgYmUKIAkgKiBmb3J3YXJkZWQgdG8gdGhlIG51bWVyaWNhbGx5IHNtYWxsZXN0IENQVSBwb3J0IHdob3NlIGNvbmR1aXQKLQkgKiBpbnRlcmZhY2UgaXMgdXAuCiYjNDM7CSAqIGludGVyZmFjZSBpcyB1cC4gTk9URTogJiMzNDtDUFUgcG9ydCYjMzQ7IGNhbiBhbHNvIG1lYW4gYW4gdXBzdHJlYW0gRFNBIGxpbmsuCiAJICovCiAJaWYgKHByaXYtJmd0O2lkICE9IElEX01UNzUzMCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX01UNzYyMSAmYW1wOyZhbXA7Ci0JICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUyOCkKJiM0MzsJICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUyOCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxICZhbXA7JmFtcDsKJiM0MzsJICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxX0VYVCkKIAkJcmV0dXJuOwogCiAJbWFzayA9IEJJVChjcHVfZHAtJmd0O2luZGV4KTsKQEAgLTMzOTMsNiAmIzQzOzM3NzEsNzYgQEAgc3RhdGljIGludCBtdDc5ODhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCXJldHVybiBtdDc1MzFfc2V0dXBfY29tbW9uKGRzKTsKIH0KIAomIzQzOy8qIDEgaWYgcGFzc3Rocm91Z2gsIG5lZ2F0aXZlIGlmIGVycm9yLiAqLwomIzQzO3N0YXRpYyBpbnQgbXQ3NTN4X2NoZWNrX3Bhc3N0aHJvdWdoKHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHMsICpwb3J0OwomIzQzOwlpbnQgcGFzc3Rocm91Z2hfcG9ydHMgPSAwOwomIzQzOwlpbnQgZW5hYmxlZF9wb3J0cyA9IDA7CiYjNDM7CiYjNDM7CXBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LSZndDtvZl9ub2RlLCAmIzM0O3BvcnRzJiMzNDspOwomIzQzOwlpZiAoIXBvcnRzKQomIzQzOwkJcG9ydHMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7ZXRoZXJuZXQtcG9ydHMmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICghcG9ydHMpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O25vIHBvcnRzIGNoaWxkIG5vZGUgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBvcnRzLCBwb3J0KSB7CiYjNDM7CQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxpbms7CiYjNDM7CiYjNDM7CQllbmFibGVkX3BvcnRzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWxpbmsgPSBvZl9wYXJzZV9waGFuZGxlKHBvcnQsICYjMzQ7ZXRoZXJuZXQmIzM0OywgMCk7CiYjNDM7CQlpZiAoIWxpbmspCiYjNDM7CQkJbGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgJiMzNDtsaW5rJiMzNDssIDApOwomIzQzOwomIzQzOwkJaWYgKCFsaW5rKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb2Zfbm9kZV9wdXQobGluayk7CiYjNDM7CiYjNDM7CQlwYXNzdGhyb3VnaF9wb3J0cyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQocG9ydHMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHN3aXRjaCBpcyBjb25zaWRlcmVkIHBhc3N0aHJvdWdoIGlmIGV4YWN0bHkgdHdvIGF2YWlsYWJsZQomIzQzOwkgKiBwb3J0cyBoYXZlIGFuICYjMzQ7ZXRoZXJuZXQmIzM0OyBvciAmIzM0O2xpbmsmIzM0OyBwaGFuZGxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBhc3N0aHJvdWdoX3BvcnRzICZndDsgMiB8fAomIzQzOwkgICAgKHBhc3N0aHJvdWdoX3BvcnRzID09IDIgJmFtcDsmYW1wOyBlbmFibGVkX3BvcnRzICE9IDIpCiYjNDM7CSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7T25seSB0d28gcG9ydHMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFzc3Rocm91Z2hfcG9ydHMgPT0gMjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm8gbWFuaXB1bGF0aW9uIG9mIGZvcndhcmRpbmcgcnVsZXMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHsKJiM0MzsJLmdldF90YWdfcHJvdG9jb2wJPSBtdGtfZ2V0X3RhZ19wcm90b2NvbCwKJiM0MzsJLnNldHVwCQkJPSBtdDc1M3hfc2V0dXAsCiYjNDM7CS50ZWFyZG93bgkJPSBtdDc1M3hfdGVhcmRvd24sCiYjNDM7CS5wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCA9IG10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCwKJiM0MzsJLmdldF9zdHJpbmdzCQk9IG10NzUzMF9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9ldGh0b29sX3N0YXRzCT0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLAomIzQzOwkuZ2V0X3NzZXRfY291bnQJCT0gbXQ3NTMwX2dldF9zc2V0X2NvdW50LAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMJPSBtdDc1MzBfZ2V0X2V0aF9tYWNfc3RhdHMsCiYjNDM7CS5nZXRfcm1vbl9zdGF0cwkJPSBtdDc1MzBfZ2V0X3Jtb25fc3RhdHMsCiYjNDM7CS5nZXRfZXRoX2N0cmxfc3RhdHMJPSBtdDc1MzBfZ2V0X2V0aF9jdHJsX3N0YXRzLAomIzQzOwkuZ2V0X3N0YXRzNjQJCT0gbXQ3NTMwX2dldF9zdGF0czY0LAomIzQzOwkucG9ydF9lbmFibGUJCT0gbXQ3NTMwX3BvcnRfZW5hYmxlLAomIzQzOwkucG9ydF9kaXNhYmxlCQk9IG10NzUzMF9wb3J0X2Rpc2FibGUsCiYjNDM7CS5waHlsaW5rX2dldF9jYXBzCT0gbXQ3NTN4X3BoeWxpbmtfZ2V0X2NhcHMsCiYjNDM7CS5zdXBwb3J0X2VlZQkJPSBkc2Ffc3VwcG9ydHNfZWVlLAomIzQzOwkuc2V0X21hY19lZWUJCT0gbXQ3NTN4X3NldF9tYWNfZWVlLAomIzQzOwkuY29uZHVpdF9zdGF0ZV9jaGFuZ2UJPSBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2UsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wJPSBtdGtfZ2V0X3RhZ19wcm90b2NvbCwKIAkuc2V0dXAJCQk9IG10NzUzeF9zZXR1cCwKQEAgLTM1MTksMTQgJiM0MzszOTY3LDQwIEBAIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXSA9IHsKIAkJLnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsCiAJCS5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcywKIAl9LAomIzQzOwlbSURfRU43NTEyMjFdID0gewomIzQzOwkJLmlkID0gSURfRU43NTEyMjEsCiYjNDM7CQkucGNzX29wcyA9ICZhbXA7bXQ3NTMwX3Bjc19vcHMsCiYjNDM7CQkuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsCiYjNDM7CQkucGh5X3JlYWRfYzIyID0gbXQ3NTMxX2luZF9jMjJfcGh5X3JlYWQsCiYjNDM7CQkucGh5X3dyaXRlX2MyMiA9IG10NzUzMV9pbmRfYzIyX3BoeV93cml0ZSwKJiM0MzsJCS5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCwKJiM0MzsJCS5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlLAomIzQzOwkJLm1hY19wb3J0X2dldF9jYXBzID0gZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMsCiYjNDM7CQkubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsCiYjNDM7CX0sCiYjNDM7CVtJRF9FTjc1MTIyMV9FWFRdID0gewomIzQzOwkJLmlkID0gSURfRU43NTEyMjFfRVhULAomIzQzOwkJLnBjc19vcHMgPSAmYW1wO210NzUzMF9wY3Nfb3BzLAomIzQzOwkJLnN3X3NldHVwID0gbXQ3NTMwX3NldHVwLAomIzQzOwkJLnBoeV9yZWFkX2MyMiA9IG10NzUzMF9waHlfcmVhZF9jMjIsCiYjNDM7CQkucGh5X3dyaXRlX2MyMiA9IG10NzUzMF9waHlfd3JpdGVfYzIyLAomIzQzOwkJLnBoeV9yZWFkX2M0NSA9IG10NzUzMF9waHlfcmVhZF9jNDUsCiYjNDM7CQkucGh5X3dyaXRlX2M0NSA9IG10NzUzMF9waHlfd3JpdGVfYzQ1LAomIzQzOwkJLm1hY19wb3J0X2dldF9jYXBzID0gbXQ3NTMwX21hY19wb3J0X2dldF9jYXBzLAomIzQzOwkJLm1hY19wb3J0X2NvbmZpZyA9IG10NzUzMF9tYWNfY29uZmlnLAomIzQzOwl9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7CiAKIGludAogbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiB7CiYjNDM7CWludCBwYXNzdGhyb3VnaCA9IG10NzUzeF9jaGVja19wYXNzdGhyb3VnaChwcml2LSZndDtkZXYpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtJmd0O2RldjsKIAomIzQzOwlpZiAocGFzc3Rocm91Z2ggJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBhc3N0aHJvdWdoOwomIzQzOwogCXByaXYtJmd0O2RzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2LSZndDtkcyksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0mZ3Q7ZHMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzU0NCw3ICYjNDM7NDAxOCwxNCBAQCBtdDc1MzBfcHJvYmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIAlwcml2LSZndDtpZCA9IHByaXYtJmd0O2luZm8tJmd0O2lkOwogCXByaXYtJmd0O2RldiA9IGRldjsKIAlwcml2LSZndDtkcy0mZ3Q7cHJpdiA9IHByaXY7Ci0JcHJpdi0mZ3Q7ZHMtJmd0O29wcyA9ICZhbXA7bXQ3NTMwX3N3aXRjaF9vcHM7CiYjNDM7CiYjNDM7CWlmIChwYXNzdGhyb3VnaCkgewomIzQzOwkJcHJpdi0mZ3Q7ZHMtJmd0O29wcyA9ICZhbXA7bXQ3NTMwX3Bhc3N0aHJvdWdoX3N3aXRjaF9vcHM7CiYjNDM7CQlwcml2LSZndDtpc19wYXNzdGhyb3VnaCA9IHRydWU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwcml2LSZndDtkcy0mZ3Q7b3BzID0gJmFtcDttdDc1MzBfc3dpdGNoX29wczsKJiM0MzsJfQomIzQzOwogCXByaXYtJmd0O2RzLSZndDtwaHlsaW5rX21hY19vcHMgPSAmYW1wO210NzUzeF9waHlsaW5rX21hY19vcHM7CiAJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3JlZ19tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtwcml2LSZndDtzdGF0c19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaCBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAppbmRleCAyYmJiZTYxN2I1MmVlLi4xYTQzMjk3NDljMGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oCkBAIC0yNCw2ICYjNDM7MjQsOCBAQCBlbnVtIG10NzUzeF9pZCB7CiAJSURfRU43NTgxID0gNCwKIAlJRF9BTjc1ODMgPSA1LAogCUlEX0VONzUyOCA9IDYsCiYjNDM7CUlEX0VONzUxMjIxID0gNywKJiM0MzsJSURfRU43NTEyMjFfRVhUID0gOCwKIH07CiAKICNkZWZpbmUJTlVNX1RSR01JSV9DVFJMCQkJNQpAQCAtNDAsNiAmIzQzOzQyLDcgQEAgZW51bSBtdDc1M3hfaWQgewogLyogUmVnaXN0ZXIgZm9yIEFSTCBnbG9iYWwgY29udHJvbCAqLwogI2RlZmluZSBNVDc1M1hfQUdDCQkJMHhjCiAjZGVmaW5lICBMT0NBTF9FTgkJCUJJVCg3KQomIzQzOyNkZWZpbmUgIEFHQ19MMkxFTl9DSEsJCQlCSVQoNCkKIAogLyogUmVnaXN0ZXIgZm9yIE1BQyBmb3J3YXJkIGNvbnRyb2wgKi8KICNkZWZpbmUgTVQ3NTNYX01GQwkJCTB4MTAKQEAgLTM1NSw2ICYjNDM7MzU4LDkgQEAgZW51bSBtdDc1MzBfdmxhbl9wb3J0X2FjY19mcm0gewogI2RlZmluZSBNVDc1M1hfUE1DUl9QKHgpCQkoMHgzMDAwICYjNDM7ICgoeCkgKiAweDEwMCkpCiAjZGVmaW5lICBQTUNSX0lGR19YTUlUX01BU0sJCUdFTk1BU0soMTksIDE4KQogI2RlZmluZSAgUE1DUl9JRkdfWE1JVCh4KQkJRklFTERfUFJFUChQTUNSX0lGR19YTUlUX01BU0ssIHgpCiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzk2CQkwCiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUX1JBTkQJCTEKJiM0MzsjZGVmaW5lICAgIFBNQ1JfSUZHX1hNSVRfNjQJCTIKICNkZWZpbmUgIFBNQ1JfRVhUX1BIWQkJCUJJVCgxNykKICNkZWZpbmUgIFBNQ1JfTUFDX01PREUJCQlCSVQoMTYpCiAjZGVmaW5lICBNVDc1MzBfRk9SQ0VfTU9ERQkJQklUKDE1KQpAQCAtNTgzLDYgJiM0Mzs1ODksOCBAQCBlbnVtIG10NzUzMV9jbGtfc2tldyB7CiAjZGVmaW5lIE1UNzUzWF9NVFJBUAkJCTB4NzgwNAogI2RlZmluZSAgTVQ3NTMwX1A1X1BIWTBfU0VMCQlCSVQoMjApCiAjZGVmaW5lICBNVDc1MzBfQ0hHX1RSQVAJCUJJVCgxNikKJiM0MzsjZGVmaW5lICBNVDc1MzBfQ0tfU0VMCQkJQklUKDE1KQomIzQzOyNkZWZpbmUgIE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFCUJJVCgxNCkKICNkZWZpbmUgIE1UNzUzMF9QNV9NQUNfU0VMCQlCSVQoMTMpCiAjZGVmaW5lICBNVDc1MzBfUDZfRElTCQkJQklUKDgpCiAjZGVmaW5lICBNVDc1MzBfUDVfUkdNSUlfTU9ERQkJQklUKDcpCkBAIC01OTksNiAmIzQzOzYwNyw4IEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7CiAvKiBSZWdpc3RlciBmb3IgVE9QIHNpZ25hbCBjb250cm9sICovCiAjZGVmaW5lIE1UNzUzMF9UT1BfU0lHX0NUUkwJCTB4NzgwOAogI2RlZmluZSAgVE9QX1NJR19DVFJMX05PUk1BTAkJKEJJVCgxNykgfCBCSVQoMTYpKQomIzQzOy8qIFVuZG9jdW1lbnRlZCAqLwomIzQzOyNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9CMAkJQklUKDApCiAKICNkZWZpbmUgTVQ3NTMxX1RPUF9TSUdfU1IJCTB4NzgwYwogI2RlZmluZSAgUEFEX0RVQUxfU0dNSUlfRU4JCUJJVCgxKQpAQCAtNjQ1LDE4ICYjNDM7NjU1LDMxIEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7CiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkNLX1JUVAkJMHg3YTA0CiAjZGVmaW5lICBEUVMxX0dBVEUJCQlCSVQoMzEpCiAjZGVmaW5lICBEUVMwX0dBVEUJCQlCSVQoMzApCiYjNDM7LyogVW5kb2N1bWVudGVkICovCiYjNDM7I2RlZmluZSAgRU43NTEyMjFfQjE3CQkJQklUKDE3KQogCiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkQoeCkJCSgweDdhMTAgJiM0MzsgKHgpICogOCkKICNkZWZpbmUgIEJTTElQX0VOCQkJQklUKDMxKQogI2RlZmluZSAgRURHRV9DSEsJCQlCSVQoMzApCiYjNDM7I2RlZmluZSAgUkRfVkFMVUVfTUFTSwkJCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgIFJEX0VSUl9NQVNLCQkJR0VOTUFTSygxMSwgOCkKICNkZWZpbmUgIFJEX1RBUF9NQVNLCQkJR0VOTUFTSyg2LCAwKQogI2RlZmluZSAgUkRfVEFQKHgpCQkJRklFTERfUFJFUChSRF9UQVBfTUFTSywgeCkKJiM0MzsvKiBUcmFpbmluZyBkb2VzIG5vdCB0cnkgYW55dGhpbmcgYmV5b25kIHRoaXMgKi8KJiM0MzsjZGVmaW5lICBURF9UQVBfTUFYCQkJNjQKIAogI2RlZmluZSBNVDc1MzBfVFJHTUlJX1RYQ1RSTAkJMHg3YTQwCiAjZGVmaW5lICBUUkFJTl9UWEVOCQkJQklUKDMxKQogI2RlZmluZSAgVFhDX0lOVgkJCUJJVCgzMCkKICNkZWZpbmUgIFRYX1JTVAkJCQlCSVQoMjgpCiAKJiM0MzsjZGVmaW5lIEVONzUzMF9UUkdNSUlfVERfQ1RSTCh4KQkoMHg3YTUwICYjNDM7ICh4KSAqIDgpCiYjNDM7I2RlZmluZSAgIFRHTUlJX1REX1RBUF9NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgICBUR01JSV9URF9QQVRfTUFTSwkJR0VOTUFTSyg3LCAwKQomIzQzOy8qIFVzZSBhIDAxMDEwMTAxIGJpdCBwYXR0ZXJuICovCiYjNDM7I2RlZmluZSAgIFRHTUlJX1REX1BBVAkJCTB4NTUKJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfRkFJTF9QQVQJCTB4YWEKJiM0MzsKICNkZWZpbmUgTVQ3NTMwX1RSR01JSV9URF9PRFQoaSkJCSgweDdhNTQgJiM0MzsgOCAqIChpKSkKICNkZWZpbmUgIFREX0RNX0RSVlBfTUFTSwkJR0VOTUFTSygzLCAwKQogI2RlZmluZSAgVERfRE1fRFJWUCh4KQkJCUZJRUxEX1BSRVAoVERfRE1fRFJWUF9NQVNLLCB4KQpAQCAtNzQ3LDggJiM0Mzs3NzAsNiBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwgewogI2RlZmluZSAgTVQ3NTMxX1BIWV9QTExfT0ZGCQlCSVQoNSkKICNkZWZpbmUgIE1UNzUzMV9QSFlfUExMX0JZUEFTU19NT0RFCUJJVCg0KQogCi0jZGVmaW5lIE1UNzUzWF9DVFJMX1BIWV9BRERSKGFkZHIpCSgoKGFkZHIpICYjNDM7IDEpICZhbXA7IChQSFlfTUFYX0FERFIgLSAxKSkKLQogI2RlZmluZSBDT1JFX1BMTF9HUk9VUDUJCQkweDQwNAogI2RlZmluZSAgUkdfTENERFNfUENXX05DUE8xX01BU0sJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPMSh4KQkJRklFTERfUFJFUChSR19MQ0REU19QQ1dfTkNQTzFfTUFTSywgeCkKQEAgLTc2NCw2ICYjNDM7Nzg1LDkgQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHsKICNkZWZpbmUgIFJHX0xDQ0RTX0MoeCkJCQlGSUVMRF9QUkVQKFJHX0xDQ0RTX0NfTUFTSywgeCkKICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPX0NIRwkJQklUKDMpCiAKJiM0MzsjZGVmaW5lIENPUkVfUExMX0dST1VQOAkJCTB4NDA3CiYjNDM7I2RlZmluZSAgUkdfTENERFNfU1NDX0VOCQlCSVQoMTApCiYjNDM7CiAjZGVmaW5lIENPUkVfUExMX0dST1VQMTAJCTB4NDA5CiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEFfTUFTSwlHRU5NQVNLKDExLCAwKQogI2RlZmluZSAgUkdfTENERFNfU1NDX0RFTFRBKHgpCQlGSUVMRF9QUkVQKFJHX0xDRERTX1NTQ19ERUxUQV9NQVNLLCB4KQpAQCAtODg2LDYgJiM0Mzs5MTAsOSBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8gewogICogQGRldjoJCVRoZSBkZXZpY2UgcG9pbnRlcgogICogQGRzOgkJCVRoZSBwb2ludGVyIHRvIHRoZSBkc2EgY29yZSBzdHJ1Y3R1cmUKICAqIEBidXM6CQlUaGUgYnVzIHVzZWQgZm9yIHRoZSBkZXZpY2UgYW5kIGJ1aWx0LWluIFBIWQomIzQzOyAqIEBjaGlsZF9idXM6CQlUaGUgYnVzIGNyZWF0ZWQgYnkgdGhlIGRldmljZSwgb24gTURJTyBpbXBsZW1lbnRhdGlvbnMKJiM0MzsgKgkJCXRoaXMgaXMgYnVzIGluZGlyZWN0bHkgYWNjZXNzZXMgYGJ1c2AsIG9uIE1NSU8KJiM0MzsgKgkJCWltcGxlbWVudGF0aW9ucyB0aGlzIGJ1cyBpcyBwYXJ0IG9mIHRoZSBzd2l0Y2guCiAgKiBAcmVnbWFwOgkJVGhlIHJlZ21hcCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYWxsIHN3aXRjaCByZWdpc3RlcnMKICAqIEByc3RjOgkJVGhlIHBvaW50ZXIgdG8gcmVzZXQgY29udHJvbCB1c2VkIGJ5IE1DTQogICogQGNvcmVfcHdyOgkJVGhlIHBvd2VyIHN1cHBsaWVkIGludG8gdGhlIGNvcmUKQEAgLTg5OSw2ICYjNDM7OTI2LDkgQEAgc3RydWN0IG10NzUzeF9pbmZvIHsKICAqIEBwNV9tb2RlOgkJSG9sZGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHBvcnQgNSBvZiB0aGUgTVQ3NTMwIHN3aXRjaAogICogQHA1X3NnbWlpOgkJRmxhZyBmb3IgZGlzdGluZ3Vpc2hpbmcgaWYgcG9ydCA1IG9mIHRoZSBNVDc1MzEgc3dpdGNoCiAgKgkJCWhhcyBnb3QgU0dNSUkKJiM0MzsgKiBAaXNfcGFzc3Rocm91Z2g6CUlmIHRoaXMgc3dpdGNoIGlzIHRvIHBhc3MgdHJhZmZpYyBiZXR3ZWVuIHRoZSB1cHN0cmVhbQomIzQzOyAqCQkJKENQVSkgcG9ydCBhbmQgYSBzZWNvbmQgZG93bnN0cmVhbSBzd2l0Y2gsIHdpdGhvdXQKJiM0MzsgKgkJCWFsdGVyaW5nIHRoZSBEU0EgdGFnLgogICogQGlycV9kb21haW46CQlJUlEgZG9tYWluIG9mIHRoZSBzd2l0Y2ggaXJxX2NoaXAKICAqIEBjcmVhdGVfc2dtaWk6CVBvaW50ZXIgdG8gZnVuY3Rpb24gY3JlYXRpbmcgU0dNSUkgUENTIGluc3RhbmNlKHMpCiAgKiBAYWN0aXZlX2NwdV9wb3J0czoJSG9sZGluZyB0aGUgYWN0aXZlIENQVSBwb3J0cwpAQCAtOTExLDYgJiM0Mzs5NDEsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYgewogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IGRzYV9zd2l0Y2gJKmRzOwogCXN0cnVjdCBtaWlfYnVzCQkqYnVzOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cwkJKmNoaWxkX2J1czsKIAlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOwogCXN0cnVjdCByZXNldF9jb250cm9sCSpyc3RjOwogCXN0cnVjdCByZWd1bGF0b3IJKmNvcmVfcHdyOwpAQCAtOTIzLDYgJiM0Mzs5NTQsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYgewogCWJvb2wJCQlwNV9zZ21paTsKIAl1OAkJCW1pcnJvcl9yeDsKIAl1OAkJCW1pcnJvcl90eDsKJiM0MzsJYm9vbAkJCWlzX3Bhc3N0aHJvdWdoOwogCXN0cnVjdCBtdDc1MzBfcG9ydAlwb3J0c1tNVDc1MzBfTlVNX1BPUlRTXTsKIAlzdHJ1Y3QgbXQ3NTN4X3BjcwlwY3NbTVQ3NTMwX05VTV9QT1JUU107CiAJLyogcHJvdGVjdCBhbW9uZyBwcm9jZXNzZXMgZm9yIHJlZ2lzdGVycyBhY2Nlc3MqLwpAQCAtOTYxLDYgJiM0Mzs5OTMsMTYgQEAgc3RydWN0IG10NzUzMF9od19zdGF0cyB7CiBpbnQgbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpOwogdm9pZCBtdDc1MzBfcmVtb3ZlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpOwogCiYjNDM7LyoKJiM0MzsgKiBXaGVuIGFuIE1NSU8gYmFzZWQgc3dpdGNoIGhhcyBhbiBNRElPIGJ1cyB3aGljaCBjb250YWlucyBhIGRvd25zdHJlYW0gTURJTwomIzQzOyAqIHN3aXRjaCwgdGhlIE1ESU8gYnVzIGlzIG5vdCBub3JtYWxseSBzZXR1cCB1bnRpbCBtdDc1M3hfc2V0dXAoKSBoYXMgYmVlbgomIzQzOyAqIGNhbGxlZC4gQnV0IG10NzUzeF9zZXR1cCgpIGlzIG5vdCBjYWxsZWQgdW50aWwgRFNBIHNlZXMgdGhhdCBldmVyeSBzd2l0Y2ggaW4KJiM0MzsgKiB0aGUgdHJlZSBoYXMgYmVlbiBwcm9iZWQuIENhbGxpbmcgbXQ3NTMwX3NldHVwX21kaW8oKSBhZnRlciBhdCB0aGUgZW5kIG9mCiYjNDM7ICogdGhlIE1NSU8gcHJvYmUgZnVuY3Rpb24gYWxsb3dzIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB0byByZWdpc3RlciwgY29tcGxldGluZwomIzQzOyAqIHRoZSB0cmVlLgomIzQzOyAqLwomIzQzO2ludCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpOwomIzQzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXTsKIAogI2VuZGlmIC8qIF9fTVQ3NTMwX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBMaW51eCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBMb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHRoZXNlIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxgLCBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNgLCBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmNgLCBgZHJpdmVycy9uZXQvZHNhL210NzUzMC5jYCwgYW5kIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhgLgoKUmlnaHQsIE1UNzUzMC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gTGV0JiMzOTtzIGNvbmZpcm06IGl0JiMzOTtzIHRoZSBNZWRpYVRlayAvIEVjb05ldCBNVDc1MzAgRFNBIGV0aGVybmV0IHN3aXRjaCBkcml2ZXIuIE5vdyBjb21lcyB0aGUgY3JpdGljYWwgcGFydDogY2FuIHdlICphY3R1YWxseSogZ2V0IGF0IHRoaXMgdGhpbmcgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyBJIG5lZWQgdG8ga25vdyB0aGUgdGFyZ2V0IGhhcmR3YXJlLiBJcyBpdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBsaWtlbHkgdG8gYmUgc3VwcG9ydGVkIGJ5IFFFTVUgb24gYW1kNjQsIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXA/IFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcHJvYmluZyBtZXRob2RzLgoKSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZ2l0IHJlcG8sIHByb2JhYmx5IHVzaW5nIGBnaXQgZ3JlcGAgYW5kIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiB0aGUgTVQ3NTMwIGlzIGhvb2tlZCB1cC4gSXMgaXQgTURJTywgTU1JTywgUGxhdGZvcm0sIFNQSSwgSTJDLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgYnVzIGl0IHJlbGllcyBvbiBpcyBlc3NlbnRpYWwuIFRoZW4sIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB3ZSBjYW4gc2ltdWxhdGUgaXQsIGVtdWxhdGUgaXQsIG9yIG90aGVyd2lzZSByZWFjaCBpdCB3aXRoaW4gdGhlIGZ1enppbmcgZnJhbWV3b3JrLiBJZiBpdCByZXF1aXJlcyBzb21lIG9ic2N1cmUgaGFyZHdhcmUgSSBjYW4mIzM5O3QgZWFzaWx5IGVtdWxhdGUsIHRoZW4gd2UmIzM5O2xsIGhhdmUgYSB0b3VnaCB0aW1lLiBUaW1lIHRvIHJ1biBncmVwcGVyIG9yIHJlYWQgdGhlIEtjb25maWcgZmlsZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfRFNBX01UNzUzMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvS2NvbmZpZz0yOT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01UNzUzMFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc1MzAgYW5kIE1UNzUzMSBFdGhlcm5ldCBzd2l0Y2ggc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTM0LVx0c2VsZWN0IFJFR01BUF9JUlFcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjM1Olx0aW1wbHkgTkVUX0RTQV9NVDc1MzBfTURJT1xuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6MzY6XHRpbXBseSBORVRfRFNBX01UNzUzMF9NTUlPXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0zNy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy00Mi1cbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjQzOmNvbmZpZyBORVRfRFNBX01UNzUzMF9NRElPXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzUzMCBNRElPIGludGVyZmFjZSBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjQ1Olx0ZGVwZW5kcyBvbiBORVRfRFNBX01UNzUzMFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNDYtXHRzZWxlY3QgTUVESUFURUtfR0VfUEhZXG4tLVxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNTMtXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzo1NDpjb25maWcgTkVUX0RTQV9NVDc1MzBfTU1JT1xuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc1MzAgTU1JTyBpbnRlcmZhY2UgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzo1NjpcdGRlcGVuZHMgb24gTkVUX0RTQV9NVDc1MzBcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTU3LVx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbi0tXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTkVUX0RTQV9LUzg5OTUpIFx0JiM0Mzs9IGtzODk5NS5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXHQmIzQzOz0gbXQ3NTMwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NRElPKSAmIzQzOz0gbXQ3NTMwLW1kaW8ub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICYjNDM7PSBtdDc1MzAtbW1pby5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICYjNDM7PSBtdDc2Mjgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTk0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1UNzUzMCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNVDc1MzAgc3dpdGNoIGlzIGJlaW5nIHByb2JlZCBhbmQgaW5pdGlhbGl6ZWQgaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBkcml2ZXIgY29kZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYXJjaGl0ZWN0dXJlIHN1Z2dlc3RzIHRoYXQgdGhlIE1ESU8gYW5kIE1NSU8gdmFyaWFudHMgYXJlIGxpa2VseSB0aGUga2V5IGRyaXZlcnMuIFNvLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNgIGFuZCBgbXQ3NTMwLW1taW8uY2AuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZHJpdmVycyBhcmUgc3RydWN0dXJlZC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIHBhdHRlcm5zIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBNRElPIGRyaXZlciAoYG1kaW9fZHJpdmVyYCkgZm9yIHRoZSBNRElPLWNvbm5lY3RlZCB2YXJpYW50LCBhIHBsYXRmb3JtIGRyaXZlciAoYHBsYXRmb3JtX2RyaXZlcmApIGZvciB0aGUgTU1JTyB2YXJpYW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gQXJlIHRoZXJlIGRldmljZSB0cmVlIChPRikgbWF0Y2ggdGFibGVzIGludm9sdmVkPyBUaGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuIHRoZXNlIGRheXMsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uZmlybS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIHRoZXNlIGRldmljZXMgZHVyaW5nIHRoZSBib290IHByb2Nlc3MgYW5kIGhvdyB0aGUgcmVsZXZhbnQgZHJpdmVyIGlzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGFueSBwb3RlbnRpYWwgcXVpcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0XHRcdGJyZWFrO1xuIDEzMTpcdFx0XHR9XG4gMTMyOlx0XHRcdHByaXYtXHUwMDNlcG9ydHNbNSAmIzQzOyBpXS5zZ21paV9wY3MgPSBwY3M7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiBpKVxuIDEzNjpcdFx0XHRtdGtfcGNzX2x5bnhpX2Rlc3Ryb3kocHJpdi1cdTAwM2Vwb3J0c1s1XS5zZ21paV9wY3MpO1xuIDEzNzpcdFxuIDEzODpcdFx0cmV0dXJuIHJldDtcbiAxMzk6XHR9XG4gMTQwOlx0XG4gMTQxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7XG4gMTQyOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7ZWNvbmV0LGVuNzUxMjIxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV9FWFRdLCB9LFxuIDE0MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzYyMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSxcbiAxNDQ6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc1MzBcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMF0sIH0sXG4gMTQ1Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzFdLCB9LFxuIDE0NjpcdFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gMTQ3Olx0fTtcbiAxNDg6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xuIDE0OTpcdFxuIDE1MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xuIDE1MTpcdFx0LnJlZ19iaXRzID0gMTYsXG4gMTUyOlx0XHQudmFsX2JpdHMgPSAzMixcbiAxNTM6XHRcdC5yZWdfc3RyaWRlID0gNCxcbiAxNTQ6XHRcdC5tYXhfcmVnaXN0ZXIgPSBNVDc1MzBfQ1JFVixcbiAxNTU6XHRcdC5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX2xvY2ssXG4gMTU2Olx0XHQudW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayxcbiAxNTc6XHR9O1xuIDE1ODpcdFxuIDE1OTpcdHN0YXRpYyBpbnRcbiAxNjA6XHRtdDc1MzBfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIDE2MTpcdHtcbiAxNjI6XHRcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjID0gcmVnbWFwX2NvbmZpZztcbiAxNjM6XHRcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcbiAxNjQ6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47XG4gMTY1Olx0XHRpbnQgcmV0O1xuIDE2NjpcdFxuIDE2NzpcdFx0ZG4gPSBtZGlvZGV2LVx1MDAzZWRldi5vZl9ub2RlO1xuIDE2ODpcdFxuIDE2OTpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNjgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEhhcmR3YXJlIEFic3RyYWN0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBzZWVpbmcgc29tZXRoaW5nIHBlY3VsaWFyLCBhbmQgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjayBkb3duIHRoZSBzb3VyY2UuIEdpdmVuIHRoZSBsaWtlbHkgYXJlYSBvZiB0aGUgcHJvYmxlbSwgSSBrbm93IEkgc2hvdWxkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuIEkmIzM5O3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgdGhlIG1vcmUgb2J2aW91cyBzdXNwZWN0cywgYnV0IGl0JiMzOTtzIHRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtdDc1MzAtbW1pby5jYC4gVGhpcyBmaWxlIGFsbW9zdCBjZXJ0YWlubHkgY29udGFpbnMgdGhlIGxvdy1sZXZlbCBtZW1vcnktbWFwcGVkIEkvTyBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zIGZvciB0aGUgTVQ3NTMwIGhhcmR3YXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIGFyZSBkZWZpbmVkLCBhbmQgdGhlIGNyaXRpY2FsIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGl0c2VsZiBpcyBoYW5kbGVkLiBUaGlzIGlzIGxpa2VseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFwmIzM0O210NzUzMC5oXCYjMzQ7XG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OTg4X29mX21hdGNoW10gPSB7XG4gIDEzOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGFuNzU4My1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXG4gIDE0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG4gIDE1Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7ZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFdLCB9LFxuICAxNjpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1Mjgtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxuICAxNzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sXG4gIDE4Olx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiAgMTk6XHR9O1xuICAyMDpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10Nzk4OF9vZl9tYXRjaCk7XG4gIDIxOlx0XG4gIDIyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHN3X3JlZ21hcF9jb25maWcgPSB7XG4gIDIzOlx0XHQubmFtZSA9IFwmIzM0O3N3aXRjaFwmIzM0OyxcbiAgMjQ6XHRcdC5yZWdfYml0cyA9IDE2LFxuICAyNTpcdFx0LnZhbF9iaXRzID0gMzIsXG4gIDI2Olx0XHQucmVnX3N0cmlkZSA9IDQsXG4gIDI3Olx0XHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXG4gIDI4Olx0fTtcbiAgMjk6XHRcbiAgMzA6XHRzdGF0aWMgaW50XG4gIDMxOlx0bXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gIDMyOlx0e1xuICAzMzpcdFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuICAzNDpcdFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XG4gIDM1Olx0XHRpbnQgcmV0O1xuICAzNjpcdFxuICAzNzpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4gIDM4Olx0XHRpZiAoIXByaXYpXG4gIDM5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA0MDpcdFxuICA0MTpcdFx0cHJpdi1cdTAwM2VidXMgPSBOVUxMO1xuICA0MjpcdFx0cHJpdi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAgNDM6XHRcbiAgNDQ6XHRcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XG4gIDQ1Olx0XHRpZiAocmV0KVxuICA0NjpcdFx0XHRyZXR1cm4gcmV0O1xuICA0NzpcdFxuICA0ODpcdFx0cHJpdi1cdTAwM2Vyc3RjID0gZGV2bV9yZXNldF9jb250cm9sX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4gIDQ5Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcnN0YykpIHtcbiAgNTA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q291bGRuJiMzOTt0IGdldCBvdXIgcmVzZXQgbGluZVxcblwmIzM0Oyk7XG4gIDUxOlx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcnN0Yyk7XG4gIDUyOlx0XHR9XG4gIDUzOlx0XG4gIDU0Olx0XHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7XG4gIDU1Olx0XHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcbiAgNTY6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSBzcGFjZVxcblwmIzM0Oyk7XG4gIDU3Olx0XHRcdHJldHVybiAtRU5YSU87XG4gIDU4Olx0XHR9XG4gIDU5Olx0XG4gIDYwOlx0XHRwcml2LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgYmFzZV9hZGRyLFxuICA2MTpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnN3X3JlZ21hcF9jb25maWcpO1xuICA2MjpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gIDYzOlx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiAgNjQ6XHRcbiAgNjU6XHRcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4gIDY2Olx0XG4gIDY3Olx0XHRpZiAocmV0KVxuICA2ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA2OTpcdFxuICA3MDpcdFx0cmV0dXJuIG10NzUzMF9zZXR1cF9tZGlvKHByaXYpO1xuICA3MTpcdH1cbiAgNzI6XHRcbiAgNzM6XHRzdGF0aWMgdm9pZCBtdDc5ODhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gIDc0Olx0e1xuICA3NTpcdFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAocHJpdilcbiAgNzg6XHRcdFx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XG4gIDc5Olx0fVxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzU2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgTVQ3NTMwIERyaXZlciBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYG10NzUzMGAuLi4gcmlnaHQsIHRoYXQmIzM5O3MgYSBEU0EgZHJpdmVyIGZvciBNZWRpYVRlay9FY29OZXQgZXRoZXJuZXQgc3dpdGNoZXMuIEFuZCBpdCYjMzk7cyBub3QganVzdCB0aGUgTVQ3NTMwOyBpdCBjb3ZlcnMgYSBmYW1pbHkgb2YgdGhlbSwgaW5jbHVkaW5nIE1UNzUzMSwgTVQ3NjIxLCBhbmQgc28gb24uIFRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgU29DLWludGVybmFsIEV0aGVybmV0IHN3aXRjaGVzLCBvciBNRElPL09GLXByb2JlZCBleHRlcm5hbCBzd2l0Y2hlcywgZm91bmQgb24gc3BlY2lmaWMgQVJNL01JUFMgTWVkaWFUZWsvRWNvTmV0L0Fpcm9oYSBTb0NzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB4ODYvYW1kNjQgUUVNVSBlbnZpcm9ubWVudD8gIENhbiB3ZSBwcm9iZSBvciBlbXVsYXRlIHRoZXNlIERTQSBzd2l0Y2hlcyB3aXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYSBwcm9wZXJseSBjb25zdHJ1Y3RlZCBkZXZpY2UgdHJlZT8KCkxldCBtZSByZXZpZXcgdGhlIHJlYWNoYWJpbGl0eSBjcml0ZXJpYS4gVGhlIHByaW1hcnkgZ2F0ZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBwcm9tcHQgZW1waGFzaXplcyB0aGF0IGZ1enppbmcgc2hvdWxkIG9ubHkgdGFyZ2V0IGNvZGUgdGhhdCAqY2FuKiBhY3R1YWxseSBydW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgbWVhbmluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgb3IgdHVuL3RhcC4gIElmIHRoZSBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgaXQmIzM5O3MgYSBuby1nbyBmb3IgZnV6emluZywgbm8gbWF0dGVyIGhvdyBjb21wbGV4IHRoZSBsb2dpYy4KClRoZSBleGFtcGxlcyBvZiAqdW5yZWFjaGFibGUqIGhhcmR3YXJlIGFyZSBpbGx1bWluYXRpbmc6IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDcy9QQ0llIGNhcmRzIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLiAgQWxzbywgY29kZSBwYXRocyBzcGVjaWZpYyB0byBub24tdGFyZ2V0IGFyY2hpdGVjdHVyZXMuCgpTbywgaG93IGFyZSB0aGVzZSBNRElPIGFuZCBNTUlPIERTQSBkcml2ZXJzIHByb2JlZD8gQ2FuIHN5emthbGxlciBwcm9iZSB0aGVtPyBUaGUga2V5IGlzIHdoZXRoZXIgb3Igbm90IHN5emthbGxlciBvciB1c2Vyc3BhY2UgY2FuIHByb2JlIE9GIHBsYXRmb3JtIGRldmljZXMgb3IgTURJTyBkZXZpY2VzIG9uIGFtZDY0LCBvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCkFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBPbiBhbWQ2NCwgaXMgdGhlcmUgZXZlbiBhIERUL09GIG9yIHZpcnR1YWwgTURJTyBidXMgb3IgQUNQSSB0YWJsZSBpbnN0YW50aWF0aW5nIGFuIGBlY29uZXQsZW43NTEyMjFgIG9yIGBtZWRpYXRlayxtdDc1MzBgPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRldmljZSBtYXRjaGluZy4gYG10NzUzMC1tZGlvYCBhbmQgYG10NzUzMC1tbWlvYCBzZWVtIHRvIG1hdGNoIG9ubHkgdGhyb3VnaCBgb2ZfZGV2aWNlX2lkYCBlbnRyaWVzLCBzcGVjaWZpY2FsbHkgYG10NzUzMF9vZl9tYXRjaFtdYCBhbmQgYG10Nzk4OF9vZl9tYXRjaFtdYC4gIFRoYXQmIzM5O3MgRGV2aWNlIFRyZWUgdGVycml0b3J5LiBObyBwbGF0Zm9ybSBkZXZpY2UgSURzLCBubyBBQ1BJIGRldmljZSBJRHMsIG5vIFBDSSBkZXZpY2UgSURzIOKAkyBzdHJpY3RseSBPRiBkZXZpY2VzLiBBbmQgdGhlc2UgZGV2aWNlcyBhcmUgZm9yIHNwZWNpZmljIE1lZGlhVGVrL0Vjb05ldCBTb0NzLCB0aGUgbGlrZXMgb2YgRU43NTEyMjEgYW5kIE1UNzYyMSwgd2hpY2ggYXJlIE1JUFMvQVJNLgoKVGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IEluIG91ciB4ODZfNjQvYW1kNjQgUUVNVS9HQ0Ugc2V0dXAsIHRoZXJlJiMzOTtzIG5vIERldmljZSBUcmVlIG5vZGVzIGZvciB0aGVzZSBNZWRpYVRlay9FY29uZXQgc3dpdGNoZXMsIGFuZCB0aGVyZSYjMzk7cyBubyBwaHlzaWNhbCBoYXJkd2FyZSBlaXRoZXIuIFRoZXkmIzM5O3JlIGp1c3Qgbm90IHByZXNlbnQuCgpOb3csIGEgZmluYWwsIGhvcGVmdWwgdGhvdWdodDogQ291bGQgdGhlc2UgRFNBIHN3aXRjaGVzIGJlICptb2NrYWJsZSo/IENvdWxkIHdlIHJlYWNoIHRoZW0gdmlhIHNvbWUgdmlydHVhbCBpbnRlcmZhY2UgbGlrZSBuZXRkZXZzaW0gb3IgZHNhX2xvb3A/IEkgbmVlZCB0byBrbm93IGlmIGBkc2FfbG9vcGAgb3IgbW9jayBkcml2ZXJzIHVzZSBgbXQ3NTMwYC4gIExldCYjMzk7cyBzZWU6IGBkc2FfbG9vcGAgaXMgYSBmaXhlZCwgZHVtbXkgZHJpdmVyIGZvciB0ZXN0aW5nIERTQSwgdXNpbmcgaXRzIG93biBzd2l0Y2ggZHJpdmVyIChgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgKS4gSXQgZG9lcyAqbm90KiB1dGlsaXplIGBtdDc1MzAuY2AuIFNvIHRoYXQmIzM5O3Mgb3V0LiBJJiMzOTtsbCB2ZXJpZnkgdGhpcyB3aXRoIGdyZXBwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzUzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjUzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTkVUX0RTQV9LUzg5OTUpIFx0JiM0Mzs9IGtzODk5NS5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXHQmIzQzOz0gbXQ3NTMwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NRElPKSAmIzQzOz0gbXQ3NTMwLW1kaW8ub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICYjNDM7PSBtdDc1MzAtbW1pby5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICYjNDM7PSBtdDc2Mjgub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE1LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTY6I2luY2x1ZGUgXCYjMzQ7bXQ3NTMwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9MTg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTk6bXQ3NTMwX3JlZ21hcF93cml0ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjAte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBjb250ZXh0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjItXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9NDM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6NDQ6bXQ3NTMwX3JlZ21hcF9yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCAqdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6NDY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBjb250ZXh0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9NzY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjc3Om10NzUzMF9tZGlvX3JlZ21hcF9sb2NrKHZvaWQgKm1kaW9fbG9jaylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTc4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz04Mj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODM6bXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayh2b2lkICptZGlvX2xvY2spXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy04NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODctXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo4ODpzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgbXQ3NTMwX3JlZ21hcF9idXMgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo4OTpcdC5yZWdfd3JpdGUgPSBtdDc1MzBfcmVnbWFwX3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6OTA6XHQucmVnX3JlYWQgPSBtdDc1MzBfcmVnbWFwX3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05MS19O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTkzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjk0Om10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtOTUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6OTY6XHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqbXQ3NTMxX3Bjc19jb25maWdbMl0gPSB7fTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk3LVx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTAxLVx0Zm9yIChpID0gcHJpdi1cdTAwM2VwNV9zZ21paSA/IDAgOiAxOyBpIFx1MDAzYyAyOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTAyOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXSA9IGRldm1fa3phbGxvYyhwcml2LVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwMy1cdFx0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCByZWdtYXBfY29uZmlnKSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwNC1cdFx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMDU6XHRcdGlmICghbXQ3NTMxX3Bjc19jb25maWdbaV0pIHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwNi1cdFx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwOS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExMDpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlbmFtZSA9IGkgPyBcJiMzNDtwb3J0NlwmIzM0OyA6IFwmIzM0O3BvcnQ1XCYjMzQ7O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTExOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2VyZWdfYml0cyA9IDE2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTEyOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2V2YWxfYml0cyA9IDMyO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTEzOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2VyZWdfc3RyaWRlID0gNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExNDpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlcmVnX2Jhc2UgPSBNVDc1MzFfU0dNSUlfUkVHX0JBU0UoNSAmIzQzOyBpKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExNTpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlbWF4X3JlZ2lzdGVyID0gMHgxN2M7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTY6XHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZWxvY2sgPSBtdDc1MzBfbWRpb19yZWdtYXBfbG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExNzpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNldW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExODpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlbG9ja19hcmcgPSBcdTAwMjZwcml2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2s7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMjA6XHRcdHJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cdTAwM2VkZXYsIFx1MDAyNm10NzUzMF9yZWdtYXBfYnVzLCBwcml2LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIxOlx0XHRcdFx0XHQgIG10NzUzMV9wY3NfY29uZmlnW2ldKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMi1cdFx0aWYgKElTX0VSUihyZWdtYXApKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQwLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1MTIyMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFfRVhUXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0MzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc2MjFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMxXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ni1cdHsgLyogc2VudGluZWwgKi8gfVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ3LX07XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDg6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NTMwX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNTU6XHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTU2Olx0LnVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2ssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjEte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYyLVx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVx0c3RydWN0IGRldmljZV9ub2RlICpkbjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNzc6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXHRyYy5sb2NrX2FyZyA9IFx1MDAyNnByaXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxNzpcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdChwcml2LVx1MDAzZWRldiwgXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTgtXHRcdFx0XHRcdHByaXYsIFx1MDAyNnJjKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMjItXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9NVDc1MzEpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjM6XHRcdHByaXYtXHUwMDNlY3JlYXRlX3NnbWlpID0gbXQ3NTMxX2NyZWF0ZV9zZ21paTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIyNC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIyOTptdDc1MzBfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMyLVx0aW50IHJldCA9IDAsIGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjQ3Olx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNDgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjUzOnN0YXRpYyB2b2lkIG10NzUzMF9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1Olx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjU6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBtdDc1MzBfbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjY6XHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY3Olx0LnJlbW92ZSA9IG10NzUzMF9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XHQuc2h1dGRvd24gPSBtdDc1MzBfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjktXHQubWRpb2Rydi5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzA6XHRcdC5uYW1lID0gXCYjMzQ7bXQ3NTMwLW1kaW9cJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XHRcdC5vZl9tYXRjaF90YWJsZSA9IG10NzUzMF9vZl9tYXRjaCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Mjc1Om1kaW9fbW9kdWxlX2RyaXZlcihtdDc1MzBfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMDojaW5jbHVkZSBcJiMzNDttdDc1MzAuaFwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMTEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEzOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxhbjc1ODMtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTEyMjEtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNjpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xOC1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTMxPW10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MzM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cdHZvaWQgX19pb21lbSAqYmFzZV9hZGRyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NDQ6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzA6XHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9NzM9c3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzU6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzctXHRpZiAocHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4Olx0XHRtdDc1MzBfcmVtb3ZlX2NvbW1vbihwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz04MT1zdGF0aWMgdm9pZCBtdDc5ODhfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjgzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz05Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc5ODhfcGxhdGZvcm1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTk3LVx0LmRyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4Olx0XHQubmFtZSA9IFwmIzM0O210NzUzMC1tbWlvXCYjMzQ7LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtOTktXHRcdC5vZl9tYXRjaF90YWJsZSA9IG10Nzk4OF9vZl9tYXRjaCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjY6I2luY2x1ZGUgXCYjMzQ7bXQ3NTMwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE6c3RhdGljIHN0cnVjdCBtdDc1M3hfcGNzICpwY3NfdG9fbXQ3NTN4X3BjcyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMi17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XHRyZXR1cm4gY29udGFpbmVyX29mKHBjcywgc3RydWN0IG10NzUzeF9wY3MsIHBjcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNi0vKiBTdHJpbmcsIG9mZnNldCwgYW5kIHJlZ2lzdGVyIHNpemUgaW4gYnl0ZXMgaWYgZGlmZmVyZW50IGZyb20gNCBieXRlcyAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3NTMwX21pYl9kZXNjIG10NzUzMF9taWJbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cdE1JQl9ERVNDKDEsIE1UNzUzMF9QT1JUX01JQl9UWF9EUk9QLCBcJiMzNDtUeERyb3BcJiMzNDspLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTUxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2MzptdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcwOm10NzUzMF9tdXRleF91bmxvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03OC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Nzk6XHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04OC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcdG10NzUzMF9tdXRleF9sb2NrKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEzOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTc6Y29yZV9ybXcoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHNldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTIwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTMwOlx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNjU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNjY6Y29yZV9zZXQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTE3MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3ODptdDc1MzBfZmRiX2NtZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGVudW0gbXQ3NTMwX2ZkYl9jbWQgY21kLCB1MzIgKnJzcClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjExOnN0YXRpYyB2b2lkIG10NzUzMF9wb3J0X2Zhc3RfYWdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxNC1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIzMT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIzMjptdDc1MzBfZmRiX3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBzdHJ1Y3QgbXQ3NTMwX2ZkYiAqZmRiKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI1OD1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNjAtXHRcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI4OC0vKiBTZXQgdXAgc3dpdGNoIGNvcmUgY2xvY2sgZm9yIE1UNzUzMCAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yOTAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE4Om10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzE5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzI5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMwOm10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzI6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMzMy1cdHUzMiBuY3BvMSwgc3NjX2RlbHRhLCB4dGFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zOTE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozOTI6bXQ3NTMxX3BsbF9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozOTQ6XHRlbnVtIG10NzUzMV94dGFsX2ZzZWwgeHRhbDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOTUtXHR1MzIgdG9wX3NpZztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NDc5PXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDgwOmVuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ4MS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5Mz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NDplbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnR4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NTpcdFx0XHRcdCAgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ5Ni1cdFx0XHRcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01NzM9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NzQ6ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTc1LVx0XHQgICAgICB1OCBjbGtfZHJ2bilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTg5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkwOmVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkxOlx0XHRcdCAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU5Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTY3NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY3NjptdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY3Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4MC1cdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnBlZXI7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My1cdHN0cnVjdCBkc2FfbGluayAqZGw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTcyND1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNTptdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjYte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNzpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzI4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzMzOnN0YXRpYyBpbnQgbXQ3NTMwX3BoeV9yZWFkX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mzg6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczOS1cdFx0XHRcdHUxNiB2YWwpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0My1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NDQ6c3RhdGljIGludCBtdDc1MzBfcGh5X3JlYWRfYzQ1KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ1LVx0XHRcdCAgICAgICBpbnQgZGV2YWQsIGludCByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTA6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzUxLVx0XHRcdFx0aW50IHJlZ251bSwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzU2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTc6bXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1OC1cdFx0XHRpbnQgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz04MDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjgwODptdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwOS1cdFx0XHQgaW50IHJlZ251bSwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg1Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODU4Om10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODU5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTU6bXQ3NTMxX2luZF9jMjJfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODk2LVx0XHRcdCB1MTYgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTMxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzI6bXQ3NTN4X3BoeV9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzMte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjkzNDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkzNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTM5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NDA6bXQ3NTN4X3BoeV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldmFkLCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0MS17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0ODptdDc1M3hfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NDkte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1MDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk1MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTY6bXQ3NTN4X3BoeV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTctXHRcdCAgICAgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1OTpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTY0PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTY1Om10NzUzMF9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2Ni1cdFx0ICAgdWludDhfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTcyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3MzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3NDpcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG10NzUzMF9taWJbaV0ubmFtZSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTc3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc4Om10NzUzMF9yZWFkX3BvcnRfc3RhdHMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NzktXHRcdCAgICAgICB1MzIgb2Zmc2V0LCB1OCBzaXplLCB1aW50NjRfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTkyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTkzOm10NzUzMF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5NC1cdFx0XHQgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5NzpcdGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgKm1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTgtXHRpbnQgaTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMTpcdFx0bWliID0gXHUwMDI2bXQ3NTMwX21pYltpXTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDAyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDM6XHRcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgbWliLVx1MDAzZW9mZnNldCwgbWliLVx1MDAzZXNpemUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAwNC1cdFx0XHRcdCAgICAgICBkYXRhICYjNDM7IGkpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMDA4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDA5Om10NzUzMF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxMy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE0Olx0cmV0dXJuIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNS19XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE3OnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTgtXHRcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDIwOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDIxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI2LVx0ICovXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyNzpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1VOSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyOC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAzMDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1NJTkdMRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMzOlx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElQTEVfQ09MTElTSU9OLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzQtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM2Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfVU5JQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM3LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzOC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM5Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfQllURVMsIDIsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0MC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0MjpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FMSUdOX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQzLVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDU6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9ERUZFUlJFRCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ2LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDg6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9MQVRFX0NPTExJU0lPTiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ5LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTGF0ZUNvbGxpc2lvbnMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1MTpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1Mi1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0JZVEVTLCAyLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTUtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNTc6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9NVUxUSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OS1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNjA6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9CUk9BRENBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2MS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX01VTFRJQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY1LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2Ni1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDY3Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfQlJPQURDQVNULCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjgtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXQ3NTMwX3Jtb25fcmFuZ2VzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3My1cdHsgMCwgNjQgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDgyOnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODMtXHRcdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODctXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA4ODpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1VOREVSX1NJWkVfRVJSLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODktXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTA6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9PVkVSX1NaX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDkxLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZW92ZXJzaXplX3BrdHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTI6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9GUkFHX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDkzLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA5NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0pBQkJFUl9FUlIsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA5NS1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDk2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTc6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNjQsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA5OC1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDk5Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfUEtUX1NaXzY1X1RPXzEyNywgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTAwLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RbMV0pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDE6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTAyLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl0pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDM6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTA0LVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RbM10pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDU6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwNi1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzRdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTA3Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfUEtUX1NaXzEwMjRfVE9fTUFYLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMDgtXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNlaGlzdFs1XSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwOS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTEwOlx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzY0LCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMTEtXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFswXSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTExMjpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl82NV9UT18xMjcsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExMy1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE0Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzEyOF9UT18yNTUsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExNS1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE2Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzI1Nl9UT181MTEsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExNy1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE4Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzUxMl9UT18xMDIzLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMTktXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs0XSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEyMDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl8xMDI0X1RPX01BWCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTIxLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNV0pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEyMzpcdCpyYW5nZXMgPSBtdDc1MzBfcm1vbl9yYW5nZXM7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyNC19XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTI2OnN0YXRpYyB2b2lkIG10NzUzMF9yZWFkX3BvcnRfc3RhdHM2NChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjctXHRcdFx0XHQgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RvcmFnZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEzNS1cdCAqL1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODkzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBtdDc1MzBgIERyaXZlcioqCgpBbHJpZ2h0LCBzbyBgbXQ3NTMwYC4uLiByaWdodCwgdGhhdCYjMzk7cyBhIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZHJpdmVyLiBTcGVjaWZpY2FsbHkgZm9yIHRoYXQgTWVkaWFUZWsgb3IgRWNvTmV0IHN3aXRjaCBoYXJkd2FyZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSB0cmlnZ2VyIG9yIHByb2JlIHRoYXQgdGhpbmcgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIGluIHRoZSBzeXN0ZW0/IFlvdSBrbm93LCB0aGUga2luZCBvZiBzaXR1YXRpb24gd2hlcmUgeW91IG1pZ2h0IGdldCBhIGZhbHNlIHBvc2l0aXZlIG9yIGFuIHVuZXhwZWN0ZWQgbG9hZGluZy4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRvIGEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4gQSBkZWVwIGRpdmUgaXMgbmVlZGVkIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGlzIHNvbWVob3cgYmVpbmcgcmVmZXJlbmNlZCBvciBjYWxsZWQgd2l0aG91dCB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgY29uZGl0aW9ucyBiZWluZyBtZXQuIEkgbmVlZCB0byBjb21iIHRocm91Z2ggdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUsIGxvb2tpbmcgZm9yIGFueSBpbnN0YW5jZXMgb2YgZWl0aGVyIGBtdDc1MzBgIG9yIGBtdDc1M3hgIGJlaW5nIG1lbnRpb25lZCBvciB1c2VkLiBBbnkgY2x1ZXMgd2lsbCBiZSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzUzMHxtdDc1M3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE2MzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbCNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9ODk9cHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC05My0gICAgICAgICAgU3RhbmRhbG9uZSBNVDc1MzAgYW5kIG11bHRpLWNoaXAgbW9kdWxlIE1UNzUzMCBpbiBNVDc2MjNBSSBTb0NcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjk0OiAgICAgICAgY29uc3Q6IG1lZGlhdGVrLG10NzUzMFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtOTUtXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MjI3PSRkZWZzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTIzOS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjI0MDogIG10NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydDpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTI0MS0gICAgcGF0dGVyblByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjUzLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MjU0OiAgbXQ3NTMwLWRzYS1wb3J0OlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjU1LSAgICBwYXR0ZXJuUHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbD0zMDg9YWxsT2Y6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzI2LSAgICAgICAgY29tcGF0aWJsZTpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjMyNzogICAgICAgICAgY29uc3Q6IG1lZGlhdGVrLG10NzUzMFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzI4LSAgICB0aGVuOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzI5OiAgICAgICRyZWY6IFwmIzM0OyMvJGRlZnMvbXQ3NTMwLWRzYS1wb3J0XCYjMzQ7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zMzAtICAgICAgcmVxdWlyZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzQ4LSAgICB0aGVuOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzQ5OiAgICAgICRyZWY6IFwmIzM0OyMvJGRlZnMvbXQ3NTMwLWRzYS1wb3J0XCYjMzQ7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNTAtICAgICAgcmVxdWlyZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzc0LSAgICB0aGVuOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6Mzc1OiAgICAgICRyZWY6IFwmIzM0OyMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0XCYjMzQ7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNzYtICAgICAgcmVxdWlyZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MzgxPWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTM5MC0gICAgICAgIHN3aXRjaEAxZiB7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDozOTE6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMFwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTM5Mi0gICAgICAgICAgICByZWcgPSBcdTAwM2MweDFmXHUwMDNlO1xuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTQ1MS0gICAgICAgIHN3aXRjaEAxZiB7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDo0NTI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMFwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTQ1My0gICAgICAgICAgICByZWcgPSBcdTAwM2MweDFmXHUwMDNlO1xuLS1cbk1BSU5UQUlORVJTPTE2ODIxPVM6XHRNYWludGFpbmVkXG5NQUlOVEFJTkVSUzoxNjgyMjpGOlx0ZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcbk1BSU5UQUlORVJTOjE2ODIzOkY6XHRkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuTUFJTlRBSU5FUlM6MTY4MjQ6RjpcdGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuKlxuTUFJTlRBSU5FUlMtMTY4MjUtRjpcdG5ldC9kc2EvdGFnX210ay5jXG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzYS5kdHNpPTUwPVx0XHRzd2l0Y2gwOiBzd2l0Y2hAMWYge1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzYS5kdHNpOjUxOlx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc1MzBcJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNhLmR0c2ktNTItXHRcdFx0cmVnID0gXHUwMDNjMHgxZlx1MDAzZTtcbi0tXG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNuLWJhbmFuYXBpLWJwaS1yMi5kdHM9MjAzPVx0XHRzd2l0Y2hAMWYge1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1iYW5hbmFwaS1icGktcjIuZHRzOjIwNDpcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1iYW5hbmFwaS1icGktcjIuZHRzLTIwNS1cdFx0XHRyZWcgPSBcdTAwM2MweDFmXHUwMDNlO1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzPTE4OD1cdFx0c3dpdGNoQDFmIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzOjE4OTpcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1yZmItZW1tYy5kdHMtMTkwLVx0XHRcdHJlZyA9IFx1MDAzYzB4MWZcdTAwM2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwKVx0JiM0Mzs9IG10NzUzMC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTURJTykgJiM0Mzs9IG10NzUzMC1tZGlvLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NTUlPKSAmIzQzOz0gbXQ3NTMwLW1taW8ub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NjI4KSAmIzQzOz0gbXQ3NjI4Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE2OiNpbmNsdWRlIFwmIzM0O210NzUzMC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE5Om10NzUzMF9yZWdtYXBfd3JpdGUodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIwLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIyLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTQzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ0Om10NzUzMF9yZWdtYXBfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgKnZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTQ1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ2Olx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTQ3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTc2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo3NzptdDc1MzBfbWRpb19yZWdtYXBfbG9jayh2b2lkICptZGlvX2xvY2spXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy03OC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9ODI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjgzOm10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2sodm9pZCAqbWRpb19sb2NrKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTg3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzIG10NzUzMF9yZWdtYXBfYnVzID0ge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODk6XHQucmVnX3dyaXRlID0gbXQ3NTMwX3JlZ21hcF93cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjkwOlx0LnJlZ19yZWFkID0gbXQ3NTMwX3JlZ21hcF9yZWFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtOTEtfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz05Mz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo5NDptdDc1MzFfY3JlYXRlX3NnbWlpKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTUtXHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZW1heF9yZWdpc3RlciA9IDB4MTdjO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE2Olx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2Vsb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX2xvY2s7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTc6XHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZXVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2s7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTgtXHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZWxvY2tfYXJnID0gXHUwMDI2cHJpdi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTE5LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIwOlx0XHRyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KHByaXYtXHUwMDNlZGV2LCBcdTAwMjZtdDc1MzBfcmVnbWFwX2J1cywgcHJpdixcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMS1cdFx0XHRcdFx0ICBtdDc1MzFfcGNzX2NvbmZpZ1tpXSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQwLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1MTIyMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFfRVhUXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0MzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc2MjFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMxXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ni1cdHsgLyogc2VudGluZWwgKi8gfVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ3LX07XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDg6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NTMwX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNTU6XHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTU2Olx0LnVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2ssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjEte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYyLVx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVx0c3RydWN0IGRldmljZV9ub2RlICpkbjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNzc6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXHRyYy5sb2NrX2FyZyA9IFx1MDAyNnByaXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxNzpcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdChwcml2LVx1MDAzZWRldiwgXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTgtXHRcdFx0XHRcdHByaXYsIFx1MDAyNnJjKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIyOTptdDc1MzBfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMyLVx0aW50IHJldCA9IDAsIGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjQ3Olx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNDgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjUzOnN0YXRpYyB2b2lkIG10NzUzMF9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1Olx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjU6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBtdDc1MzBfbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjY6XHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY3Olx0LnJlbW92ZSA9IG10NzUzMF9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XHQuc2h1dGRvd24gPSBtdDc1MzBfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjktXHQubWRpb2Rydi5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzA6XHRcdC5uYW1lID0gXCYjMzQ7bXQ3NTMwLW1kaW9cJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XHRcdC5vZl9tYXRjaF90YWJsZSA9IG10NzUzMF9vZl9tYXRjaCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Mjc1Om1kaW9fbW9kdWxlX2RyaXZlcihtdDc1MzBfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMDojaW5jbHVkZSBcJiMzNDttdDc1MzAuaFwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMTEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEzOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxhbjc1ODMtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTEyMjEtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNjpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xOC1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTMxPW10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MzM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cdHZvaWQgX19pb21lbSAqYmFzZV9hZGRyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NDQ6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzA6XHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9NzM9c3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzU6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzctXHRpZiAocHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4Olx0XHRtdDc1MzBfcmVtb3ZlX2NvbW1vbihwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz04MT1zdGF0aWMgdm9pZCBtdDc5ODhfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjgzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz05Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc5ODhfcGxhdGZvcm1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTk3LVx0LmRyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4Olx0XHQubmFtZSA9IFwmIzM0O210NzUzMC1tbWlvXCYjMzQ7LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtOTktXHRcdC5vZl9tYXRjaF90YWJsZSA9IG10Nzk4OF9vZl9tYXRjaCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjY6I2luY2x1ZGUgXCYjMzQ7bXQ3NTMwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE6c3RhdGljIHN0cnVjdCBtdDc1M3hfcGNzICpwY3NfdG9fbXQ3NTN4X3BjcyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMi17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XHRyZXR1cm4gY29udGFpbmVyX29mKHBjcywgc3RydWN0IG10NzUzeF9wY3MsIHBjcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNi0vKiBTdHJpbmcsIG9mZnNldCwgYW5kIHJlZ2lzdGVyIHNpemUgaW4gYnl0ZXMgaWYgZGlmZmVyZW50IGZyb20gNCBieXRlcyAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3NTMwX21pYl9kZXNjIG10NzUzMF9taWJbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cdE1JQl9ERVNDKDEsIE1UNzUzMF9QT1JUX01JQl9UWF9EUk9QLCBcJiMzNDtUeERyb3BcJiMzNDspLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTUxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2MzptdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcwOm10NzUzMF9tdXRleF91bmxvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03OC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Nzk6XHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04OC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcdG10NzUzMF9tdXRleF9sb2NrKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEzOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTc6Y29yZV9ybXcoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHNldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTIwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTMwOlx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNjU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNjY6Y29yZV9zZXQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTE3MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3ODptdDc1MzBfZmRiX2NtZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGVudW0gbXQ3NTMwX2ZkYl9jbWQgY21kLCB1MzIgKnJzcClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjExOnN0YXRpYyB2b2lkIG10NzUzMF9wb3J0X2Zhc3RfYWdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxNC1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIzMT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIzMjptdDc1MzBfZmRiX3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBzdHJ1Y3QgbXQ3NTMwX2ZkYiAqZmRiKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI1OD1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNjAtXHRcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI4OC0vKiBTZXQgdXAgc3dpdGNoIGNvcmUgY2xvY2sgZm9yIE1UNzUzMCAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yOTAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE4Om10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzE5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzI5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMwOm10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzI6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMzMy1cdHUzMiBuY3BvMSwgc3NjX2RlbHRhLCB4dGFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zOTE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozOTI6bXQ3NTMxX3BsbF9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NDc5PXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDgwOmVuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ4MS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5Mz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NDplbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnR4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NTpcdFx0XHRcdCAgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ5Ni1cdFx0XHRcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01NzM9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NzQ6ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTc1LVx0XHQgICAgICB1OCBjbGtfZHJ2bilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTg5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkwOmVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkxOlx0XHRcdCAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU5Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTY3NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY3NjptdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY3Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4MC1cdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnBlZXI7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My1cdHN0cnVjdCBkc2FfbGluayAqZGw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTcyND1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNTptdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjYte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNzpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzI4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzMzOnN0YXRpYyBpbnQgbXQ3NTMwX3BoeV9yZWFkX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mzg6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczOS1cdFx0XHRcdHUxNiB2YWwpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0My1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NDQ6c3RhdGljIGludCBtdDc1MzBfcGh5X3JlYWRfYzQ1KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ1LVx0XHRcdCAgICAgICBpbnQgZGV2YWQsIGludCByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTA6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzUxLVx0XHRcdFx0aW50IHJlZ251bSwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzU2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTc6bXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1OC1cdFx0XHRpbnQgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz04MDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjgwODptdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwOS1cdFx0XHQgaW50IHJlZ251bSwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg1Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODU4Om10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODU5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTU6bXQ3NTMxX2luZF9jMjJfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODk2LVx0XHRcdCB1MTYgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTMxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzI6bXQ3NTN4X3BoeV9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzMte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjkzNDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkzNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTM5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NDA6bXQ3NTN4X3BoeV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldmFkLCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0MS17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0ODptdDc1M3hfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NDkte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1MDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk1MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTY6bXQ3NTN4X3BoeV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTctXHRcdCAgICAgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1OTpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTY0PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTY1Om10NzUzMF9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2Ni1cdFx0ICAgdWludDhfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTcyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3MzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3NDpcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG10NzUzMF9taWJbaV0ubmFtZSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTc3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc4Om10NzUzMF9yZWFkX3BvcnRfc3RhdHMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NzktXHRcdCAgICAgICB1MzIgb2Zmc2V0LCB1OCBzaXplLCB1aW50NjRfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTkyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTkzOm10NzUzMF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5NC1cdFx0XHQgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5NzpcdGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgKm1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTgtXHRpbnQgaTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMTpcdFx0bWliID0gXHUwMDI2bXQ3NTMwX21pYltpXTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDAyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDM6XHRcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgbWliLVx1MDAzZW9mZnNldCwgbWliLVx1MDAzZXNpemUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAwNC1cdFx0XHRcdCAgICAgICBkYXRhICYjNDM7IGkpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMDA4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDA5Om10NzUzMF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxMy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE0Olx0cmV0dXJuIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNS19XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE3OnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTgtXHRcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDIwOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDIxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI2LVx0ICovXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyNzpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1VOSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyOC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAzMDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1NJTkdMRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMzOlx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElQTEVfQ09MTElTSU9OLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzQtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM2Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfVU5JQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM3LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzOC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM5Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfQllURVMsIDIsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0MC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0MjpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FMSUdOX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQzLVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDU6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9ERUZFUlJFRCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ2LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDg6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9MQVRFX0NPTExJU0lPTiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ5LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTGF0ZUNvbGxpc2lvbnMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1MTpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1Mi1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0JZVEVTLCAyLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTUtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNTc6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9NVUxUSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OS1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNjA6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9CUk9BRENBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2MS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX01VTFRJQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY1LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2Ni1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDY3Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfQlJPQURDQVNULCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjgtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXQ3NTMwX3Jtb25fcmFuZ2VzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3My1cdHsgMCwgNjQgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDgyOnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODMtXHRcdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODctXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQwMzEKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogTVQ3NTMwIEV0aGVybmV0IFN3aXRjaCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sYCBhbmQgdGhlIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKmAgZHJpdmVyLiBUaGlzIGlzIHRoZSBNZWRpYVRlay9FY29OZXQvQWlyb2hhIGV0aGVybmV0IHN3aXRjaCBkcml2ZXIgZm9yIHRoZWlyIGVtYmVkZGVkIFNvQ3MsIHNwZWNpZmljYWxseSB0aGUgTVQ3NTMwL01UNzUzMS9NVDc2MjEvTVQ3OTg4L0VONzUxMjIxIGFuZCBzaW1pbGFyIGRldmljZXMuIE15IHRhcmdldCBhcmNoaXRlY3R1cmUgaGVyZSBpcyBhbWQ2NC4KClRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbGlrZSBRRU1VIGFuZCBHQ0Ugb24gYW1kNjQsIHNpbXBseSAqZG9uJiMzOTt0KiBoYXZlIHRoaXMgc3BlY2lmaWMgTWVkaWFUZWsgU29DIHN3aXRjaCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZSBhcmVuJiMzOTt0IGFueSByZWFkaWx5IGF2YWlsYWJsZSBtb2NrIGRldmljZXMgb3IgdmlydHVhbCBidXNlcyB0byBpbnN0YW50aWF0ZSBhbmQgYmluZCB0aGlzIGRyaXZlciBvbiBhbWQ2NC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gTXkgcmV2aWV3IG9mIHNlY3Rpb24gMiBjbGVhcmx5IHNob3dzIGEgc3RydWN0dXJhbCBwcm9ibGVtOiB0aGUgTVQ3NTMwIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgQVNJQy9Tb0MtaW50ZWdyYXRlZCBzd2l0Y2gsIGFuZCB0aGUgY2hhbmdlcyBpbnZvbHZlIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCB0aGUgZHJpdmVyIGZvciB0aGlzIGRldmljZS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgSSBoYXZlIG5vIHJlYXNvbiB0byB0aGluayB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBzdHJ1Y3R1cmFsIHVucmVhY2hhYmlsaXR5IG9mIHRoZSBoYXJkd2FyZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuIEkmIzM5O2xsIG5lZWQgdG8gY2xlYXJseSBzdGF0ZSB0aGF0IHRoZSBtb2RpZmljYXRpb25zIHRvdWNoIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCB0aGUgTVQ3NTMwL01UNzUzMS9FTjc1MTIyMSBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciwgYW5kIHRoYXQgdGhpcyBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIE15IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXJlIGVtcHR5LgoKT2theSwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIGFuZCBhZGRzIHN1cHBvcnQgZm9yIEVjb05ldCBFTjc1MTIyMSBTb0NzIGFuZCBwYXNzdGhyb3VnaCBtb2RlIHRvIHRoZSBNZWRpYVRlayBNVDc1MzAgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAqKS4gVGhpcyBkcml2ZXIgY29udHJvbHMgc3BlY2lmaWMgcGh5c2ljYWwgTWVkaWFUZWsvRWNvTmV0IFNvQyBldGhlcm5ldCBzd2l0Y2hlcyBhbmQgTURJTy9NTUlPIGRldmljZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIERldmljZSBUcmVlIGJpbmRpbmdzIGRvY3VtZW50YXRpb24gYW5kIGFkZHMgc3VwcG9ydCBmb3IgRWNvTmV0IEVONzUxMjIxIFNvQ3MgYW5kIHBhc3N0aHJvdWdoIG1vZGUgdG8gdGhlIE1lZGlhVGVrIE1UNzUzMCBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzUzMCopLiBUaGlzIGRyaXZlciBjb250cm9scyBzcGVjaWZpYyBwaHlzaWNhbCBNZWRpYVRlay9FY29OZXQgU29DIGV0aGVybmV0IHN3aXRjaGVzIGFuZCBNRElPL01NSU8gZGV2aWNlcyB0aGF0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjQ0LjY2ODM2ODcwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODY3ODUxNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgRGV2aWNlIFRyZWUgYmluZGluZ3MgZG9jdW1lbnRhdGlvbiBhbmQgYWRkcyBzdXBwb3J0IGZvciBFY29OZXQgRU43NTEyMjEgU29DcyBhbmQgcGFzc3Rocm91Z2ggbW9kZSB0byB0aGUgTWVkaWFUZWsgTVQ3NTMwIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKikuIFRoaXMgZHJpdmVyIGNvbnRyb2xzIHNwZWNpZmljIHBoeXNpY2FsIE1lZGlhVGVrL0Vjb05ldCBTb0MgZXRoZXJuZXQgc3dpdGNoZXMgYW5kIE1ESU8vTU1JTyBkZXZpY2VzIHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNDo0NC42NjgzNzQ2MzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTI0OTAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzOGE3MjZlOTY2YWRkOWMzMDNmMzhjY2ZiMTkxNjc1ZTgxNDAyNmU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTY6MDQ6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxcbmluZGV4IDkwYjM1ODJiNzYxOTAuLjEwNmM0MDg3NTI4ZDcgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxcbkBAIC0yOSw2ICsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfFxcbiAgIGFuZCB0aGUgc3dpdGNoIHJlZ2lzdGVycyBhcmUgZGlyZWN0bHkgbWFwcGVkIGludG8gU29DJ3MgbWVtb3J5IG1hcCByYXRoZXIgdGhhblxcbiAgIHVzaW5nIE1ESU8uIFRoZSBEU0EgZHJpdmVyIGN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgTVQ3NjIwIHZhcmlhbnRzLlxcbiBcXG4rICBFY29OZXQgRU43NTEyMjEgU29DcyBoYXZlIGEgbWVtb3J5IG1hcHBlZCBNVDc1MzAgd2l0aCAzeCAxMC8xMDAgUEhZcyBhbmQgMXhcXG4rICBnaWdhYml0IFBIWS4gU29tZSBFTjc1MTIyMSBjaGlwcyBzdWNoIGFzIEVONzUxM0cgYW5kIEVONzUyNkcgaGF2ZSBhIG11bHRpLWNoaXBcXG4rICBtb2R1bGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1UNzUzMCBhcyB3ZWxsIGFzIHRoZSBvbi1kaWUgc3dpdGNoLiBJbiB0aGVzZVxcbisgIHBhY2thZ2VzLCB0aGUgbXVsdGktY2hpcCBtb2R1bGUgaXMgY29ubmVjdGVkIHRvIHBvcnQgNSBvZiB0aGUgb24tZGllIHN3aXRjaFxcbisgIHZpYSBhIFRSR01JSSBsaW5rLlxcbitcXG4gICBUaGVyZSBpcyBvbmx5IHRoZSBzdGFuZGFsb25lIHZlcnNpb24gb2YgTVQ3NTMxLlxcbiBcXG4gICBQb3J0IDUgb24gTVQ3NTMwIHN1cHBvcnRzIHZhcmlvdXMgY29uZmlndXJhdGlvbnM6XFxuQEAgLTczLDYgKzc5LDEzIEBAIGRlc2NyaXB0aW9uOiB8XFxuIFxcbiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LlxcbiBcXG4rICBUaGUgTVQ3NTMwIGFuZCBNVDc1MzEgc3dpdGNoZXMgYXJlIGNhcGFibGUgb2YgYmVpbmcgb3BlcmF0ZWQgaW4gXFxcInBhc3N0aHJvdWdoXFxcIlxcbisgIG1vZGUuIEluIHRoaXMgbW9kZSwgdHJhZmZpYyBpcyB1bmNvbmRpdGlvbmFsbHkgcGFzc2VkIGJldHdlZW4gdGhlIENQVSBwb3J0XFxuKyAgYW5kIHRoZSBEU0EgcG9ydCB3aGljaCBsaW5rcyB0byBhIHNlY29uZCBzd2l0Y2guIFRvIHVzZSBwYXNzdGhyb3VnaCBtb2RlLCB0aGVcXG4rICB1cHN0cmVhbSBzd2l0Y2ggaXMgY29uZmlndXJlZCB3aXRoIGEgRFNBIGxpbmsgdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLiBJblxcbisgIHBhc3N0aHJvdWdoIG1vZGUgdGhlIHVwc3RyZWFtIHN3aXRjaCBpcyByZXN0cmljdGVkLCB3aXRoIG5vIG90aGVyIHBvcnRzIG9yXFxuKyAgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYWxsb3dlZC5cXG4rXFxuIHByb3BlcnRpZXM6XFxuICAgY29tcGF0aWJsZTpcXG4gICAgIG9uZU9mOlxcbkBAIC0xMDQsNiArMTE3LDE0IEBAIHByb3BlcnRpZXM6XFxuICAgICAgICAgICBCdWlsdC1pbiBzd2l0Y2ggb2YgdGhlIEVjb05ldCBFTjc1MjggU29DXFxuICAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1Mjgtc3dpdGNoXFxuIFxcbisgICAgICAtIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIEVjb05ldCBFTjc1MTIyMSBTb0NcXG4rICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcbitcXG4rICAgICAgLSBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgIE11bHRpLWNoaXAgbW9kdWxlIE1UNzUzMCBpbiBFTjc1MTIyMSBTb0NcXG4rICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxXFxuK1xcbiAgIHJlZzpcXG4gICAgIG1heEl0ZW1zOiAxXFxuIFxcbkBAIC0xNTMsOCArMTc0LDggQEAgcHJvcGVydGllczpcXG4gICBtZWRpYXRlayxtY206XFxuICAgICB0eXBlOiBib29sZWFuXFxuICAgICBkZXNjcmlwdGlvbjpcXG4tICAgICAgVXNlZCBmb3IgTVQ3NjIxQVQsIE1UNzYyMURBVCwgTVQ3NjIxU1QgYW5kIE1UNzYyM0FJIFNvQ3Mgd2hpY2ggdGhlIE1UNzUzMFxcbi0gICAgICBzd2l0Y2ggaXMgYSBwYXJ0IG9mIHRoZSBtdWx0aS1jaGlwIG1vZHVsZS5cXG4rICAgICAgVXNlZCBmb3IgTVQ3NjIxQVQsIE1UNzYyMURBVCwgTVQ3NjIxU1QsIE1UNzYyM0FJIGFuZCBFTjc1MTIyMSBTb0NzIHdoaWNoXFxuKyAgICAgIHRoZSBNVDc1MzAgc3dpdGNoIGlzIGEgcGFydCBvZiB0aGUgbXVsdGktY2hpcCBtb2R1bGUuXFxuIFxcbiAgIHJlc2V0LWdwaW9zOlxcbiAgICAgZGVzY3JpcHRpb246IHxcXG5AQCAtMjE2LDYgKzIzNywyMCBAQCAkZGVmczpcXG4gICAgICAgICAgICAgICAgIHBoeS1tb2RlOlxcbiAgICAgICAgICAgICAgICAgICBjb25zdDogaW50ZXJuYWxcXG4gXFxuKyAgbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0OlxcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydHMkXFxcIjpcXG4rICAgICAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydEBbMC02XSRcXFwiOlxcbisgICAgICAgICAgICBpZjpcXG4rICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF1cXG4rICAgICAgICAgICAgdGhlbjpcXG4rICAgICAgICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgICAgICAgcmVnOlxcbisgICAgICAgICAgICAgICAgICBjb25zdDogNlxcbisgICAgICAgICAgICAgICAgcGh5LW1vZGU6XFxuKyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWlcXG4rXFxuICAgbXQ3NTMwLWRzYS1wb3J0OlxcbiAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuICAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydHMkXFxcIjpcXG5AQCAtMzIzLDYgKzM1OCw3IEBAIGFsbE9mOlxcbiAgICAgICAgICAgICAtIGFpcm9oYSxlbjc1ODEtc3dpdGNoXFxuICAgICAgICAgICAgIC0gYWlyb2hhLGFuNzU4My1zd2l0Y2hcXG4gICAgICAgICAgICAgLSBlY29uZXQsZW43NTI4LXN3aXRjaFxcbisgICAgICAgICAgICAtIGVjb25ldCxlbjc1MTIyMS1zd2l0Y2hcXG4gICAgIHRoZW46XFxuICAgICAgICRyZWY6IFxcXCIjLyRkZWZzL2J1aWx0aW4tZHNhLXBvcnRcXFwiXFxuICAgICAgIHByb3BlcnRpZXM6XFxuQEAgLTMzMCw2ICszNjYsMTYgQEAgYWxsT2Y6XFxuICAgICAgICAgbWVkaWF0ZWssbWNtOiBmYWxzZVxcbiAgICAgICAgIHJlc2V0LW5hbWVzOiBmYWxzZVxcbiBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAtIGVjb25ldCxlbjc1MTIyMVxcbisgICAgdGhlbjpcXG4rICAgICAgJHJlZjogXFxcIiMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0XFxcIlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIG1lZGlhdGVrLG1jbVxcbitcXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbiBcXG4gZXhhbXBsZXM6XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcXG5pbmRleCAyNGVmNTRmM2RiMmE2Li4yZmQ5ODdmZjg1MTA3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcXG5AQCAtMTM5LDYgKzEzOSw3IEBAIG10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc1MzBfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTEyMjFcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFfRVhUXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc2MjFcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc1MzBcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMwXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc1MzFcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMxXSwgfSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xcbmluZGV4IGNmM2JkYjIzYTJkNTQuLjFhMjliMWVlZmIyYzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10Nzk4OF9vZl9tYXRjaFtdID0ge1xcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXFxuIFxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuNzU4MS1zd2l0Y2hcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTgxXSwgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTEyMjEtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTI4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3OTg4XSwgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuQEAgLTYxLDcgKzYyLDEyIEBAIG10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCk7XFxuIFxcbi1cXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChwcml2LVxcdTAwM2Vkcyk7XFxuK1xcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cXHUwMDNlZHMpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNcXG5pbmRleCAyOGY5NGNkMjViOTU1Li42ZmQ0NzE5YWFiODliIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xcbkBAIC00Niw2ICs0NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyBtdDc1MzBfbWliW10gPSB7XFxuIFxcdE1JQl9ERVNDKDEsIE1UNzUzMF9QT1JUX01JQl9SWF9BUkxfRFJPUCwgXFxcIlJ4QXJsRHJvcFxcXCIpLFxcbiB9O1xcbiBcXG4rc3RhdGljIGludFxcbittdDc1M3hfY3RybF9waHlfYWRkcihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX0VONzUxMjIxKVxcbitcXHRcXHRyZXR1cm4gMTI7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcml2LVxcdTAwM2VtZGlvZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBEZWZhdWx0IGlzIDFzdCBQSFkgKi9cXG4rXFx0cmV0dXJuIChwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyICsgMSkgXFx1MDAyNiAoUEhZX01BWF9BRERSIC0gMSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIG10NzUzMF9tdXRleF9sb2NrKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4ge1xcbkBAIC02MywzMiArNzYsMzYgQEAgbXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuIHN0YXRpYyB2b2lkXFxuIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbiB7XFxuK1xcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVxcdTAwM2VidXM7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRpZiAoIWJ1cylcXG4rXFx0XFx0YnVzID0gcHJpdi1cXHUwMDNlY2hpbGRfYnVzO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XFxuIFxcbiBcXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XFxuK1xcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9EQVRBLCByZWcpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCByZWcpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHQvKiBTZWxlY3QgdGhlIEZ1bmN0aW9uIDogREFUQSB3aXRoIG5vIHBvc3QgaW5jcmVtZW50ICovXFxuLVxcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKSxcXG4rXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIGN0bF9waHksXFxuIFxcdFxcdFxcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdC8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJ3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9EQVRBLCB2YWwpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCB2YWwpO1xcbiBlcnI6XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZidXMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcXFxcblxcXCIpO1xcbkBAIC05OSwzMyArMTE2LDM3IEBAIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbiBzdGF0aWMgdm9pZFxcbiBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KVxcbiB7XFxuK1xcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVxcdTAwM2VidXM7XFxuIFxcdHUzMiB2YWw7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRpZiAoIWJ1cylcXG4rXFx0XFx0YnVzID0gcHJpdi1cXHUwMDNlY2hpbGRfYnVzO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XFxuIFxcbiBcXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XFxuK1xcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9EQVRBLCByZWcpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCByZWcpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHQvKiBTZWxlY3QgdGhlIEZ1bmN0aW9uIDogREFUQSB3aXRoIG5vIHBvc3QgaW5jcmVtZW50ICovXFxuLVxcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKSxcXG4rXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIGN0bF9waHksXFxuIFxcdFxcdFxcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCdzIHNlbGVjdGVkIHJlZ2lzdGVyICovXFxuLVxcdHJldCA9IGJ1cy1cXHUwMDNlcmVhZChidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHRNSUlfTU1EX0RBVEEpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXJlYWQoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcdHZhbCA9IHJldDtcXG5AQCAtMTMzLDggKzE1NCw3IEBAIGNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuIFxcdHZhbCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0dmFsIHw9IHNldDtcXG4gXFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xcbi1cXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkciksXFxuLVxcdFxcdFxcdCBNSUlfTU1EX0RBVEEsIHZhbCk7XFxuK1xcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHZhbCk7XFxuIGVycjpcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIG1tZCByZWdpc3RlclxcXFxuXFxcIik7XFxuQEAgLTMyNywxMiArMzQ3LDE5IEBAIG10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIFxcdHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLCBcXHUwMDI2eHRhbCk7XFxuIFxcdHh0YWwgXFx1MDAyNj0gTVQ3NTMwX1hUQUxfTUFTSztcXG4gXFxuK1xcdC8qIEVONzUxMjIxIG9uLWRpZSBkb2VzIG5vdCByZXBvcnQgY2xvY2sgc3BlZWQgaW4gTVRSQVAgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX0VONzUxMjIxKVxcbitcXHRcXHR4dGFsID0gTVQ3NTMwX1hUQUxfMjVNSFo7XFxuK1xcbiBcXHRpZiAoeHRhbCA9PSBNVDc1MzBfWFRBTF8yNU1IWilcXG4gXFx0XFx0c3NjX2RlbHRhID0gMHg1NztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzc2NfZGVsdGEgPSAweDg3O1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX01UNzYyMSkge1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaWQgPT0gSURfRU43NTEyMjFfRVhUIHx8IHByaXYtXFx1MDAzZWlkID09IElEX0VONzUxMjIxKSB7XFxuK1xcdFxcdC8qIFBMTCBmcmVxdWVuY3k6IDM2Mi41TWh6ICovXFxuK1xcdFxcdG5jcG8xID0gMHgxZDAwO1xcbitcXHR9IGVsc2UgaWYgKHByaXYtXFx1MDAzZWlkID09IElEX01UNzYyMSkge1xcbiBcXHRcXHQvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi9cXG4gXFx0XFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXFxuIFxcdFxcdFxcdG5jcG8xID0gMHgwNjQwO1xcbkBAIC00NDksNiArNDc2LDI1MSBAQCBtdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0dXNsZWVwX3JhbmdlKDI1LCAzNSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sXFxuK2VuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxcbit7XFxuK1xcdHUzMiB2YWwgPSAwO1xcbitcXG4rXFx0cmVnbWFwX3JlYWQocngtXFx1MDAzZXJlZ21hcCwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0cmVnbWFwX3dyaXRlKHJ4LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsIHwgRURHRV9DSEspO1xcbitcXHRyZWdtYXBfd3JpdGUocngtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwgXFx1MDAyNiB+RURHRV9DSEspO1xcbitcXHRyZWdtYXBfcmVhZChyeC1cXHUwMDNlcmVnbWFwLCByZWcsIFxcdTAwMjZ2YWwpO1xcbitcXG4rXFx0cmV0dXJuIEZJRUxEX0dFVChSRF9WQUxVRV9NQVNLLCB2YWwpID09IFRHTUlJX1REX1BBVCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgIUZJRUxEX0dFVChSRF9FUlJfTUFTSywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsXFxuK1xcdFxcdFxcdFxcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxcbit7XFxuK1xcdGludCBjaGFubmVsO1xcbitcXG4rXFx0cmVnbWFwX3NldF9iaXRzKHR4LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUUkFJTl9UWEVOKTtcXG4rXFxuK1xcdC8qIFB1dCBmYWlsIHBhdHRlcm4gb24gZXZlcnkgY2hhbm5lbCAqL1xcbitcXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFxcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyh0eC1cXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgIFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBUR01JSV9URF9GQUlMX1BBVCkpO1xcbitcXG4rXFx0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKSB7XFxuK1xcdFxcdHUzMiByeF9yZWcgPSBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpO1xcbitcXHRcXHRpbnQgYmVzdF90YXAgPSAtMSwgYmVzdF9yYW5nZSA9IC0xO1xcbitcXHRcXHRpbnQgZmlyc3QgPSAtMTtcXG4rXFx0XFx0dTggZGFjO1xcbitcXHRcXHRjaGFyIGxvZ1tURF9UQVBfTUFYICsgMV07XFxuK1xcbitcXHRcXHQvKiBQdXQgdGVzdCBwYXR0ZXJuIG9uIGNvcnJlY3QgY2hhbm5lbCAqL1xcbitcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXFx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxcbitcXHRcXHRcXHRcXHQgICBUR01JSV9URF9QQVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSywgVEdNSUlfVERfUEFUKSk7XFxuK1xcbitcXHRcXHRmb3IgKGRhYyA9IDA7IGRhYyBcXHUwMDNjIFREX1RBUF9NQVg7IGRhYysrKSB7XFxuK1xcdFxcdFxcdC8qIFNldCBUQVAgKi9cXG4rXFx0XFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVxcdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFJEX1RBUChkYWMpKTtcXG4rXFxuK1xcdFxcdFxcdC8qIENoZWNrIGlmIHdlIGNhbiBnZXQgYSBnb29kIHJlYWQgKi9cXG4rXFx0XFx0XFx0aWYgKGVuNzUxMjIxX3RyZ21paV9jYWxfb2socngsIHJ4X3JlZywgY2hhbm5lbCwgZGFjKSkge1xcbitcXHRcXHRcXHRcXHRsb2dbZGFjXSA9ICcrJztcXG4rXFxuK1xcdFxcdFxcdFxcdGlmIChmaXJzdCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdFxcdGZpcnN0ID0gZGFjO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKChkYWMgLSBmaXJzdCkgXFx1MDAzZSBiZXN0X3JhbmdlKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGJlc3RfdGFwID0gKGZpcnN0ICsgZGFjKSAvIDI7XFxuK1xcdFxcdFxcdFxcdFxcdGJlc3RfcmFuZ2UgPSBkYWMgLSBmaXJzdDtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRsb2dbZGFjXSA9ICcuJztcXG4rXFx0XFx0XFx0XFx0Zmlyc3QgPSAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRsb2dbVERfVEFQX01BWF0gPSAnXFxcXDAnO1xcbitcXG4rXFx0XFx0aWYgKGJlc3RfdGFwIFxcdTAwM2UgLTEpIHtcXG4rXFx0XFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVxcdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFJEX1RBUChiZXN0X3RhcCkpO1xcbitcXG4rXFx0XFx0XFx0bG9nW2Jlc3RfdGFwXSA9ICdYJztcXG4rXFxuK1xcdFxcdFxcdGRldl9pbmZvKHJ4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiVFJHTUlJIGxhbmUgJWQ6ICVzIHRhcCAlZCBvbGQgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBjaGFubmVsLCBsb2csIGJlc3RfdGFwLCBkZWZhdWx0X3RhcHNbY2hhbm5lbF0pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMocngtXFx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgUkRfVEFQKGRlZmF1bHRfdGFwc1tjaGFubmVsXSkpO1xcbitcXG4rXFx0XFx0XFx0ZGV2X3dhcm4ocngtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCJUUkdNSUkgbGFuZSAlZDogJXMgY2FsaWJyYXRpb24gZmFpbGVkLCBwcmVzZXJ2aW5nIHRhcCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGNoYW5uZWwsIGxvZywgZGVmYXVsdF90YXBzW2NoYW5uZWxdKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogUmV0dXJuIGNoYW5uZWwgdG8gZmFpbHVyZSBwYXR0ZXJuICovXFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyh0eC1cXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgIFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBUR01JSV9URF9GQUlMX1BBVCkpO1xcbitcXHR9XFxuK1xcbitcXHRyZWdtYXBfY2xlYXJfYml0cyh0eC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK2VuNzUxMjIxX3NldF90eF9kcml2ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHU4IGRydnAsIHU4IGRydm4sIHU4IGNsa19kcnZwLFxcbitcXHRcXHQgICAgICB1OCBjbGtfZHJ2bilcXG4re1xcbitcXHRpbnQgY2hhbm5lbDtcXG4rXFxuK1xcdC8qIFR4IGRyaXZpbmcgZm9yIFRSR01JSSBwYXRoIG9uIFNvQyAqL1xcbitcXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFxcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXFxuK1xcdFxcdHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVERfT0RUKGNoYW5uZWwpLFxcbitcXHRcXHRcXHQgICAgIFREX0RNX0RSVlAoZHJ2cCkgfCBURF9ETV9EUlZOKGRydm4pKTtcXG4rXFxuK1xcdC8qIFVuZG9jdW1lbnRlZCA2dGggY2hhbm5lbCwgcHJvYmFibHkgZHJpdmUgc3RyZW5ndGggZm9yIGNsb2NrIGxpbmUuICovXFxuK1xcdHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVERfT0RUKDUpLCBURF9ETV9EUlZQKGRydnApIHxcXG4rXFx0XFx0ICAgICBURF9ETV9EUlZOKGRydm4pKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rZW43NTEyMjFfdHJnbWlpX3BhaXJfc2V0dXAoc3RydWN0IG10NzUzMF9wcml2ICpleHQsIGludCBleHRfcG9ydCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG10NzUzMF9wcml2ICpvbmRpZSwgaW50IG9uZGllX3BvcnQpXFxuK3tcXG4rXFx0dTggZGVmYXVsdF90YXBzX29uZGllW05VTV9UUkdNSUlfQ1RSTF07XFxuK1xcdHU4IGRlZmF1bHRfdGFwc19leHRbTlVNX1RSR01JSV9DVFJMXTtcXG4rXFx0dTMyIG1jcl9kb3duLCBtY3JfdXA7XFxuK1xcdGludCBjaGFubmVsO1xcbitcXHRpbnQgcmVnX3ZhbDtcXG4rXFxuK1xcdC8qIEJPVEg6IFB1dCBpbnRlcmZhY2VzIGluIGEgZG93bmVkIHN0YXRlICovXFxuK1xcdG1jcl9kb3duID0gUE1DUl9JRkdfWE1JVChQTUNSX0lGR19YTUlUXzY0KSB8IFBNQ1JfTUFDX01PREUgfFxcbitcXHRcXHQgICBNVDc1MzBfRk9SQ0VfTU9ERSB8IFBNQ1JfTUFDX1JYX0VOIHwgUE1DUl9CQUNLT0ZGX0VOIHxcXG4rXFx0XFx0ICAgUE1DUl9CQUNLUFJfRU4gfCBQTUNSX0ZPUkNFX1NQRUVEXzEwMDAgfCBQTUNSX0ZPUkNFX0ZEWDtcXG4rXFx0cmVnbWFwX3dyaXRlKG9uZGllLVxcdTAwM2VyZWdtYXAsICBNVDc1M1hfUE1DUl9QKG9uZGllX3BvcnQpLCBtY3JfZG93bik7XFxuK1xcdHJlZ21hcF93cml0ZShleHQtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChleHRfcG9ydCksIG1jcl9kb3duKTtcXG4rXFx0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xcbitcXG4rXFx0LyogQk9USDogUmVzZXQgVFggKi9cXG4rXFx0cmVnbWFwX3NldF9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTtcXG4rXFx0cmVnbWFwX3NldF9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xcbitcXHR1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7XFxuK1xcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTtcXG4rXFx0cmVnbWFwX2NsZWFyX2JpdHMob25kaWUtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XFxuK1xcbitcXHQvKiBCT1RIOiBSZXNldCBSWCBjb250cm9sbGVycyBkb3duICovXFxuK1xcdHJlZ21hcF9zZXRfYml0cyhleHQtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTtcXG4rXFx0cmVnbWFwX3NldF9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XFxuK1xcbitcXHQvKiBCT1RIOiBTZXQgVFggZHJpdmUgc3RyZW5ndGgsIE1DTSB1c2VzIG1vcmUgKi9cXG4rXFx0ZW43NTEyMjFfc2V0X3R4X2RyaXZlKG9uZGllLCA4LCA4LCA3LCA3KTtcXG4rXFx0ZW43NTEyMjFfc2V0X3R4X2RyaXZlKGV4dCwgMTEsIDExLCAxNiwgMTYpO1xcbitcXG4rXFx0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi9cXG4rXFx0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XFxuK1xcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XFxuK1xcbitcXHQvKiBCT1RIOiBQb3J0cyB1cCAqL1xcbitcXHRtY3JfdXAgPSBtY3JfZG93biB8IFBNQ1JfTUFDX1RYX0VOIHwgUE1DUl9GT1JDRV9MTks7XFxuK1xcdHJlZ21hcF93cml0ZShvbmRpZS1cXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKG9uZGllX3BvcnQpLCBtY3JfdXApO1xcbitcXHRyZWdtYXBfd3JpdGUoZXh0LVxcdTAwM2VyZWdtYXAsIE1UNzUzWF9QTUNSX1AoZXh0X3BvcnQpLCBtY3JfdXApO1xcbitcXG4rXFx0LyogTUNNOiBTZXQgRXh0LVxcdTAwM2VTb0MgVFggZGVsYXkgdG8gMCAqL1xcbitcXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFxcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXFxuK1xcdFxcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgVEdNSUlfVERfVEFQX01BU0spO1xcbitcXG4rXFx0LyogU09DOiBPRFQgKi9cXG4rXFx0cmVnbWFwX3NldF9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX1JUVCxcXG4rXFx0XFx0XFx0RFFTMV9HQVRFIHwgRFFTMF9HQVRFIHwgRU43NTEyMjFfQjE3KTtcXG4rXFxuK1xcdC8qIFNPQzogVW5kb2N1bWVudGVkICovXFxuK1xcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwrKylcXG4rXFx0XFx0cmVnbWFwX3dyaXRlKG9uZGllLVxcdTAwM2VyZWdtYXAsICAoMHg3YTE0ICsgY2hhbm5lbCAqIDgpLFxcbitcXHRcXHRcXHQgICAgIDB4MzIyNzcwMCk7XFxuK1xcbitcXHQvKiBNQ006IFNwcmVhZCBzcGVjdHJ1bSBjbG9jayovXFxuK1xcdGNvcmVfY2xlYXIoZXh0LCBDT1JFX1BMTF9HUk9VUDgsIFJHX0xDRERTX1NTQ19FTik7XFxuK1xcbitcXHQvKiBCT1RIOiBaZXJvIGNsb2NrIGRlbGF5ICovXFxuK1xcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLFxcbitcXHRcXHRcXHQgIERRU0kwX1RBUF9NQVNLKTtcXG4rXFx0cmVnbWFwX2NsZWFyX2JpdHMob25kaWUtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCxcXG4rXFx0XFx0XFx0ICBEUVNJMF9UQVBfTUFTSyk7XFxuK1xcbitcXHQvKiBCT1RIOiBDb2xsZWN0IGFuZCB0aGVuIHplcm8gZXZlcnkgUlggVEFQICovXFxuK1xcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwrKykge1xcbitcXHRcXHRyZWdfdmFsID0gMDtcXG4rXFx0XFx0cmVnbWFwX3JlYWQoZXh0LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksIFxcdTAwMjZyZWdfdmFsKTtcXG4rXFx0XFx0ZGVmYXVsdF90YXBzX2V4dFtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XFxuK1xcdFxcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLFxcbitcXHRcXHRcXHRcXHQgIFJEX1RBUF9NQVNLKTtcXG4rXFxuK1xcdFxcdHJlZ192YWwgPSAwO1xcbitcXHRcXHRyZWdtYXBfcmVhZChvbmRpZS1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLCBcXHUwMDI2cmVnX3ZhbCk7XFxuK1xcdFxcdGRlZmF1bHRfdGFwc19vbmRpZVtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XFxuK1xcdFxcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgUkRfVEFQX01BU0spO1xcbitcXHR9XFxuK1xcbitcXHRlbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihvbmRpZSwgZXh0LCBkZWZhdWx0X3RhcHNfZXh0KTtcXG4rXFx0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oZXh0LCBvbmRpZSwgZGVmYXVsdF90YXBzX2V4dCk7XFxuK1xcbitcXHRkZXZfaW5mbyhvbmRpZS1cXHUwMDNlZGV2LCBcXFwiVFJHTUlJIGludGVyLXN3aXRjaCBsaW5rIGluaXRpYWxpemVkXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rbXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpwZWVyX2RzO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKnBlZXJfZHA7XFxuK1xcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcGVlcjtcXG4rXFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbitcXHRzdHJ1Y3QgZHNhX2xpbmsgKmRsO1xcbitcXHR1MzIgcG1zciA9IDA7XFxuK1xcbitcXHRwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoZHAtXFx1MDAzZXR5cGUgIT0gRFNBX1BPUlRfVFlQRV9EU0EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BNU1JfUChkcC1cXHUwMDNlaW5kZXgpLCBcXHUwMDI2cG1zcik7XFxuK1xcbitcXHRpZiAoIShwbXNyIFxcdTAwMjYgUE1TUl9MSU5LKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkbCwgXFx1MDAyNmRzLVxcdTAwM2Vkc3QtXFx1MDAzZXJ0YWJsZSwgbGlzdCkge1xcbitcXHRcXHRpZiAoZGwtXFx1MDAzZWRwICE9IGRwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHBlZXJfZHAgPSBkbC1cXHUwMDNlbGlua19kcDtcXG4rXFxuK1xcdFxcdGlmIChwZWVyX2RwLVxcdTAwM2V0eXBlICE9IERTQV9QT1JUX1RZUEVfRFNBKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHBlZXJfZHMgPSBkbC1cXHUwMDNlbGlua19kcC1cXHUwMDNlZHM7XFxuK1xcbitcXHRcXHRpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBlZXJfZHMtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcXCIpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHBlZXIgPSBwZWVyX2RzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0XFx0aWYgKHBlZXItXFx1MDAzZWlkICE9IElEX0VONzUxMjIxKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHByaXYsIGRwLVxcdTAwM2VpbmRleCwgcGVlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcGVlcl9kcC1cXHUwMDNlaW5kZXgpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIG10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuQEAgLTEyODEsMTMgKzE1NTMsNDEgQEAgbXQ3NTN4X3RyYXBfZnJhbWVzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0XFx0XFx0XFx0ICAgVE9fQ1BVX0ZXX0NQVV9PTkxZKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbittdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KTtcXG4rXFxuKy8qIElmIHRoaXMgc3dpdGNoIGlzIGRvd25zdHJlYW0gb2YgYW5vdGhlciBzd2l0Y2ggdGhhdCBpcyBpbiBwYXNzdGhyb3VnaCBtb2RlLFxcbisgKiB0aGUgXFxcIkNQVVxcXCIgcG9ydCBpcyBhY3R1YWxseSBhIERTQSBwb3J0LlxcbisgKi9cXG4gc3RhdGljIHZvaWRcXG4gbXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0LyogRW5hYmxlIE1lZGlhdGVrIGhlYWRlciBtb2RlIG9uIHRoZSBjcHUgcG9ydCAqL1xcbi1cXHRyZWdtYXBfd3JpdGUocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksIFBPUlRfU1BFQ19UQUcpO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfcGFzc3Rocm91Z2gpIHtcXG4rXFx0XFx0LyogRGlzYWJsZSBwYXJzaW5nIG9mIHRoZSBEU0EgdGFnLCBpdCB3aWxsIGJlIGZvcndhcmRlZCBibGluZGx5XFxuK1xcdFxcdCAqIHRvIHRoZSBkb3duc3RyZWFtIHN3aXRjaC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSxcXG4rXFx0XFx0XFx0ICAgICBWTEFOX0FUVFIoTVQ3NTMwX1ZMQU5fVFJBTlNQQVJFTlQpIHxcXG4rXFx0XFx0XFx0ICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7XFxuK1xcbitcXHRcXHQvKiBUaGUgcG9ydCBpcyBub3QgY29uZmlndXJlZCB0byBwYXJzZSBEU0EgdGFncywgc28gdGhleSBhcmVcXG4rXFx0XFx0ICogbGlhYmxlIHRvIGJlIGNvbmZ1c2VkIGZvciBsZW5ndGggZmllbGRzLCBzbyBsZW5ndGggY2hlY2sgaXNcXG4rXFx0XFx0ICogZGlzYWJsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZWdtYXBfY2xlYXJfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzWF9BR0MsIEFHQ19MMkxFTl9DSEspO1xcbitcXG4rXFx0XFx0LyogSW4gcGFzc3Rocm91Z2ggbW9kZSwgTVRVIGlzIG9ubHkgZW5mb3JjZWQgZG93bnN0cmVhbSAqL1xcbitcXHRcXHRtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KGRzLCBwb3J0LCBNVDc1MzBfTUFYX01UVSk7XFxuK1xcbitcXHRcXHQvKiBMb29wIGRldGVjdGlvbiBoYXMgbm8gdmFsdWUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xcbitcXHRcXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1M1hfTVRSQVAsXFxuK1xcdFxcdFxcdFxcdE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogTm90IHBhc3N0aHJvdWdoLCBlbmFibGUgRFNBIHRhZyBoYW5kbGluZyBvbiBDUFUgcG9ydC4gKi9cXG4rXFx0XFx0cmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogRW5hYmxlIGZsb29kaW5nIG9uIHRoZSBDUFUgcG9ydCAqL1xcbiBcXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1M1hfTUZDLFxcbkBAIC0xMzE3LDYgKzE2MTcsNyBAQCBzdGF0aWMgaW50XFxuIG10NzUzMF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbiB7XFxuK1xcdGludCB1cHN0cmVhbV9wdCA9IGRzYV9zd2l0Y2hfdXBzdHJlYW1fcG9ydChkcyk7XFxuIFxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuIFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXG5AQCAtMTMyNywxNyArMTYyOCw0MyBAQCBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0ICogYnJpZGdlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKSB7XFxuLVxcdFxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZHAtXFx1MDAzZWNwdV9kcDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTtcXG4rXFxuK1xcdH0gZWxzZSBpZiAoZHNhX3BvcnRfaXNfZHNhKGRwKSBcXHUwMDI2XFx1MDAyNiBkcC1cXHUwMDNlaW5kZXggIT0gdXBzdHJlYW1fcHQpIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTtcXG4rXFxuK1xcdFxcdC8qIFNob3VsZCBub3QgaGFwcGVuICovXFxuK1xcdFxcdFdBUk5fT05fT05DRSghcHJpdi1cXHUwMDNlaXNfcGFzc3Rocm91Z2gpO1xcbitcXG4rXFx0XFx0LyogV2UgYXJlIHBhc3NpbmcgdGhyb3VnaCB0byBhIGRvd25zdHJlYW0gc3dpdGNoIHNvIHdlIHNldCBib3RoXFxuK1xcdFxcdCAqIENQVSBhbmQgZG93bnN0cmVhbSBsaW5rIHRvIHBhc3MgdHJhZmZpYyB1bnRvdWNoZWQgc28gdGhhdFxcbitcXHRcXHQgKiB0aGUgU1RBRyBmcm9tIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB3aWxsIHBhc3MgdG8gdGhlIHVwc3RyZWFtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLFxcbitcXHRcXHRcXHQgICAgIFZMQU5fQVRUUihNVDc1MzBfVkxBTl9UUkFOU1BBUkVOVCkgfFxcbitcXHRcXHRcXHQgICAgIFBWQ19FR19UQUcoTVQ3NTMwX1ZMQU5fRUdfRElTQUJMRUQpKTtcXG4rXFxuK1xcdFxcdC8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi9cXG4rXFx0XFx0cmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX01GQywgQkNfRkZQKEJJVChwb3J0KSkgfFxcbitcXHRcXHRcXHRcXHRVTk1fRkZQKEJJVChwb3J0KSkgfCBVTlVfRkZQKEJJVChwb3J0KSkpO1xcbiBcXG4tXFx0XFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQoY3B1X2RwLVxcdTAwM2VpbmRleCkpO1xcbitcXHRcXHQvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuXFxuK1xcdFxcdCAqIFRoaXMgbXVzdCBiZSBleHBsaWNpdCBiZWNhdXNlIFBPUlRfU1BFQ19UQUcgaXMgdW5zZXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZWdtYXBfd3JpdGUocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfUENSX1AodXBzdHJlYW1fcHQpLFxcbitcXHRcXHRcXHQgICAgIFBDUl9NQVRSSVgoQklUKHBvcnQpKSk7XFxuIFxcdH1cXG4gXFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0uZW5hYmxlID0gdHJ1ZTtcXG4tXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BDUl9QKHBvcnQpLCBQQ1JfTUFUUklYX01BU0ssXFxuLVxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZXBvcnRzW3BvcnRdLnBtKTtcXG4rXFxuK1xcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIENQVSBwb3J0IG1hc2sgaXMgc2V0IGFib3ZlLiAqL1xcbitcXHRpZiAoIShwcml2LVxcdTAwM2Vpc19wYXNzdGhyb3VnaCBcXHUwMDI2XFx1MDAyNiBkcC1cXHUwMDNlaW5kZXggPT0gdXBzdHJlYW1fcHQpKVxcbitcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfUENSX1AocG9ydCksXFxuK1xcdFxcdFxcdFxcdCAgIFBDUl9NQVRSSVhfTUFTSywgcHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0pO1xcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbXV0ZXgpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWlkICE9IElEX01UNzUzMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc2MjEpXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc1MzAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKHBvcnQgPT0gNSlcXG5AQCAtMTM2NCw3ICsxNjkxLDggQEAgbXQ3NTMwX3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbXV0ZXgpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWlkICE9IElEX01UNzUzMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc2MjEpXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc1MzAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIERvIG5vdCBzZXQgTVQ3NTMwX1A1X0RJUyB3aGVuIHBvcnQgNSBpcyBiZWluZyB1c2VkIGZvciBQSFkgbXV4aW5nLiAqL1xcbkBAIC0xMzg1LDcgKzE3MTMsNyBAQCBtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KVxcbiBcXHQgKiBsYXJnZXN0IE1UVSBvZiB0aGUgdXNlciBwb3J0cy4gQmVjYXVzZSB0aGUgc3dpdGNoIG9ubHkgaGFzIGEgZ2xvYmFsXFxuIFxcdCAqIFJYIGxlbmd0aCByZWdpc3Rlciwgb25seSBhbGxvd2luZyBDUFUgcG9ydCBoZXJlIGlzIGVub3VnaC5cXG4gXFx0ICovXFxuLVxcdGlmICghZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSlcXG4rXFx0aWYgKCFkc2FfaXNfdXBzdHJlYW1fcG9ydChkcywgcG9ydCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfR01BQ0NSLCBcXHUwMDI2dmFsKTtcXG5AQCAtMjMzMyw3ICsyNjYxLDcgQEAgbXQ3NTMwX2ZyZWVfbWRpb19pcnEoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnRcXG4raW50XFxuIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucCwgKm5wID0gcHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlO1xcbkBAIC0yMzQzLDYgKzI2NzEsMTAgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiBcXHRzdGF0aWMgaW50IGlkeDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHQvKiBBbHJlYWR5IGRvbmUgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZWNoaWxkX2J1cylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW9cXFwiKTtcXG4gXFxuIFxcdGlmIChtbnAgXFx1MDAyNlxcdTAwMjYgIW9mX2RldmljZV9pc19hdmFpbGFibGUobW5wKSlcXG5AQCAtMjM3MCw4ICsyNzAyLDExIEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0aWYgKHByaXYtXFx1MDAzZWlycV9kb21haW4gXFx1MDAyNlxcdTAwMjYgIW1ucClcXG4gXFx0XFx0bXQ3NTMwX3NldHVwX21kaW9faXJxKHByaXYpO1xcbiBcXG4rXFx0cHJpdi1cXHUwMDNlY2hpbGRfYnVzID0gYnVzO1xcbitcXG4gXFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xcbiBcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWNoaWxkX2J1cyA9IE5VTEw7XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIE1ESU8gYnVzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFx0XFx0aWYgKHByaXYtXFx1MDAzZWlycV9kb21haW4gXFx1MDAyNlxcdTAwMjYgIW1ucClcXG4gXFx0XFx0XFx0bXQ3NTMwX2ZyZWVfbWRpb19pcnEocHJpdik7XFxuQEAgLTIzODEsNiArMjcxNiw3IEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0b2Zfbm9kZV9wdXQobW5wKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtdDc1MzBfc2V0dXBfbWRpbyk7XFxuIFxcbiBzdGF0aWMgaW50XFxuIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuQEAgLTI0MDYsMTEgKzI3NDIsNiBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFkbikge1xcbi1cXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJwYXJlbnQgT0Ygbm9kZSBvZiBEU0EgY29uZHVpdCBub3QgZm91bmRcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4tXFxuIFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuIFxcdGRzLVxcdTAwM2V1bnRhZ192bGFuX2F3YXJlX2JyaWRnZV9wdmlkID0gdHJ1ZTtcXG4gXFx0ZHMtXFx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcXG5AQCAtMjQ4OSw2ICsyODIwLDEyIEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdFxcdFxcdCAgIE1UNzUzMF9DSEdfVFJBUCB8IE1UNzUzMF9QSFlfSU5ESVJFQ1RfQUNDRVNTLFxcbiBcXHRcXHRcXHQgICBNVDc1MzBfQ0hHX1RSQVApO1xcbiBcXG4rXFx0LyogRU43NTEyMjEgTUNNIHN0YXJ0cyBvbiB0aGUgd3JvbmcgZnJlcXVlbmN5ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpZCA9PSBJRF9FTjc1MTIyMV9FWFQpXFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzWF9NVFJBUCxcXG4rXFx0XFx0XFx0XFx0ICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX0NLX1NFTCxcXG4rXFx0XFx0XFx0XFx0ICAgTVQ3NTMwX0NIR19UUkFQKTtcXG4rXFxuIFxcdGlmICgodmFsIFxcdTAwMjYgTVQ3NTMwX1hUQUxfTUFTSykgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXFxuIFxcdFxcdG10NzUzMF9wbGxfc2V0dXAocHJpdik7XFxuIFxcbkBAIC0yNTEyLDcgKzI4NDksNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHQvKiBEaXNhYmxlIGxlYXJuaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovXFxuIFxcdFxcdHJlZ21hcF9zZXRfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9QU0NfUChpKSwgU0FfRElTKTtcXG4gXFxuLVxcdFxcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKSB7XFxuK1xcdFxcdGlmIChkc2FfaXNfdXBzdHJlYW1fcG9ydChkcywgaSkpIHtcXG4gXFx0XFx0XFx0bXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShkcywgaSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xcbkBAIC0yNTM2LDcgKzI4NzMsNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIFBIWSBtdXhpbmcgb24gcG9ydCA1ICovXFxuLVxcdGlmIChkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7XFxuK1xcdGlmIChkbiBcXHUwMDI2XFx1MDAyNiBkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7XFxuIFxcdFxcdC8qIFNjYW4gdGhlIGV0aGVybmV0IG5vZGVzLiBMb29rIGZvciBHTUFDMSwgbG9va3VwIHRoZSB1c2VkIFBIWS5cXG4gXFx0XFx0ICogU2V0IHByaXYtXFx1MDAzZXA1X21vZGUgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGlmIFBIWSBtdXhpbmcgaXNcXG4gXFx0XFx0ICogZGV0ZWN0ZWQuXFxuQEAgLTI2MzYsNyArMjk3Myw3IEBAIG10NzUzMV9zZXR1cF9jb21tb24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzFfREJHX0NOVChpKSxcXG4gXFx0XFx0XFx0XFx0TVQ3NTMxX0RJU19DTFIpO1xcbiBcXG4tXFx0XFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgaSkpIHtcXG4rXFx0XFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xcbiBcXHRcXHRcXHRtdDc1M3hfY3B1X3BvcnRfZW5hYmxlKGRzLCBpKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bXQ3NTMwX3BvcnRfZGlzYWJsZShkcywgaSk7XFxuQEAgLTI2NzQsOCArMzAxMSwxMSBAQCBtdDc1MzFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHR1MzIgdmFsLCBpZDtcXG4rXFx0aW50IGN0bF9waHk7XFxuIFxcdGludCByZXQsIGk7XFxuIFxcbitcXHRjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XFxuK1xcbiBcXHQvKiBSZXNldCB3aG9sZSBjaGlwIHRocm91Z2ggZ3BpbyBwaW4gb3IgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgZm9yXFxuIFxcdCAqIGRpZmZlcmVudCB0eXBlIG9mIGhhcmR3YXJlXFxuIFxcdCAqL1xcbkBAIC0yNzQzLDI1ICszMDgzLDIxIEBAIG10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdCAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duXFxuIFxcdCAqIG10NzUzMV9pbmRfbW1kX3BoeV9bcmVhZCx3cml0ZV0gdG8gY29tcGxldGUgdGhpcyBmdW5jdGlvbi5cXG4gXFx0ICovXFxuLVxcdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHRcXHQgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0KTtcXG4rXFx0cmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIENPUkVfUExMX0dST1VQNCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0dmFsID0gcmV0O1xcbiBcXHR2YWwgfD0gTVQ3NTMxX1JHX1NZU1BMTF9ETVkyIHwgTVQ3NTMxX1BIWV9QTExfQllQQVNTX01PREU7XFxuIFxcdHZhbCBcXHUwMDI2PSB+TVQ3NTMxX1BIWV9QTExfT0ZGO1xcbi1cXHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTURJT19NTURfVkVORDIsIENPUkVfUExMX0dST1VQNCwgdmFsKTtcXG4rXFx0cmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsIGN0bF9waHksIE1ESU9fTU1EX1ZFTkQyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgQ09SRV9QTExfR1JPVVA0LCB2YWwpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdC8qIERpc2FibGUgRUVFIGFkdmVydGlzZW1lbnQgb24gdGhlIHN3aXRjaCBQSFlzLiAqL1xcbi1cXHRmb3IgKGkgPSBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKTtcXG4tXFx0ICAgICBpIFxcdTAwM2MgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcikgKyBNVDc1MzBfTlVNX1BIWVM7XFxuLVxcdCAgICAgaSsrKSB7XFxuK1xcdGZvciAoaSA9IGN0bF9waHk7IGkgXFx1MDAzYyBjdGxfcGh5ICsgTVQ3NTMwX05VTV9QSFlTOyBpKyspIHtcXG4gXFx0XFx0bXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsIGksIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYsXFxuIFxcdFxcdFxcdFxcdFxcdCAwKTtcXG4gXFx0fVxcbkBAIC0yOTEwLDYgKzMyNDYsNDQgQEAgc3RhdGljIHZvaWQgZW43NTI4X21hY19wb3J0X2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdHN3aXRjaCAocG9ydCkge1xcbitcXHQvKiBFTjc1MTIyMSBwb3J0cyAwLi4zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVncmF0ZWQgRkUgUEhZcy4gKi9cXG4rXFx0Y2FzZSAwIC4uLiAzOlxcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxcbitcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0LyogUG9ydCA0IGlzIGNvbm5lY3RlZCB0byB0aGUgc3RhbmRhbG9uZSBFTjc1MTIvRU43NTIxIEdQSFkuICovXFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4rXFx0XFx0XFx0ICBjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHQvKiBQb3J0IDUgaXMgdGhlIDEgR2JpdC9zIFRSR01JSSBjYXNjYWRlIHRvIHRoZSBleHRlcm5hbCBNVDc1MzAuICovXFxuK1xcdGNhc2UgNTpcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUksXFxuK1xcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRcXHRjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHQvKiBQb3J0IDYgaXMgdGhlIDEgR2JpdC9zIENQVSBsaW5rIHRvIEdETTEuICovXFxuK1xcdGNhc2UgNjpcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4rXFx0XFx0XFx0ICBjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBtdDc1MzBfbWFjX2NvbmZpZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4gXFx0XFx0ICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbkBAIC0zMDU5LDYgKzM0MzMsOSBAQCBzdGF0aWMgdm9pZCBtdDc1M3hfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0fVxcbiBcXG4gXFx0cmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC1cXHUwMDNlaW5kZXgpLCBtY3IpO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJKVxcbitcXHRcXHRtdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShkcCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG10NzUzeF9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcXG5AQCAtMzI5OCwxMCArMzY3NSwxMSBAQCBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiBcXG4gXFx0LyogU2V0IHRoZSBDUFUgcG9ydCB0byB0cmFwIGZyYW1lcyB0byBmb3IgTVQ3NTMwLiBUcmFwcGVkIGZyYW1lcyB3aWxsIGJlXFxuIFxcdCAqIGZvcndhcmRlZCB0byB0aGUgbnVtZXJpY2FsbHkgc21hbGxlc3QgQ1BVIHBvcnQgd2hvc2UgY29uZHVpdFxcbi1cXHQgKiBpbnRlcmZhY2UgaXMgdXAuXFxuK1xcdCAqIGludGVyZmFjZSBpcyB1cC4gTk9URTogXFxcIkNQVSBwb3J0XFxcIiBjYW4gYWxzbyBtZWFuIGFuIHVwc3RyZWFtIERTQSBsaW5rLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHByaXYtXFx1MDAzZWlkICE9IElEX01UNzUzMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc2MjEgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHByaXYtXFx1MDAzZWlkICE9IElEX0VONzUyOClcXG4rXFx0ICAgIHByaXYtXFx1MDAzZWlkICE9IElEX0VONzUyOCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcHJpdi1cXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRtYXNrID0gQklUKGNwdV9kcC1cXHUwMDNlaW5kZXgpO1xcbkBAIC0zMzkzLDYgKzM3NzEsNzYgQEAgc3RhdGljIGludCBtdDc5ODhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRyZXR1cm4gbXQ3NTMxX3NldHVwX2NvbW1vbihkcyk7XFxuIH1cXG4gXFxuKy8qIDEgaWYgcGFzc3Rocm91Z2gsIG5lZ2F0aXZlIGlmIGVycm9yLiAqL1xcbitzdGF0aWMgaW50IG10NzUzeF9jaGVja19wYXNzdGhyb3VnaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cywgKnBvcnQ7XFxuK1xcdGludCBwYXNzdGhyb3VnaF9wb3J0cyA9IDA7XFxuK1xcdGludCBlbmFibGVkX3BvcnRzID0gMDtcXG4rXFxuK1xcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicG9ydHNcXFwiKTtcXG4rXFx0aWYgKCFwb3J0cylcXG4rXFx0XFx0cG9ydHMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJldGhlcm5ldC1wb3J0c1xcXCIpO1xcbitcXG4rXFx0aWYgKCFwb3J0cykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIm5vIHBvcnRzIGNoaWxkIG5vZGUgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUocG9ydHMsIHBvcnQpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsaW5rO1xcbitcXG4rXFx0XFx0ZW5hYmxlZF9wb3J0cysrO1xcbitcXG4rXFx0XFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXFxcImV0aGVybmV0XFxcIiwgMCk7XFxuK1xcdFxcdGlmICghbGluaylcXG4rXFx0XFx0XFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXFxcImxpbmtcXFwiLCAwKTtcXG4rXFxuK1xcdFxcdGlmICghbGluaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsaW5rKTtcXG4rXFxuK1xcdFxcdHBhc3N0aHJvdWdoX3BvcnRzKys7XFxuK1xcdH1cXG4rXFxuK1xcdG9mX25vZGVfcHV0KHBvcnRzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgc3dpdGNoIGlzIGNvbnNpZGVyZWQgcGFzc3Rocm91Z2ggaWYgZXhhY3RseSB0d28gYXZhaWxhYmxlXFxuK1xcdCAqIHBvcnRzIGhhdmUgYW4gXFxcImV0aGVybmV0XFxcIiBvciBcXFwibGlua1xcXCIgcGhhbmRsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChwYXNzdGhyb3VnaF9wb3J0cyBcXHUwMDNlIDIgfHxcXG4rXFx0ICAgIChwYXNzdGhyb3VnaF9wb3J0cyA9PSAyIFxcdTAwMjZcXHUwMDI2IGVuYWJsZWRfcG9ydHMgIT0gMilcXG4rXFx0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiT25seSB0d28gcG9ydHMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYXNzdGhyb3VnaF9wb3J0cyA9PSAyO1xcbit9XFxuK1xcbisvKiBObyBtYW5pcHVsYXRpb24gb2YgZm9yd2FyZGluZyBydWxlcyBhbGxvd2VkIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHtcXG4rXFx0LmdldF90YWdfcHJvdG9jb2xcXHQ9IG10a19nZXRfdGFnX3Byb3RvY29sLFxcbitcXHQuc2V0dXBcXHRcXHRcXHQ9IG10NzUzeF9zZXR1cCxcXG4rXFx0LnRlYXJkb3duXFx0XFx0PSBtdDc1M3hfdGVhcmRvd24sXFxuK1xcdC5wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCA9IG10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCxcXG4rXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBtdDc1MzBfZ2V0X3N0cmluZ3MsXFxuK1xcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLFxcbitcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IG10NzUzMF9nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9ldGhfbWFjX3N0YXRzXFx0PSBtdDc1MzBfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfcm1vbl9zdGF0c1xcdFxcdD0gbXQ3NTMwX2dldF9ybW9uX3N0YXRzLFxcbitcXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXFx0PSBtdDc1MzBfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbitcXHQuZ2V0X3N0YXRzNjRcXHRcXHQ9IG10NzUzMF9nZXRfc3RhdHM2NCxcXG4rXFx0LnBvcnRfZW5hYmxlXFx0XFx0PSBtdDc1MzBfcG9ydF9lbmFibGUsXFxuK1xcdC5wb3J0X2Rpc2FibGVcXHRcXHQ9IG10NzUzMF9wb3J0X2Rpc2FibGUsXFxuK1xcdC5waHlsaW5rX2dldF9jYXBzXFx0PSBtdDc1M3hfcGh5bGlua19nZXRfY2FwcyxcXG4rXFx0LnN1cHBvcnRfZWVlXFx0XFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxcbitcXHQuc2V0X21hY19lZWVcXHRcXHQ9IG10NzUzeF9zZXRfbWFjX2VlZSxcXG4rXFx0LmNvbmR1aXRfc3RhdGVfY2hhbmdlXFx0PSBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2UsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzUzMF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXRrX2dldF90YWdfcHJvdG9jb2wsXFxuIFxcdC5zZXR1cFxcdFxcdFxcdD0gbXQ3NTN4X3NldHVwLFxcbkBAIC0zNTE5LDE0ICszOTY3LDQwIEBAIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXSA9IHtcXG4gXFx0XFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsXFxuIFxcdFxcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcyxcXG4gXFx0fSxcXG4rXFx0W0lEX0VONzUxMjIxXSA9IHtcXG4rXFx0XFx0LmlkID0gSURfRU43NTEyMjEsXFxuK1xcdFxcdC5wY3Nfb3BzID0gXFx1MDAyNm10NzUzMF9wY3Nfb3BzLFxcbitcXHRcXHQuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsXFxuK1xcdFxcdC5waHlfcmVhZF9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfcmVhZCxcXG4rXFx0XFx0LnBoeV93cml0ZV9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfd3JpdGUsXFxuK1xcdFxcdC5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCxcXG4rXFx0XFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsXFxuK1xcdFxcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUxMjIxX21hY19wb3J0X2dldF9jYXBzLFxcbitcXHRcXHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXFxuK1xcdH0sXFxuK1xcdFtJRF9FTjc1MTIyMV9FWFRdID0ge1xcbitcXHRcXHQuaWQgPSBJRF9FTjc1MTIyMV9FWFQsXFxuK1xcdFxcdC5wY3Nfb3BzID0gXFx1MDAyNm10NzUzMF9wY3Nfb3BzLFxcbitcXHRcXHQuc3dfc2V0dXAgPSBtdDc1MzBfc2V0dXAsXFxuK1xcdFxcdC5waHlfcmVhZF9jMjIgPSBtdDc1MzBfcGh5X3JlYWRfYzIyLFxcbitcXHRcXHQucGh5X3dyaXRlX2MyMiA9IG10NzUzMF9waHlfd3JpdGVfYzIyLFxcbitcXHRcXHQucGh5X3JlYWRfYzQ1ID0gbXQ3NTMwX3BoeV9yZWFkX2M0NSxcXG4rXFx0XFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzBfcGh5X3dyaXRlX2M0NSxcXG4rXFx0XFx0Lm1hY19wb3J0X2dldF9jYXBzID0gbXQ3NTMwX21hY19wb3J0X2dldF9jYXBzLFxcbitcXHRcXHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXFxuK1xcdH0sXFxuIH07XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7XFxuIFxcbiBpbnRcXG4gbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuIHtcXG4rXFx0aW50IHBhc3N0aHJvdWdoID0gbXQ3NTN4X2NoZWNrX3Bhc3N0aHJvdWdoKHByaXYtXFx1MDAzZWRldik7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gXFxuK1xcdGlmIChwYXNzdGhyb3VnaCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBwYXNzdGhyb3VnaDtcXG4rXFxuIFxcdHByaXYtXFx1MDAzZWRzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2LVxcdTAwM2VkcyksIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZWRzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMzU0NCw3ICs0MDE4LDE0IEBAIG10NzUzMF9wcm9iZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiBcXHRwcml2LVxcdTAwM2VpZCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWlkO1xcbiBcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4tXFx0cHJpdi1cXHUwMDNlZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZtdDc1MzBfc3dpdGNoX29wcztcXG4rXFxuK1xcdGlmIChwYXNzdGhyb3VnaCkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vkcy1cXHUwMDNlb3BzID0gXFx1MDAyNm10NzUzMF9wYXNzdGhyb3VnaF9zd2l0Y2hfb3BzO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19wYXNzdGhyb3VnaCA9IHRydWU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2bXQ3NTMwX3N3aXRjaF9vcHM7XFxuK1xcdH1cXG4rXFxuIFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2bXQ3NTN4X3BoeWxpbmtfbWFjX29wcztcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX211dGV4KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRzX2xvY2spO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmggYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcXG5pbmRleCAyYmJiZTYxN2I1MmVlLi4xYTQzMjk3NDljMGYxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaFxcbkBAIC0yNCw2ICsyNCw4IEBAIGVudW0gbXQ3NTN4X2lkIHtcXG4gXFx0SURfRU43NTgxID0gNCxcXG4gXFx0SURfQU43NTgzID0gNSxcXG4gXFx0SURfRU43NTI4ID0gNixcXG4rXFx0SURfRU43NTEyMjEgPSA3LFxcbitcXHRJRF9FTjc1MTIyMV9FWFQgPSA4LFxcbiB9O1xcbiBcXG4gI2RlZmluZVxcdE5VTV9UUkdNSUlfQ1RSTFxcdFxcdFxcdDVcXG5AQCAtNDAsNiArNDIsNyBAQCBlbnVtIG10NzUzeF9pZCB7XFxuIC8qIFJlZ2lzdGVyIGZvciBBUkwgZ2xvYmFsIGNvbnRyb2wgKi9cXG4gI2RlZmluZSBNVDc1M1hfQUdDXFx0XFx0XFx0MHhjXFxuICNkZWZpbmUgIExPQ0FMX0VOXFx0XFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgIEFHQ19MMkxFTl9DSEtcXHRcXHRcXHRCSVQoNClcXG4gXFxuIC8qIFJlZ2lzdGVyIGZvciBNQUMgZm9yd2FyZCBjb250cm9sICovXFxuICNkZWZpbmUgTVQ3NTNYX01GQ1xcdFxcdFxcdDB4MTBcXG5AQCAtMzU1LDYgKzM1OCw5IEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hY2NfZnJtIHtcXG4gI2RlZmluZSBNVDc1M1hfUE1DUl9QKHgpXFx0XFx0KDB4MzAwMCArICgoeCkgKiAweDEwMCkpXFxuICNkZWZpbmUgIFBNQ1JfSUZHX1hNSVRfTUFTS1xcdFxcdEdFTk1BU0soMTksIDE4KVxcbiAjZGVmaW5lICBQTUNSX0lGR19YTUlUKHgpXFx0XFx0RklFTERfUFJFUChQTUNSX0lGR19YTUlUX01BU0ssIHgpXFxuKyNkZWZpbmUgICAgUE1DUl9JRkdfWE1JVF85NlxcdFxcdDBcXG4rI2RlZmluZSAgICBQTUNSX0lGR19YTUlUX1JBTkRcXHRcXHQxXFxuKyNkZWZpbmUgICAgUE1DUl9JRkdfWE1JVF82NFxcdFxcdDJcXG4gI2RlZmluZSAgUE1DUl9FWFRfUEhZXFx0XFx0XFx0QklUKDE3KVxcbiAjZGVmaW5lICBQTUNSX01BQ19NT0RFXFx0XFx0XFx0QklUKDE2KVxcbiAjZGVmaW5lICBNVDc1MzBfRk9SQ0VfTU9ERVxcdFxcdEJJVCgxNSlcXG5AQCAtNTgzLDYgKzU4OSw4IEBAIGVudW0gbXQ3NTMxX2Nsa19za2V3IHtcXG4gI2RlZmluZSBNVDc1M1hfTVRSQVBcXHRcXHRcXHQweDc4MDRcXG4gI2RlZmluZSAgTVQ3NTMwX1A1X1BIWTBfU0VMXFx0XFx0QklUKDIwKVxcbiAjZGVmaW5lICBNVDc1MzBfQ0hHX1RSQVBcXHRcXHRCSVQoMTYpXFxuKyNkZWZpbmUgIE1UNzUzMF9DS19TRUxcXHRcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgIE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFXFx0QklUKDE0KVxcbiAjZGVmaW5lICBNVDc1MzBfUDVfTUFDX1NFTFxcdFxcdEJJVCgxMylcXG4gI2RlZmluZSAgTVQ3NTMwX1A2X0RJU1xcdFxcdFxcdEJJVCg4KVxcbiAjZGVmaW5lICBNVDc1MzBfUDVfUkdNSUlfTU9ERVxcdFxcdEJJVCg3KVxcbkBAIC01OTksNiArNjA3LDggQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcXG4gLyogUmVnaXN0ZXIgZm9yIFRPUCBzaWduYWwgY29udHJvbCAqL1xcbiAjZGVmaW5lIE1UNzUzMF9UT1BfU0lHX0NUUkxcXHRcXHQweDc4MDhcXG4gI2RlZmluZSAgVE9QX1NJR19DVFJMX05PUk1BTFxcdFxcdChCSVQoMTcpIHwgQklUKDE2KSlcXG4rLyogVW5kb2N1bWVudGVkICovXFxuKyNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9CMFxcdFxcdEJJVCgwKVxcbiBcXG4gI2RlZmluZSBNVDc1MzFfVE9QX1NJR19TUlxcdFxcdDB4NzgwY1xcbiAjZGVmaW5lICBQQURfRFVBTF9TR01JSV9FTlxcdFxcdEJJVCgxKVxcbkBAIC02NDUsMTggKzY1NSwzMSBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkNLX1JUVFxcdFxcdDB4N2EwNFxcbiAjZGVmaW5lICBEUVMxX0dBVEVcXHRcXHRcXHRCSVQoMzEpXFxuICNkZWZpbmUgIERRUzBfR0FURVxcdFxcdFxcdEJJVCgzMClcXG4rLyogVW5kb2N1bWVudGVkICovXFxuKyNkZWZpbmUgIEVONzUxMjIxX0IxN1xcdFxcdFxcdEJJVCgxNylcXG4gXFxuICNkZWZpbmUgTVQ3NTMwX1RSR01JSV9SRCh4KVxcdFxcdCgweDdhMTAgKyAoeCkgKiA4KVxcbiAjZGVmaW5lICBCU0xJUF9FTlxcdFxcdFxcdEJJVCgzMSlcXG4gI2RlZmluZSAgRURHRV9DSEtcXHRcXHRcXHRCSVQoMzApXFxuKyNkZWZpbmUgIFJEX1ZBTFVFX01BU0tcXHRcXHRcXHRHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSAgUkRfRVJSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCA4KVxcbiAjZGVmaW5lICBSRF9UQVBfTUFTS1xcdFxcdFxcdEdFTk1BU0soNiwgMClcXG4gI2RlZmluZSAgUkRfVEFQKHgpXFx0XFx0XFx0RklFTERfUFJFUChSRF9UQVBfTUFTSywgeClcXG4rLyogVHJhaW5pbmcgZG9lcyBub3QgdHJ5IGFueXRoaW5nIGJleW9uZCB0aGlzICovXFxuKyNkZWZpbmUgIFREX1RBUF9NQVhcXHRcXHRcXHQ2NFxcbiBcXG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1RYQ1RSTFxcdFxcdDB4N2E0MFxcbiAjZGVmaW5lICBUUkFJTl9UWEVOXFx0XFx0XFx0QklUKDMxKVxcbiAjZGVmaW5lICBUWENfSU5WXFx0XFx0XFx0QklUKDMwKVxcbiAjZGVmaW5lICBUWF9SU1RcXHRcXHRcXHRcXHRCSVQoMjgpXFxuIFxcbisjZGVmaW5lIEVONzUzMF9UUkdNSUlfVERfQ1RSTCh4KVxcdCgweDdhNTAgKyAoeCkgKiA4KVxcbisjZGVmaW5lICAgVEdNSUlfVERfVEFQX01BU0tcXHRcXHRHRU5NQVNLKDExLCA4KVxcbisjZGVmaW5lICAgVEdNSUlfVERfUEFUX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuKy8qIFVzZSBhIDAxMDEwMTAxIGJpdCBwYXR0ZXJuICovXFxuKyNkZWZpbmUgICBUR01JSV9URF9QQVRcXHRcXHRcXHQweDU1XFxuKyNkZWZpbmUgICBUR01JSV9URF9GQUlMX1BBVFxcdFxcdDB4YWFcXG4rXFxuICNkZWZpbmUgTVQ3NTMwX1RSR01JSV9URF9PRFQoaSlcXHRcXHQoMHg3YTU0ICsgOCAqIChpKSlcXG4gI2RlZmluZSAgVERfRE1fRFJWUF9NQVNLXFx0XFx0R0VOTUFTSygzLCAwKVxcbiAjZGVmaW5lICBURF9ETV9EUlZQKHgpXFx0XFx0XFx0RklFTERfUFJFUChURF9ETV9EUlZQX01BU0ssIHgpXFxuQEAgLTc0Nyw4ICs3NzAsNiBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xcbiAjZGVmaW5lICBNVDc1MzFfUEhZX1BMTF9PRkZcXHRcXHRCSVQoNSlcXG4gI2RlZmluZSAgTVQ3NTMxX1BIWV9QTExfQllQQVNTX01PREVcXHRCSVQoNClcXG4gXFxuLSNkZWZpbmUgTVQ3NTNYX0NUUkxfUEhZX0FERFIoYWRkcilcXHQoKChhZGRyKSArIDEpIFxcdTAwMjYgKFBIWV9NQVhfQUREUiAtIDEpKVxcbi1cXG4gI2RlZmluZSBDT1JFX1BMTF9HUk9VUDVcXHRcXHRcXHQweDQwNFxcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzFfTUFTS1xcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPMSh4KVxcdFxcdEZJRUxEX1BSRVAoUkdfTENERFNfUENXX05DUE8xX01BU0ssIHgpXFxuQEAgLTc2NCw2ICs3ODUsOSBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xcbiAjZGVmaW5lICBSR19MQ0NEU19DKHgpXFx0XFx0XFx0RklFTERfUFJFUChSR19MQ0NEU19DX01BU0ssIHgpXFxuICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPX0NIR1xcdFxcdEJJVCgzKVxcbiBcXG4rI2RlZmluZSBDT1JFX1BMTF9HUk9VUDhcXHRcXHRcXHQweDQwN1xcbisjZGVmaW5lICBSR19MQ0REU19TU0NfRU5cXHRcXHRCSVQoMTApXFxuK1xcbiAjZGVmaW5lIENPUkVfUExMX0dST1VQMTBcXHRcXHQweDQwOVxcbiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEFfTUFTS1xcdEdFTk1BU0soMTEsIDApXFxuICNkZWZpbmUgIFJHX0xDRERTX1NTQ19ERUxUQSh4KVxcdFxcdEZJRUxEX1BSRVAoUkdfTENERFNfU1NDX0RFTFRBX01BU0ssIHgpXFxuQEAgLTg4Niw2ICs5MTAsOSBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8ge1xcbiAgKiBAZGV2OlxcdFxcdFRoZSBkZXZpY2UgcG9pbnRlclxcbiAgKiBAZHM6XFx0XFx0XFx0VGhlIHBvaW50ZXIgdG8gdGhlIGRzYSBjb3JlIHN0cnVjdHVyZVxcbiAgKiBAYnVzOlxcdFxcdFRoZSBidXMgdXNlZCBmb3IgdGhlIGRldmljZSBhbmQgYnVpbHQtaW4gUEhZXFxuKyAqIEBjaGlsZF9idXM6XFx0XFx0VGhlIGJ1cyBjcmVhdGVkIGJ5IHRoZSBkZXZpY2UsIG9uIE1ESU8gaW1wbGVtZW50YXRpb25zXFxuKyAqXFx0XFx0XFx0dGhpcyBpcyBidXMgaW5kaXJlY3RseSBhY2Nlc3NlcyBgYnVzYCwgb24gTU1JT1xcbisgKlxcdFxcdFxcdGltcGxlbWVudGF0aW9ucyB0aGlzIGJ1cyBpcyBwYXJ0IG9mIHRoZSBzd2l0Y2guXFxuICAqIEByZWdtYXA6XFx0XFx0VGhlIHJlZ21hcCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYWxsIHN3aXRjaCByZWdpc3RlcnNcXG4gICogQHJzdGM6XFx0XFx0VGhlIHBvaW50ZXIgdG8gcmVzZXQgY29udHJvbCB1c2VkIGJ5IE1DTVxcbiAgKiBAY29yZV9wd3I6XFx0XFx0VGhlIHBvd2VyIHN1cHBsaWVkIGludG8gdGhlIGNvcmVcXG5AQCAtODk5LDYgKzkyNiw5IEBAIHN0cnVjdCBtdDc1M3hfaW5mbyB7XFxuICAqIEBwNV9tb2RlOlxcdFxcdEhvbGRpbmcgdGhlIGN1cnJlbnQgbW9kZSBvZiBwb3J0IDUgb2YgdGhlIE1UNzUzMCBzd2l0Y2hcXG4gICogQHA1X3NnbWlpOlxcdFxcdEZsYWcgZm9yIGRpc3Rpbmd1aXNoaW5nIGlmIHBvcnQgNSBvZiB0aGUgTVQ3NTMxIHN3aXRjaFxcbiAgKlxcdFxcdFxcdGhhcyBnb3QgU0dNSUlcXG4rICogQGlzX3Bhc3N0aHJvdWdoOlxcdElmIHRoaXMgc3dpdGNoIGlzIHRvIHBhc3MgdHJhZmZpYyBiZXR3ZWVuIHRoZSB1cHN0cmVhbVxcbisgKlxcdFxcdFxcdChDUFUpIHBvcnQgYW5kIGEgc2Vjb25kIGRvd25zdHJlYW0gc3dpdGNoLCB3aXRob3V0XFxuKyAqXFx0XFx0XFx0YWx0ZXJpbmcgdGhlIERTQSB0YWcuXFxuICAqIEBpcnFfZG9tYWluOlxcdFxcdElSUSBkb21haW4gb2YgdGhlIHN3aXRjaCBpcnFfY2hpcFxcbiAgKiBAY3JlYXRlX3NnbWlpOlxcdFBvaW50ZXIgdG8gZnVuY3Rpb24gY3JlYXRpbmcgU0dNSUkgUENTIGluc3RhbmNlKHMpXFxuICAqIEBhY3RpdmVfY3B1X3BvcnRzOlxcdEhvbGRpbmcgdGhlIGFjdGl2ZSBDUFUgcG9ydHNcXG5AQCAtOTExLDYgKzk0MSw3IEBAIHN0cnVjdCBtdDc1MzBfcHJpdiB7XFxuIFxcdHN0cnVjdCBkZXZpY2VcXHRcXHQqZGV2O1xcbiBcXHRzdHJ1Y3QgZHNhX3N3aXRjaFxcdCpkcztcXG4gXFx0c3RydWN0IG1paV9idXNcXHRcXHQqYnVzO1xcbitcXHRzdHJ1Y3QgbWlpX2J1c1xcdFxcdCpjaGlsZF9idXM7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHQqcmVnbWFwO1xcbiBcXHRzdHJ1Y3QgcmVzZXRfY29udHJvbFxcdCpyc3RjO1xcbiBcXHRzdHJ1Y3QgcmVndWxhdG9yXFx0KmNvcmVfcHdyO1xcbkBAIC05MjMsNiArOTU0LDcgQEAgc3RydWN0IG10NzUzMF9wcml2IHtcXG4gXFx0Ym9vbFxcdFxcdFxcdHA1X3NnbWlpO1xcbiBcXHR1OFxcdFxcdFxcdG1pcnJvcl9yeDtcXG4gXFx0dThcXHRcXHRcXHRtaXJyb3JfdHg7XFxuK1xcdGJvb2xcXHRcXHRcXHRpc19wYXNzdGhyb3VnaDtcXG4gXFx0c3RydWN0IG10NzUzMF9wb3J0XFx0cG9ydHNbTVQ3NTMwX05VTV9QT1JUU107XFxuIFxcdHN0cnVjdCBtdDc1M3hfcGNzXFx0cGNzW01UNzUzMF9OVU1fUE9SVFNdO1xcbiBcXHQvKiBwcm90ZWN0IGFtb25nIHByb2Nlc3NlcyBmb3IgcmVnaXN0ZXJzIGFjY2VzcyovXFxuQEAgLTk2MSw2ICs5OTMsMTYgQEAgc3RydWN0IG10NzUzMF9od19zdGF0cyB7XFxuIGludCBtdDc1MzBfcHJvYmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdik7XFxuIHZvaWQgbXQ3NTMwX3JlbW92ZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KTtcXG4gXFxuKy8qXFxuKyAqIFdoZW4gYW4gTU1JTyBiYXNlZCBzd2l0Y2ggaGFzIGFuIE1ESU8gYnVzIHdoaWNoIGNvbnRhaW5zIGEgZG93bnN0cmVhbSBNRElPXFxuKyAqIHN3aXRjaCwgdGhlIE1ESU8gYnVzIGlzIG5vdCBub3JtYWxseSBzZXR1cCB1bnRpbCBtdDc1M3hfc2V0dXAoKSBoYXMgYmVlblxcbisgKiBjYWxsZWQuIEJ1dCBtdDc1M3hfc2V0dXAoKSBpcyBub3QgY2FsbGVkIHVudGlsIERTQSBzZWVzIHRoYXQgZXZlcnkgc3dpdGNoIGluXFxuKyAqIHRoZSB0cmVlIGhhcyBiZWVuIHByb2JlZC4gQ2FsbGluZyBtdDc1MzBfc2V0dXBfbWRpbygpIGFmdGVyIGF0IHRoZSBlbmQgb2ZcXG4rICogdGhlIE1NSU8gcHJvYmUgZnVuY3Rpb24gYWxsb3dzIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB0byByZWdpc3RlciwgY29tcGxldGluZ1xcbisgKiB0aGUgdHJlZS5cXG4rICovXFxuK2ludCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpO1xcbitcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXTtcXG4gXFxuICNlbmRpZiAvKiBfX01UNzUzMF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjQ2LjE2MTUyMzg0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQzNzQ2ODUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIERldmljZSBUcmVlIGJpbmRpbmdzIGRvY3VtZW50YXRpb24gYW5kIGFkZHMgc3VwcG9ydCBmb3IgRWNvTmV0IEVONzUxMjIxIFNvQ3MgYW5kIHBhc3N0aHJvdWdoIG1vZGUgdG8gdGhlIE1lZGlhVGVrIE1UNzUzMCBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzUzMCopLiBUaGlzIGRyaXZlciBjb250cm9scyBzcGVjaWZpYyBwaHlzaWNhbCBNZWRpYVRlay9FY29OZXQgU29DIGV0aGVybmV0IHN3aXRjaGVzIGFuZCBNRElPL01NSU8gZGV2aWNlcyB0aGF0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOGE3MjZlOTY2YWRkOWMzMDNmMzhjY2ZiMTkxNjc1ZTgxNDAyNmU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNjowNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxcbmluZGV4IDkwYjM1ODJiNzYxOTAuLjEwNmM0MDg3NTI4ZDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxcbkBAIC0yOSw2ICsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfFxuICAgYW5kIHRoZSBzd2l0Y2ggcmVnaXN0ZXJzIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byBTb0MncyBtZW1vcnkgbWFwIHJhdGhlciB0aGFuXG4gICB1c2luZyBNRElPLiBUaGUgRFNBIGRyaXZlciBjdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IE1UNzYyMCB2YXJpYW50cy5cbiBcbisgIEVjb05ldCBFTjc1MTIyMSBTb0NzIGhhdmUgYSBtZW1vcnkgbWFwcGVkIE1UNzUzMCB3aXRoIDN4IDEwLzEwMCBQSFlzIGFuZCAxeFxuKyAgZ2lnYWJpdCBQSFkuIFNvbWUgRU43NTEyMjEgY2hpcHMgc3VjaCBhcyBFTjc1MTNHIGFuZCBFTjc1MjZHIGhhdmUgYSBtdWx0aS1jaGlwXG4rICBtb2R1bGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1UNzUzMCBhcyB3ZWxsIGFzIHRoZSBvbi1kaWUgc3dpdGNoLiBJbiB0aGVzZVxuKyAgcGFja2FnZXMsIHRoZSBtdWx0aS1jaGlwIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gcG9ydCA1IG9mIHRoZSBvbi1kaWUgc3dpdGNoXG4rICB2aWEgYSBUUkdNSUkgbGluay5cbitcbiAgIFRoZXJlIGlzIG9ubHkgdGhlIHN0YW5kYWxvbmUgdmVyc2lvbiBvZiBNVDc1MzEuXG4gXG4gICBQb3J0IDUgb24gTVQ3NTMwIHN1cHBvcnRzIHZhcmlvdXMgY29uZmlndXJhdGlvbnM6XG5AQCAtNzMsNiArNzksMTMgQEAgZGVzY3JpcHRpb246IHxcbiBcbiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LlxuIFxuKyAgVGhlIE1UNzUzMCBhbmQgTVQ3NTMxIHN3aXRjaGVzIGFyZSBjYXBhYmxlIG9mIGJlaW5nIG9wZXJhdGVkIGluIFwicGFzc3Rocm91Z2hcIlxuKyAgbW9kZS4gSW4gdGhpcyBtb2RlLCB0cmFmZmljIGlzIHVuY29uZGl0aW9uYWxseSBwYXNzZWQgYmV0d2VlbiB0aGUgQ1BVIHBvcnRcbisgIGFuZCB0aGUgRFNBIHBvcnQgd2hpY2ggbGlua3MgdG8gYSBzZWNvbmQgc3dpdGNoLiBUbyB1c2UgcGFzc3Rocm91Z2ggbW9kZSwgdGhlXG4rICB1cHN0cmVhbSBzd2l0Y2ggaXMgY29uZmlndXJlZCB3aXRoIGEgRFNBIGxpbmsgdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLiBJblxuKyAgcGFzc3Rocm91Z2ggbW9kZSB0aGUgdXBzdHJlYW0gc3dpdGNoIGlzIHJlc3RyaWN0ZWQsIHdpdGggbm8gb3RoZXIgcG9ydHMgb3JcbisgIHN3aXRjaCBjb25maWd1cmF0aW9uIGFsbG93ZWQuXG4rXG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuQEAgLTEwNCw2ICsxMTcsMTQgQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIHRoZSBFY29OZXQgRU43NTI4IFNvQ1xuICAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1Mjgtc3dpdGNoXG4gXG4rICAgICAgLSBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIEVjb05ldCBFTjc1MTIyMSBTb0NcbisgICAgICAgIGNvbnN0OiBlY29uZXQsZW43NTEyMjEtc3dpdGNoXG4rXG4rICAgICAgLSBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgTXVsdGktY2hpcCBtb2R1bGUgTVQ3NTMwIGluIEVONzUxMjIxIFNvQ1xuKyAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1MTIyMVxuK1xuICAgcmVnOlxuICAgICBtYXhJdGVtczogMVxuIFxuQEAgLTE1Myw4ICsxNzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgbWVkaWF0ZWssbWNtOlxuICAgICB0eXBlOiBib29sZWFuXG4gICAgIGRlc2NyaXB0aW9uOlxuLSAgICAgIFVzZWQgZm9yIE1UNzYyMUFULCBNVDc2MjFEQVQsIE1UNzYyMVNUIGFuZCBNVDc2MjNBSSBTb0NzIHdoaWNoIHRoZSBNVDc1MzBcbi0gICAgICBzd2l0Y2ggaXMgYSBwYXJ0IG9mIHRoZSBtdWx0aS1jaGlwIG1vZHVsZS5cbisgICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCwgTVQ3NjIzQUkgYW5kIEVONzUxMjIxIFNvQ3Mgd2hpY2hcbisgICAgICB0aGUgTVQ3NTMwIHN3aXRjaCBpcyBhIHBhcnQgb2YgdGhlIG11bHRpLWNoaXAgbW9kdWxlLlxuIFxuICAgcmVzZXQtZ3Bpb3M6XG4gICAgIGRlc2NyaXB0aW9uOiB8XG5AQCAtMjE2LDYgKzIzNywyMCBAQCAkZGVmczpcbiAgICAgICAgICAgICAgICAgcGh5LW1vZGU6XG4gICAgICAgICAgICAgICAgICAgY29uc3Q6IGludGVybmFsXG4gXG4rICBtdDc1MzAtcGFzc3Rocm91Z2gtZHNhLXBvcnQ6XG4rICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgIFwiXihldGhlcm5ldC0pP3BvcnRzJFwiOlxuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAgIFwiXihldGhlcm5ldC0pP3BvcnRAWzAtNl0kXCI6XG4rICAgICAgICAgICAgaWY6XG4rICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF1cbisgICAgICAgICAgICB0aGVuOlxuKyAgICAgICAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgICAgICAgcmVnOlxuKyAgICAgICAgICAgICAgICAgIGNvbnN0OiA2XG4rICAgICAgICAgICAgICAgIHBoeS1tb2RlOlxuKyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWlcbitcbiAgIG10NzUzMC1kc2EtcG9ydDpcbiAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4gICAgICAgXCJeKGV0aGVybmV0LSk/cG9ydHMkXCI6XG5AQCAtMzIzLDYgKzM1OCw3IEBAIGFsbE9mOlxuICAgICAgICAgICAgIC0gYWlyb2hhLGVuNzU4MS1zd2l0Y2hcbiAgICAgICAgICAgICAtIGFpcm9oYSxhbjc1ODMtc3dpdGNoXG4gICAgICAgICAgICAgLSBlY29uZXQsZW43NTI4LXN3aXRjaFxuKyAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxuICAgICB0aGVuOlxuICAgICAgICRyZWY6IFwiIy8kZGVmcy9idWlsdGluLWRzYS1wb3J0XCJcbiAgICAgICBwcm9wZXJ0aWVzOlxuQEAgLTMzMCw2ICszNjYsMTYgQEAgYWxsT2Y6XG4gICAgICAgICBtZWRpYXRlayxtY206IGZhbHNlXG4gICAgICAgICByZXNldC1uYW1lczogZmFsc2VcbiBcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgLSBlY29uZXQsZW43NTEyMjFcbisgICAgdGhlbjpcbisgICAgICAkcmVmOiBcIiMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0XCJcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gbWVkaWF0ZWssbWNtXG4rXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuIGV4YW1wbGVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcbmluZGV4IDI0ZWY1NGYzZGIyYTYuLjJmZDk4N2ZmODUxMDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcbkBAIC0xMzksNiArMTM5LDcgQEAgbXQ3NTMxX2NyZWF0ZV9zZ21paShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwiZWNvbmV0LGVuNzUxMjIxXCIsIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJtZWRpYXRlayxtdDc2MjFcIiwgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcIm1lZGlhdGVrLG10NzUzMFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwibWVkaWF0ZWssbXQ3NTMxXCIsIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuaW5kZXggY2YzYmRiMjNhMmQ1NC4uMWEyOWIxZWVmYjJjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcbiBcdHsgLmNvbXBhdGlibGUgPSBcImFpcm9oYSxhbjc1ODMtc3dpdGNoXCIsIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJhaXJvaGEsZW43NTgxLXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJlY29uZXQsZW43NTI4LXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG5AQCAtNjEsNyArNjIsMTIgQEAgbXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuIFxuLVx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4rXHRyZXQgPSBkc2FfcmVnaXN0ZXJfc3dpdGNoKHByaXYtXHUwMDNlZHMpO1xuK1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xuaW5kZXggMjhmOTRjZDI1Yjk1NS4uNmZkNDcxOWFhYjg5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jXG5AQCAtNDYsNiArNDYsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgbXQ3NTMwX21pYltdID0ge1xuIFx0TUlCX0RFU0MoMSwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FSTF9EUk9QLCBcIlJ4QXJsRHJvcFwiKSxcbiB9O1xuIFxuK3N0YXRpYyBpbnRcbittdDc1M3hfY3RybF9waHlfYWRkcihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4re1xuK1x0aWYgKHByaXYtXHUwMDNlaWQgPT0gSURfRU43NTEyMjEpXG4rXHRcdHJldHVybiAxMjtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIXByaXYtXHUwMDNlbWRpb2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogRGVmYXVsdCBpcyAxc3QgUEhZICovXG4rXHRyZXR1cm4gKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyICsgMSkgXHUwMDI2IChQSFlfTUFYX0FERFIgLSAxKTtcbit9XG4rXG4gc3RhdGljIHZvaWRcbiBtdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuQEAgLTYzLDMyICs3NiwzNiBAQCBtdDc1MzBfbXV0ZXhfdW5sb2NrKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBzdGF0aWMgdm9pZFxuIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuIHtcbitcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKCFidXMpXG4rXHRcdGJ1cyA9IHByaXYtXHUwMDNlY2hpbGRfYnVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG4gXG4gXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4rXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCByZWcpO1xuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCByZWcpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnI7XG4gXG4gXHQvKiBTZWxlY3QgdGhlIEZ1bmN0aW9uIDogREFUQSB3aXRoIG5vIHBvc3QgaW5jcmVtZW50ICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4rXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LFxuIFx0XHRcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJ3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCB2YWwpO1xuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCB2YWwpO1xuIGVycjpcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGRldl9lcnIoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gd3JpdGUgbW1kIHJlZ2lzdGVyXFxuXCIpO1xuQEAgLTk5LDMzICsxMTYsMzcgQEAgY29yZV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4gc3RhdGljIHZvaWRcbiBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbitcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4gXHR1MzIgdmFsO1xuIFx0aW50IHJldDtcbiBcbitcdGlmICghYnVzKVxuK1x0XHRidXMgPSBwcml2LVx1MDAzZWNoaWxkX2J1cztcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIWJ1cykpXG4rXHRcdHJldHVybjtcbitcbiBcdG10NzUzMF9tdXRleF9sb2NrKHByaXYpO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIERldmFkICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0IE1JSV9NTURfQ1RSTCwgTURJT19NTURfVkVORDIpO1xuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkZXNpcmVkIE1NRCByZWdpc3RlciBhZGRyZXNzICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0IE1JSV9NTURfREFUQSwgcmVnKTtcbitcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgcmVnKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSxcbiBcdFx0XHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMiB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnI7XG4gXG4gXHQvKiBSZWFkIHRoZSBjb250ZW50IG9mIHRoZSBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXJlYWQoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0TUlJX01NRF9EQVRBKTtcbitcdHJldCA9IGJ1cy1cdTAwM2VyZWFkKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFx0dmFsID0gcmV0O1xuQEAgLTEzMyw4ICsxNTQsNyBAQCBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIFx0dmFsIFx1MDAyNj0gfm1hc2s7XG4gXHR2YWwgfD0gc2V0O1xuIFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCBNSUlfTU1EX0RBVEEsIHZhbCk7XG4rXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHZhbCk7XG4gZXJyOlxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0ZGV2X2VycihcdTAwMjZidXMtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcXG5cIik7XG5AQCAtMzI3LDEyICszNDcsMTkgQEAgbXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiBcdHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1M1hfTVRSQVAsIFx1MDAyNnh0YWwpO1xuIFx0eHRhbCBcdTAwMjY9IE1UNzUzMF9YVEFMX01BU0s7XG4gXG4rXHQvKiBFTjc1MTIyMSBvbi1kaWUgZG9lcyBub3QgcmVwb3J0IGNsb2NrIHNwZWVkIGluIE1UUkFQICovXG4rXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMSlcbitcdFx0eHRhbCA9IE1UNzUzMF9YVEFMXzI1TUhaO1xuK1xuIFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfMjVNSFopXG4gXHRcdHNzY19kZWx0YSA9IDB4NTc7XG4gXHRlbHNlXG4gXHRcdHNzY19kZWx0YSA9IDB4ODc7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9NVDc2MjEpIHtcbitcdGlmIChwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxX0VYVCB8fCBwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxKSB7XG4rXHRcdC8qIFBMTCBmcmVxdWVuY3k6IDM2Mi41TWh6ICovXG4rXHRcdG5jcG8xID0gMHgxZDAwO1xuK1x0fSBlbHNlIGlmIChwcml2LVx1MDAzZWlkID09IElEX01UNzYyMSkge1xuIFx0XHQvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi9cbiBcdFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXG4gXHRcdFx0bmNwbzEgPSAweDA2NDA7XG5AQCAtNDQ5LDYgKzQ3NiwyNTEgQEAgbXQ3NTMxX3BsbF9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gXHR1c2xlZXBfcmFuZ2UoMjUsIDM1KTtcbiB9XG4gXG4rc3RhdGljIGJvb2xcbitlbjc1MTIyMV90cmdtaWlfY2FsX29rKHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsIHUzMiByZWcsIGludCBjaGFuLCBpbnQgaSlcbit7XG4rXHR1MzIgdmFsID0gMDtcbitcbitcdHJlZ21hcF9yZWFkKHJ4LVx1MDAzZXJlZ21hcCwgcmVnLCBcdTAwMjZ2YWwpO1xuK1x0cmVnbWFwX3dyaXRlKHJ4LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwgfCBFREdFX0NISyk7XG4rXHRyZWdtYXBfd3JpdGUocngtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCBcdTAwMjYgfkVER0VfQ0hLKTtcbitcdHJlZ21hcF9yZWFkKHJ4LVx1MDAzZXJlZ21hcCwgcmVnLCBcdTAwMjZ2YWwpO1xuK1xuK1x0cmV0dXJuIEZJRUxEX0dFVChSRF9WQUxVRV9NQVNLLCB2YWwpID09IFRHTUlJX1REX1BBVCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhRklFTERfR0VUKFJEX0VSUl9NQVNLLCB2YWwpO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2VuNzUxMjIxX3RyZ21paV9jYWxpYnJhdGVfZGlyZWN0aW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqdHgsXG4rXHRcdFx0XHQgICAgc3RydWN0IG10NzUzMF9wcml2ICpyeCxcbitcdFx0XHRcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxuK3tcbitcdGludCBjaGFubmVsO1xuK1xuK1x0cmVnbWFwX3NldF9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRSQUlOX1RYRU4pO1xuK1xuK1x0LyogUHV0IGZhaWwgcGF0dGVybiBvbiBldmVyeSBjaGFubmVsICovXG4rXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwrKylcbitcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxuK1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4rXHRcdFx0XHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBUR01JSV9URF9GQUlMX1BBVCkpO1xuK1xuK1x0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspIHtcbitcdFx0dTMyIHJ4X3JlZyA9IE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCk7XG4rXHRcdGludCBiZXN0X3RhcCA9IC0xLCBiZXN0X3JhbmdlID0gLTE7XG4rXHRcdGludCBmaXJzdCA9IC0xO1xuK1x0XHR1OCBkYWM7XG4rXHRcdGNoYXIgbG9nW1REX1RBUF9NQVggKyAxXTtcbitcbitcdFx0LyogUHV0IHRlc3QgcGF0dGVybiBvbiBjb3JyZWN0IGNoYW5uZWwgKi9cbitcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxuK1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4rXHRcdFx0XHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLCBUR01JSV9URF9QQVQpKTtcbitcbitcdFx0Zm9yIChkYWMgPSAwOyBkYWMgXHUwMDNjIFREX1RBUF9NQVg7IGRhYysrKSB7XG4rXHRcdFx0LyogU2V0IFRBUCAqL1xuK1x0XHRcdHJlZ21hcF91cGRhdGVfYml0cyhyeC1cdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXG4rXHRcdFx0XHRcdCAgIFJEX1RBUChkYWMpKTtcbitcbitcdFx0XHQvKiBDaGVjayBpZiB3ZSBjYW4gZ2V0IGEgZ29vZCByZWFkICovXG4rXHRcdFx0aWYgKGVuNzUxMjIxX3RyZ21paV9jYWxfb2socngsIHJ4X3JlZywgY2hhbm5lbCwgZGFjKSkge1xuK1x0XHRcdFx0bG9nW2RhY10gPSAnKyc7XG4rXG4rXHRcdFx0XHRpZiAoZmlyc3QgXHUwMDNjIDApXG4rXHRcdFx0XHRcdGZpcnN0ID0gZGFjO1xuK1xuK1x0XHRcdFx0aWYgKChkYWMgLSBmaXJzdCkgXHUwMDNlIGJlc3RfcmFuZ2UpIHtcbitcdFx0XHRcdFx0YmVzdF90YXAgPSAoZmlyc3QgKyBkYWMpIC8gMjtcbitcdFx0XHRcdFx0YmVzdF9yYW5nZSA9IGRhYyAtIGZpcnN0O1xuK1x0XHRcdFx0fVxuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRsb2dbZGFjXSA9ICcuJztcbitcdFx0XHRcdGZpcnN0ID0gLTE7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdGxvZ1tURF9UQVBfTUFYXSA9ICdcXDAnO1xuK1xuK1x0XHRpZiAoYmVzdF90YXAgXHUwMDNlIC0xKSB7XG4rXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbitcdFx0XHRcdFx0ICAgUkRfVEFQKGJlc3RfdGFwKSk7XG4rXG4rXHRcdFx0bG9nW2Jlc3RfdGFwXSA9ICdYJztcbitcbitcdFx0XHRkZXZfaW5mbyhyeC1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJUUkdNSUkgbGFuZSAlZDogJXMgdGFwICVkIG9sZCAlZFxcblwiLFxuK1x0XHRcdFx0IGNoYW5uZWwsIGxvZywgYmVzdF90YXAsIGRlZmF1bHRfdGFwc1tjaGFubmVsXSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbitcdFx0XHRcdFx0ICAgUkRfVEFQKGRlZmF1bHRfdGFwc1tjaGFubmVsXSkpO1xuK1xuK1x0XHRcdGRldl93YXJuKHJ4LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIlRSR01JSSBsYW5lICVkOiAlcyBjYWxpYnJhdGlvbiBmYWlsZWQsIHByZXNlcnZpbmcgdGFwICV1XFxuXCIsXG4rXHRcdFx0XHQgY2hhbm5lbCwgbG9nLCBkZWZhdWx0X3RhcHNbY2hhbm5lbF0pO1xuK1x0XHR9XG4rXG4rXHRcdC8qIFJldHVybiBjaGFubmVsIHRvIGZhaWx1cmUgcGF0dGVybiAqL1xuK1x0XHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4rXHRcdFx0XHQgICBUR01JSV9URF9QQVRfTUFTSyxcbitcdFx0XHRcdCAgIEZJRUxEX1BSRVAoVEdNSUlfVERfUEFUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIFRHTUlJX1REX0ZBSUxfUEFUKSk7XG4rXHR9XG4rXG4rXHRyZWdtYXBfY2xlYXJfYml0cyh0eC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUUkFJTl9UWEVOKTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbitlbjc1MTIyMV9zZXRfdHhfZHJpdmUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1OCBkcnZwLCB1OCBkcnZuLCB1OCBjbGtfZHJ2cCxcbitcdFx0ICAgICAgdTggY2xrX2Rydm4pXG4re1xuK1x0aW50IGNoYW5uZWw7XG4rXG4rXHQvKiBUeCBkcml2aW5nIGZvciBUUkdNSUkgcGF0aCBvbiBTb0MgKi9cbitcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKVxuK1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVERfT0RUKGNoYW5uZWwpLFxuK1x0XHRcdCAgICAgVERfRE1fRFJWUChkcnZwKSB8IFREX0RNX0RSVk4oZHJ2bikpO1xuK1xuK1x0LyogVW5kb2N1bWVudGVkIDZ0aCBjaGFubmVsLCBwcm9iYWJseSBkcml2ZSBzdHJlbmd0aCBmb3IgY2xvY2sgbGluZS4gKi9cbitcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9URF9PRFQoNSksIFREX0RNX0RSVlAoZHJ2cCkgfFxuK1x0XHQgICAgIFREX0RNX0RSVk4oZHJ2bikpO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2VuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXG4rXHRcdFx0ICAgc3RydWN0IG10NzUzMF9wcml2ICpvbmRpZSwgaW50IG9uZGllX3BvcnQpXG4re1xuK1x0dTggZGVmYXVsdF90YXBzX29uZGllW05VTV9UUkdNSUlfQ1RSTF07XG4rXHR1OCBkZWZhdWx0X3RhcHNfZXh0W05VTV9UUkdNSUlfQ1RSTF07XG4rXHR1MzIgbWNyX2Rvd24sIG1jcl91cDtcbitcdGludCBjaGFubmVsO1xuK1x0aW50IHJlZ192YWw7XG4rXG4rXHQvKiBCT1RIOiBQdXQgaW50ZXJmYWNlcyBpbiBhIGRvd25lZCBzdGF0ZSAqL1xuK1x0bWNyX2Rvd24gPSBQTUNSX0lGR19YTUlUKFBNQ1JfSUZHX1hNSVRfNjQpIHwgUE1DUl9NQUNfTU9ERSB8XG4rXHRcdCAgIE1UNzUzMF9GT1JDRV9NT0RFIHwgUE1DUl9NQUNfUlhfRU4gfCBQTUNSX0JBQ0tPRkZfRU4gfFxuK1x0XHQgICBQTUNSX0JBQ0tQUl9FTiB8IFBNQ1JfRk9SQ0VfU1BFRURfMTAwMCB8IFBNQ1JfRk9SQ0VfRkRYO1xuK1x0cmVnbWFwX3dyaXRlKG9uZGllLVx1MDAzZXJlZ21hcCwgIE1UNzUzWF9QTUNSX1Aob25kaWVfcG9ydCksIG1jcl9kb3duKTtcbitcdHJlZ21hcF93cml0ZShleHQtXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKGV4dF9wb3J0KSwgbWNyX2Rvd24pO1xuK1x0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xuK1xuK1x0LyogQk9USDogUmVzZXQgVFggKi9cbitcdHJlZ21hcF9zZXRfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTtcbitcdHJlZ21hcF9zZXRfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xuK1x0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xuK1x0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4rXHRyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xuK1xuK1x0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgZG93biAqL1xuK1x0cmVnbWFwX3NldF9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XG4rXHRyZWdtYXBfc2V0X2JpdHMob25kaWUtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpO1xuK1xuK1x0LyogQk9USDogU2V0IFRYIGRyaXZlIHN0cmVuZ3RoLCBNQ00gdXNlcyBtb3JlICovXG4rXHRlbjc1MTIyMV9zZXRfdHhfZHJpdmUob25kaWUsIDgsIDgsIDcsIDcpO1xuK1x0ZW43NTEyMjFfc2V0X3R4X2RyaXZlKGV4dCwgMTEsIDExLCAxNiwgMTYpO1xuK1xuK1x0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi9cbitcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XG4rXHRyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XG4rXG4rXHQvKiBCT1RIOiBQb3J0cyB1cCAqL1xuK1x0bWNyX3VwID0gbWNyX2Rvd24gfCBQTUNSX01BQ19UWF9FTiB8IFBNQ1JfRk9SQ0VfTE5LO1xuK1x0cmVnbWFwX3dyaXRlKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX3VwKTtcbitcdHJlZ21hcF93cml0ZShleHQtXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKGV4dF9wb3J0KSwgbWNyX3VwKTtcbitcbitcdC8qIE1DTTogU2V0IEV4dC1cdTAwM2VTb0MgVFggZGVsYXkgdG8gMCAqL1xuK1x0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXG4rXHRcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIEVONzUzMF9UUkdNSUlfVERfQ1RSTChjaGFubmVsKSxcbitcdFx0XHRcdCAgVEdNSUlfVERfVEFQX01BU0spO1xuK1xuK1x0LyogU09DOiBPRFQgKi9cbitcdHJlZ21hcF9zZXRfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX1JUVCxcbitcdFx0XHREUVMxX0dBVEUgfCBEUVMwX0dBVEUgfCBFTjc1MTIyMV9CMTcpO1xuK1xuK1x0LyogU09DOiBVbmRvY3VtZW50ZWQgKi9cbitcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKVxuK1x0XHRyZWdtYXBfd3JpdGUob25kaWUtXHUwMDNlcmVnbWFwLCAgKDB4N2ExNCArIGNoYW5uZWwgKiA4KSxcbitcdFx0XHQgICAgIDB4MzIyNzcwMCk7XG4rXG4rXHQvKiBNQ006IFNwcmVhZCBzcGVjdHJ1bSBjbG9jayovXG4rXHRjb3JlX2NsZWFyKGV4dCwgQ09SRV9QTExfR1JPVVA4LCBSR19MQ0REU19TU0NfRU4pO1xuK1xuK1x0LyogQk9USDogWmVybyBjbG9jayBkZWxheSAqL1xuK1x0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCxcbitcdFx0XHQgIERRU0kwX1RBUF9NQVNLKTtcbitcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCxcbitcdFx0XHQgIERRU0kwX1RBUF9NQVNLKTtcbitcbitcdC8qIEJPVEg6IENvbGxlY3QgYW5kIHRoZW4gemVybyBldmVyeSBSWCBUQVAgKi9cbitcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKSB7XG4rXHRcdHJlZ192YWwgPSAwO1xuK1x0XHRyZWdtYXBfcmVhZChleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLCBcdTAwMjZyZWdfdmFsKTtcbitcdFx0ZGVmYXVsdF90YXBzX2V4dFtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XG4rXHRcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksXG4rXHRcdFx0XHQgIFJEX1RBUF9NQVNLKTtcbitcbitcdFx0cmVnX3ZhbCA9IDA7XG4rXHRcdHJlZ21hcF9yZWFkKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSwgXHUwMDI2cmVnX3ZhbCk7XG4rXHRcdGRlZmF1bHRfdGFwc19vbmRpZVtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XG4rXHRcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSxcbitcdFx0XHRcdCAgUkRfVEFQX01BU0spO1xuK1x0fVxuK1xuK1x0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24ob25kaWUsIGV4dCwgZGVmYXVsdF90YXBzX2V4dCk7XG4rXHRlbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihleHQsIG9uZGllLCBkZWZhdWx0X3RhcHNfZXh0KTtcbitcbitcdGRldl9pbmZvKG9uZGllLVx1MDAzZWRldiwgXCJUUkdNSUkgaW50ZXItc3dpdGNoIGxpbmsgaW5pdGlhbGl6ZWRcXG5cIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rbXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpwZWVyX2RzO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpwZWVyX2RwO1xuK1x0c3RydWN0IG10NzUzMF9wcml2ICpwZWVyO1xuK1x0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuK1x0c3RydWN0IGRzYV9saW5rICpkbDtcbitcdHUzMiBwbXNyID0gMDtcbitcbitcdHByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoZHAtXHUwMDNldHlwZSAhPSBEU0FfUE9SVF9UWVBFX0RTQSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmVnbWFwX3JlYWQocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QTVNSX1AoZHAtXHUwMDNlaW5kZXgpLCBcdTAwMjZwbXNyKTtcbitcbitcdGlmICghKHBtc3IgXHUwMDI2IFBNU1JfTElOSykpXG4rXHRcdHJldHVybjtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGwsIFx1MDAyNmRzLVx1MDAzZWRzdC1cdTAwM2VydGFibGUsIGxpc3QpIHtcbitcdFx0aWYgKGRsLVx1MDAzZWRwICE9IGRwKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRwZWVyX2RwID0gZGwtXHUwMDNlbGlua19kcDtcbitcbitcdFx0aWYgKHBlZXJfZHAtXHUwMDNldHlwZSAhPSBEU0FfUE9SVF9UWVBFX0RTQSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cGVlcl9kcyA9IGRsLVx1MDAzZWxpbmtfZHAtXHUwMDNlZHM7XG4rXG4rXHRcdGlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGVlcl9kcy1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSxcbitcdFx0XHRcdFx0ICAgICBcImVjb25ldCxlbjc1MTIyMS1zd2l0Y2hcIikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHBlZXIgPSBwZWVyX2RzLVx1MDAzZXByaXY7XG4rXG4rXHRcdGlmIChwZWVyLVx1MDAzZWlkICE9IElEX0VONzUxMjIxKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChwcml2LCBkcC1cdTAwM2VpbmRleCwgcGVlcixcbitcdFx0XHRcdFx0ICAgcGVlcl9kcC1cdTAwM2VpbmRleCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gbXQ3NTMwX21pYl9yZXNldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuQEAgLTEyODEsMTMgKzE1NTMsNDEgQEAgbXQ3NTN4X3RyYXBfZnJhbWVzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdFx0XHRcdCAgIFRPX0NQVV9GV19DUFVfT05MWSk7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbittdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KTtcbitcbisvKiBJZiB0aGlzIHN3aXRjaCBpcyBkb3duc3RyZWFtIG9mIGFub3RoZXIgc3dpdGNoIHRoYXQgaXMgaW4gcGFzc3Rocm91Z2ggbW9kZSxcbisgKiB0aGUgXCJDUFVcIiBwb3J0IGlzIGFjdHVhbGx5IGEgRFNBIHBvcnQuXG4rICovXG4gc3RhdGljIHZvaWRcbiBtdDc1M3hfY3B1X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4ge1xuIFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcbi1cdC8qIEVuYWJsZSBNZWRpYXRlayBoZWFkZXIgbW9kZSBvbiB0aGUgY3B1IHBvcnQgKi9cbi1cdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcbitcdGlmIChwcml2LVx1MDAzZWlzX3Bhc3N0aHJvdWdoKSB7XG4rXHRcdC8qIERpc2FibGUgcGFyc2luZyBvZiB0aGUgRFNBIHRhZywgaXQgd2lsbCBiZSBmb3J3YXJkZWQgYmxpbmRseVxuK1x0XHQgKiB0byB0aGUgZG93bnN0cmVhbSBzd2l0Y2guXG4rXHRcdCAqL1xuK1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSxcbitcdFx0XHQgICAgIFZMQU5fQVRUUihNVDc1MzBfVkxBTl9UUkFOU1BBUkVOVCkgfFxuK1x0XHRcdCAgICAgUFZDX0VHX1RBRyhNVDc1MzBfVkxBTl9FR19ESVNBQkxFRCkpO1xuK1xuK1x0XHQvKiBUaGUgcG9ydCBpcyBub3QgY29uZmlndXJlZCB0byBwYXJzZSBEU0EgdGFncywgc28gdGhleSBhcmVcbitcdFx0ICogbGlhYmxlIHRvIGJlIGNvbmZ1c2VkIGZvciBsZW5ndGggZmllbGRzLCBzbyBsZW5ndGggY2hlY2sgaXNcbitcdFx0ICogZGlzYWJsZWQuXG4rXHRcdCAqL1xuK1x0XHRyZWdtYXBfY2xlYXJfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX0FHQywgQUdDX0wyTEVOX0NISyk7XG4rXG4rXHRcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIE1UVSBpcyBvbmx5IGVuZm9yY2VkIGRvd25zdHJlYW0gKi9cbitcdFx0bXQ3NTMwX3BvcnRfY2hhbmdlX210dShkcywgcG9ydCwgTVQ3NTMwX01BWF9NVFUpO1xuK1xuK1x0XHQvKiBMb29wIGRldGVjdGlvbiBoYXMgbm8gdmFsdWUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xuK1x0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzWF9NVFJBUCxcbitcdFx0XHRcdE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE5vdCBwYXNzdGhyb3VnaCwgZW5hYmxlIERTQSB0YWcgaGFuZGxpbmcgb24gQ1BVIHBvcnQuICovXG4rXHRcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcbitcdH1cbiBcbiBcdC8qIEVuYWJsZSBmbG9vZGluZyBvbiB0aGUgQ1BVIHBvcnQgKi9cbiBcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01GQyxcbkBAIC0xMzE3LDYgKzE2MTcsNyBAQCBzdGF0aWMgaW50XG4gbXQ3NTMwX3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4ge1xuK1x0aW50IHVwc3RyZWFtX3B0ID0gZHNhX3N3aXRjaF91cHN0cmVhbV9wb3J0KGRzKTtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFxuQEAgLTEzMjcsMTcgKzE2MjgsNDMgQEAgbXQ3NTMwX3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHQgKiBicmlkZ2UuXG4gXHQgKi9cbiBcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSkge1xuLVx0XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRwLVx1MDAzZWNwdV9kcDtcbitcdFx0cHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSB8PSBQQ1JfTUFUUklYKEJJVCh1cHN0cmVhbV9wdCkpO1xuK1xuK1x0fSBlbHNlIGlmIChkc2FfcG9ydF9pc19kc2EoZHApIFx1MDAyNlx1MDAyNiBkcC1cdTAwM2VpbmRleCAhPSB1cHN0cmVhbV9wdCkge1xuK1x0XHRwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKHVwc3RyZWFtX3B0KSk7XG4rXG4rXHRcdC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4rXHRcdFdBUk5fT05fT05DRSghcHJpdi1cdTAwM2Vpc19wYXNzdGhyb3VnaCk7XG4rXG4rXHRcdC8qIFdlIGFyZSBwYXNzaW5nIHRocm91Z2ggdG8gYSBkb3duc3RyZWFtIHN3aXRjaCBzbyB3ZSBzZXQgYm90aFxuK1x0XHQgKiBDUFUgYW5kIGRvd25zdHJlYW0gbGluayB0byBwYXNzIHRyYWZmaWMgdW50b3VjaGVkIHNvIHRoYXRcbitcdFx0ICogdGhlIFNUQUcgZnJvbSB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggd2lsbCBwYXNzIHRvIHRoZSB1cHN0cmVhbS5cbitcdFx0ICovXG4rXHRcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLFxuK1x0XHRcdCAgICAgVkxBTl9BVFRSKE1UNzUzMF9WTEFOX1RSQU5TUEFSRU5UKSB8XG4rXHRcdFx0ICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7XG4rXG4rXHRcdC8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi9cbitcdFx0cmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1M1hfTUZDLCBCQ19GRlAoQklUKHBvcnQpKSB8XG4rXHRcdFx0XHRVTk1fRkZQKEJJVChwb3J0KSkgfCBVTlVfRkZQKEJJVChwb3J0KSkpO1xuIFxuLVx0XHRwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKGNwdV9kcC1cdTAwM2VpbmRleCkpO1xuK1x0XHQvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuXG4rXHRcdCAqIFRoaXMgbXVzdCBiZSBleHBsaWNpdCBiZWNhdXNlIFBPUlRfU1BFQ19UQUcgaXMgdW5zZXQuXG4rXHRcdCAqL1xuK1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QQ1JfUCh1cHN0cmVhbV9wdCksXG4rXHRcdFx0ICAgICBQQ1JfTUFUUklYKEJJVChwb3J0KSkpO1xuIFx0fVxuIFx0cHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5lbmFibGUgPSB0cnVlO1xuLVx0cmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfUENSX1AocG9ydCksIFBDUl9NQVRSSVhfTUFTSyxcbi1cdFx0XHQgICBwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtKTtcbitcbitcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIENQVSBwb3J0IG1hc2sgaXMgc2V0IGFib3ZlLiAqL1xuK1x0aWYgKCEocHJpdi1cdTAwM2Vpc19wYXNzdGhyb3VnaCBcdTAwMjZcdTAwMjYgZHAtXHUwMDNlaW5kZXggPT0gdXBzdHJlYW1fcHQpKVxuK1x0XHRyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QQ1JfUChwb3J0KSxcbitcdFx0XHRcdCAgIFBDUl9NQVRSSVhfTUFTSywgcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSk7XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbitcdGlmIChwcml2LVx1MDAzZWlkICE9IElEX01UNzUzMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc2MjEgXHUwMDI2XHUwMDI2XG4rXHQgICAgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKHBvcnQgPT0gNSlcbkBAIC0xMzY0LDcgKzE2OTEsOCBAQCBtdDc1MzBfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbitcdGlmIChwcml2LVx1MDAzZWlkICE9IElEX01UNzUzMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc2MjEgXHUwMDI2XHUwMDI2XG4rXHQgICAgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIERvIG5vdCBzZXQgTVQ3NTMwX1A1X0RJUyB3aGVuIHBvcnQgNSBpcyBiZWluZyB1c2VkIGZvciBQSFkgbXV4aW5nLiAqL1xuQEAgLTEzODUsNyArMTcxMyw3IEBAIG10NzUzMF9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXG4gXHQgKiBsYXJnZXN0IE1UVSBvZiB0aGUgdXNlciBwb3J0cy4gQmVjYXVzZSB0aGUgc3dpdGNoIG9ubHkgaGFzIGEgZ2xvYmFsXG4gXHQgKiBSWCBsZW5ndGggcmVnaXN0ZXIsIG9ubHkgYWxsb3dpbmcgQ1BVIHBvcnQgaGVyZSBpcyBlbm91Z2guXG4gXHQgKi9cbi1cdGlmICghZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSlcbitcdGlmICghZHNhX2lzX3Vwc3RyZWFtX3BvcnQoZHMsIHBvcnQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfR01BQ0NSLCBcdTAwMjZ2YWwpO1xuQEAgLTIzMzMsNyArMjY2MSw3IEBAIG10NzUzMF9mcmVlX21kaW9faXJxKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludFxuK2ludFxuIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucCwgKm5wID0gcHJpdi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbkBAIC0yMzQzLDYgKzI2NzEsMTAgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0c3RhdGljIGludCBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbitcdC8qIEFscmVhZHkgZG9uZSAqL1xuK1x0aWYgKHByaXYtXHUwMDNlY2hpbGRfYnVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcIm1kaW9cIik7XG4gXG4gXHRpZiAobW5wIFx1MDAyNlx1MDAyNiAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShtbnApKVxuQEAgLTIzNzAsOCArMjcwMiwxMSBAQCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gXHRpZiAocHJpdi1cdTAwM2VpcnFfZG9tYWluIFx1MDAyNlx1MDAyNiAhbW5wKVxuIFx0XHRtdDc1MzBfc2V0dXBfbWRpb19pcnEocHJpdik7XG4gXG4rXHRwcml2LVx1MDAzZWNoaWxkX2J1cyA9IGJ1cztcbitcbiBcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbiBcdGlmIChyZXQpIHtcbitcdFx0cHJpdi1cdTAwM2VjaGlsZF9idXMgPSBOVUxMO1xuIFx0XHRkZXZfZXJyKGRldiwgXCJmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXM6ICVkXFxuXCIsIHJldCk7XG4gXHRcdGlmIChwcml2LVx1MDAzZWlycV9kb21haW4gXHUwMDI2XHUwMDI2ICFtbnApXG4gXHRcdFx0bXQ3NTMwX2ZyZWVfbWRpb19pcnEocHJpdik7XG5AQCAtMjM4MSw2ICsyNzE2LDcgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0b2Zfbm9kZV9wdXQobW5wKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG10NzUzMF9zZXR1cF9tZGlvKTtcbiBcbiBzdGF0aWMgaW50XG4gbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbkBAIC0yNDA2LDExICsyNzQyLDYgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoIWRuKSB7XG4tXHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcInBhcmVudCBPRiBub2RlIG9mIERTQSBjb25kdWl0IG5vdCBmb3VuZFwiKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4gXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4gXHRkcy1cdTAwM2V1bnRhZ192bGFuX2F3YXJlX2JyaWRnZV9wdmlkID0gdHJ1ZTtcbiBcdGRzLVx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcbkBAIC0yNDg5LDYgKzI4MjAsMTIgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0XHQgICBNVDc1MzBfQ0hHX1RSQVAgfCBNVDc1MzBfUEhZX0lORElSRUNUX0FDQ0VTUyxcbiBcdFx0XHQgICBNVDc1MzBfQ0hHX1RSQVApO1xuIFxuK1x0LyogRU43NTEyMjEgTUNNIHN0YXJ0cyBvbiB0aGUgd3JvbmcgZnJlcXVlbmN5ICovXG4rXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMV9FWFQpXG4rXHRcdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLFxuK1x0XHRcdFx0ICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX0NLX1NFTCxcbitcdFx0XHRcdCAgIE1UNzUzMF9DSEdfVFJBUCk7XG4rXG4gXHRpZiAoKHZhbCBcdTAwMjYgTVQ3NTMwX1hUQUxfTUFTSykgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXG4gXHRcdG10NzUzMF9wbGxfc2V0dXAocHJpdik7XG4gXG5AQCAtMjUxMiw3ICsyODQ5LDcgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0LyogRGlzYWJsZSBsZWFybmluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuIFx0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QU0NfUChpKSwgU0FfRElTKTtcbiBcbi1cdFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgaSkpIHtcbitcdFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xuIFx0XHRcdG10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xuQEAgLTI1MzYsNyArMjg3Myw3IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBDaGVjayBmb3IgUEhZIG11eGluZyBvbiBwb3J0IDUgKi9cbi1cdGlmIChkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7XG4rXHRpZiAoZG4gXHUwMDI2XHUwMDI2IGRzYV9pc191bnVzZWRfcG9ydChkcywgNSkpIHtcbiBcdFx0LyogU2NhbiB0aGUgZXRoZXJuZXQgbm9kZXMuIExvb2sgZm9yIEdNQUMxLCBsb29rdXAgdGhlIHVzZWQgUEhZLlxuIFx0XHQgKiBTZXQgcHJpdi1cdTAwM2VwNV9tb2RlIHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSBpZiBQSFkgbXV4aW5nIGlzXG4gXHRcdCAqIGRldGVjdGVkLlxuQEAgLTI2MzYsNyArMjk3Myw3IEBAIG10NzUzMV9zZXR1cF9jb21tb24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMV9EQkdfQ05UKGkpLFxuIFx0XHRcdFx0TVQ3NTMxX0RJU19DTFIpO1xuIFxuLVx0XHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkge1xuK1x0XHRpZiAoZHNhX2lzX3Vwc3RyZWFtX3BvcnQoZHMsIGkpKSB7XG4gXHRcdFx0bXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShkcywgaSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bXQ3NTMwX3BvcnRfZGlzYWJsZShkcywgaSk7XG5AQCAtMjY3NCw4ICszMDExLDExIEBAIG10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdHUzMiB2YWwsIGlkO1xuK1x0aW50IGN0bF9waHk7XG4gXHRpbnQgcmV0LCBpO1xuIFxuK1x0Y3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xuK1xuIFx0LyogUmVzZXQgd2hvbGUgY2hpcCB0aHJvdWdoIGdwaW8gcGluIG9yIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGZvclxuIFx0ICogZGlmZmVyZW50IHR5cGUgb2YgaGFyZHdhcmVcbiBcdCAqL1xuQEAgLTI3NDMsMjUgKzMwODMsMjEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdCAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duXG4gXHQgKiBtdDc1MzFfaW5kX21tZF9waHlfW3JlYWQsd3JpdGVdIHRvIGNvbXBsZXRlIHRoaXMgZnVuY3Rpb24uXG4gXHQgKi9cbi1cdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsXG4tXHRcdFx0XHQgICAgICBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0XHQgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0KTtcbitcdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsIGN0bF9waHksIE1ESU9fTU1EX1ZFTkQyLFxuK1x0XHRcdFx0ICAgICAgQ09SRV9QTExfR1JPVVA0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR2YWwgPSByZXQ7XG4gXHR2YWwgfD0gTVQ3NTMxX1JHX1NZU1BMTF9ETVkyIHwgTVQ3NTMxX1BIWV9QTExfQllQQVNTX01PREU7XG4gXHR2YWwgXHUwMDI2PSB+TVQ3NTMxX1BIWV9QTExfT0ZGO1xuLVx0cmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsXG4tXHRcdFx0XHQgICAgICAgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdFx0ICAgICAgIE1ESU9fTU1EX1ZFTkQyLCBDT1JFX1BMTF9HUk9VUDQsIHZhbCk7XG4rXHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICAgICAgQ09SRV9QTExfR1JPVVA0LCB2YWwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIERpc2FibGUgRUVFIGFkdmVydGlzZW1lbnQgb24gdGhlIHN3aXRjaCBQSFlzLiAqL1xuLVx0Zm9yIChpID0gTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpO1xuLVx0ICAgICBpIFx1MDAzYyBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcikgKyBNVDc1MzBfTlVNX1BIWVM7XG4tXHQgICAgIGkrKykge1xuK1x0Zm9yIChpID0gY3RsX3BoeTsgaSBcdTAwM2MgY3RsX3BoeSArIE1UNzUzMF9OVU1fUEhZUzsgaSsrKSB7XG4gXHRcdG10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZShwcml2LCBpLCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLFxuIFx0XHRcdFx0XHQgMCk7XG4gXHR9XG5AQCAtMjkxMCw2ICszMjQ2LDQ0IEBAIHN0YXRpYyB2b2lkIGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBlbjc1MTIyMV9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdHN3aXRjaCAocG9ydCkge1xuK1x0LyogRU43NTEyMjEgcG9ydHMgMC4uMyBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlZ3JhdGVkIEZFIFBIWXMuICovXG4rXHRjYXNlIDAgLi4uIDM6XG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4rXHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1xuK1x0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xuK1x0XHRicmVhaztcbitcbitcdC8qIFBvcnQgNCBpcyBjb25uZWN0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgRU43NTEyL0VONzUyMSBHUEhZLiAqL1xuK1x0Y2FzZSA0OlxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuK1x0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcbitcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0LyogUG9ydCA1IGlzIHRoZSAxIEdiaXQvcyBUUkdNSUkgY2FzY2FkZSB0byB0aGUgZXh0ZXJuYWwgTVQ3NTMwLiAqL1xuK1x0Y2FzZSA1OlxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSxcbitcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXG4rXHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0LyogUG9ydCA2IGlzIHRoZSAxIEdiaXQvcyBDUFUgbGluayB0byBHRE0xLiAqL1xuK1x0Y2FzZSA2OlxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuK1x0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcbitcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gbXQ3NTMwX21hY19jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsXG4gXHRcdCAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbkBAIC0zMDU5LDYgKzM0MzMsOSBAQCBzdGF0aWMgdm9pZCBtdDc1M3hfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdH1cbiBcbiBcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC1cdTAwM2VpbmRleCksIG1jcik7XG4rXG4rXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpXG4rXHRcdG10NzUzMF9jYWxfaW50ZXJzd2l0Y2hfdHJnbWlpKGRwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NTN4X3BoeWxpbmtfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuQEAgLTMyOTgsMTAgKzM2NzUsMTEgQEAgbXQ3NTN4X2NvbmR1aXRfc3RhdGVfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcbiBcdC8qIFNldCB0aGUgQ1BVIHBvcnQgdG8gdHJhcCBmcmFtZXMgdG8gZm9yIE1UNzUzMC4gVHJhcHBlZCBmcmFtZXMgd2lsbCBiZVxuIFx0ICogZm9yd2FyZGVkIHRvIHRoZSBudW1lcmljYWxseSBzbWFsbGVzdCBDUFUgcG9ydCB3aG9zZSBjb25kdWl0XG4tXHQgKiBpbnRlcmZhY2UgaXMgdXAuXG4rXHQgKiBpbnRlcmZhY2UgaXMgdXAuIE5PVEU6IFwiQ1BVIHBvcnRcIiBjYW4gYWxzbyBtZWFuIGFuIHVwc3RyZWFtIERTQSBsaW5rLlxuIFx0ICovXG4gXHRpZiAocHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc1MzAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTI4KVxuK1x0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTI4IFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtYXNrID0gQklUKGNwdV9kcC1cdTAwM2VpbmRleCk7XG5AQCAtMzM5Myw2ICszNzcxLDc2IEBAIHN0YXRpYyBpbnQgbXQ3OTg4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdHJldHVybiBtdDc1MzFfc2V0dXBfY29tbW9uKGRzKTtcbiB9XG4gXG4rLyogMSBpZiBwYXNzdGhyb3VnaCwgbmVnYXRpdmUgaWYgZXJyb3IuICovXG4rc3RhdGljIGludCBtdDc1M3hfY2hlY2tfcGFzc3Rocm91Z2goc3RydWN0IGRldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHMsICpwb3J0O1xuK1x0aW50IHBhc3N0aHJvdWdoX3BvcnRzID0gMDtcbitcdGludCBlbmFibGVkX3BvcnRzID0gMDtcbitcbitcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZW9mX25vZGUsIFwicG9ydHNcIik7XG4rXHRpZiAoIXBvcnRzKVxuK1x0XHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VvZl9ub2RlLCBcImV0aGVybmV0LXBvcnRzXCIpO1xuK1xuK1x0aWYgKCFwb3J0cykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJubyBwb3J0cyBjaGlsZCBub2RlIGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBvcnRzLCBwb3J0KSB7XG4rXHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGluaztcbitcbitcdFx0ZW5hYmxlZF9wb3J0cysrO1xuK1xuK1x0XHRsaW5rID0gb2ZfcGFyc2VfcGhhbmRsZShwb3J0LCBcImV0aGVybmV0XCIsIDApO1xuK1x0XHRpZiAoIWxpbmspXG4rXHRcdFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXCJsaW5rXCIsIDApO1xuK1xuK1x0XHRpZiAoIWxpbmspXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG9mX25vZGVfcHV0KGxpbmspO1xuK1xuK1x0XHRwYXNzdGhyb3VnaF9wb3J0cysrO1xuK1x0fVxuK1xuK1x0b2Zfbm9kZV9wdXQocG9ydHMpO1xuK1xuK1x0LypcbitcdCAqIEEgc3dpdGNoIGlzIGNvbnNpZGVyZWQgcGFzc3Rocm91Z2ggaWYgZXhhY3RseSB0d28gYXZhaWxhYmxlXG4rXHQgKiBwb3J0cyBoYXZlIGFuIFwiZXRoZXJuZXRcIiBvciBcImxpbmtcIiBwaGFuZGxlLlxuK1x0ICovXG4rXHRpZiAocGFzc3Rocm91Z2hfcG9ydHMgXHUwMDNlIDIgfHxcbitcdCAgICAocGFzc3Rocm91Z2hfcG9ydHMgPT0gMiBcdTAwMjZcdTAwMjYgZW5hYmxlZF9wb3J0cyAhPSAyKVxuK1x0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIk9ubHkgdHdvIHBvcnRzIGFsbG93ZWQgaW4gcGFzc3Rocm91Z2ggbW9kZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGFzc3Rocm91Z2hfcG9ydHMgPT0gMjtcbit9XG4rXG4rLyogTm8gbWFuaXB1bGF0aW9uIG9mIGZvcndhcmRpbmcgcnVsZXMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHtcbitcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IG10a19nZXRfdGFnX3Byb3RvY29sLFxuK1x0LnNldHVwXHRcdFx0PSBtdDc1M3hfc2V0dXAsXG4rXHQudGVhcmRvd25cdFx0PSBtdDc1M3hfdGVhcmRvd24sXG4rXHQucHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQgPSBtdDc1M3hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQsXG4rXHQuZ2V0X3N0cmluZ3NcdFx0PSBtdDc1MzBfZ2V0X3N0cmluZ3MsXG4rXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLFxuK1x0LmdldF9zc2V0X2NvdW50XHRcdD0gbXQ3NTMwX2dldF9zc2V0X2NvdW50LFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyxcbitcdC5nZXRfcm1vbl9zdGF0c1x0XHQ9IG10NzUzMF9nZXRfcm1vbl9zdGF0cyxcbitcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGhfY3RybF9zdGF0cyxcbitcdC5nZXRfc3RhdHM2NFx0XHQ9IG10NzUzMF9nZXRfc3RhdHM2NCxcbitcdC5wb3J0X2VuYWJsZVx0XHQ9IG10NzUzMF9wb3J0X2VuYWJsZSxcbitcdC5wb3J0X2Rpc2FibGVcdFx0PSBtdDc1MzBfcG9ydF9kaXNhYmxlLFxuK1x0LnBoeWxpbmtfZ2V0X2NhcHNcdD0gbXQ3NTN4X3BoeWxpbmtfZ2V0X2NhcHMsXG4rXHQuc3VwcG9ydF9lZWVcdFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxuK1x0LnNldF9tYWNfZWVlXHRcdD0gbXQ3NTN4X3NldF9tYWNfZWVlLFxuK1x0LmNvbmR1aXRfc3RhdGVfY2hhbmdlXHQ9IG10NzUzeF9jb25kdWl0X3N0YXRlX2NoYW5nZSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdGtfZ2V0X3RhZ19wcm90b2NvbCxcbiBcdC5zZXR1cFx0XHRcdD0gbXQ3NTN4X3NldHVwLFxuQEAgLTM1MTksMTQgKzM5NjcsNDAgQEAgY29uc3Qgc3RydWN0IG10NzUzeF9pbmZvIG10NzUzeF90YWJsZVtdID0ge1xuIFx0XHQucGh5X3dyaXRlX2M0NSA9IG10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZSxcbiBcdFx0Lm1hY19wb3J0X2dldF9jYXBzID0gZW43NTI4X21hY19wb3J0X2dldF9jYXBzLFxuIFx0fSxcbitcdFtJRF9FTjc1MTIyMV0gPSB7XG4rXHRcdC5pZCA9IElEX0VONzUxMjIxLFxuK1x0XHQucGNzX29wcyA9IFx1MDAyNm10NzUzMF9wY3Nfb3BzLFxuK1x0XHQuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsXG4rXHRcdC5waHlfcmVhZF9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfcmVhZCxcbitcdFx0LnBoeV93cml0ZV9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfd3JpdGUsXG4rXHRcdC5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCxcbitcdFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsXG4rXHRcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUxMjIxX21hY19wb3J0X2dldF9jYXBzLFxuK1x0XHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXG4rXHR9LFxuK1x0W0lEX0VONzUxMjIxX0VYVF0gPSB7XG4rXHRcdC5pZCA9IElEX0VONzUxMjIxX0VYVCxcbitcdFx0LnBjc19vcHMgPSBcdTAwMjZtdDc1MzBfcGNzX29wcyxcbitcdFx0LnN3X3NldHVwID0gbXQ3NTMwX3NldHVwLFxuK1x0XHQucGh5X3JlYWRfYzIyID0gbXQ3NTMwX3BoeV9yZWFkX2MyMixcbitcdFx0LnBoeV93cml0ZV9jMjIgPSBtdDc1MzBfcGh5X3dyaXRlX2MyMixcbitcdFx0LnBoeV9yZWFkX2M0NSA9IG10NzUzMF9waHlfcmVhZF9jNDUsXG4rXHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMwX3BoeV93cml0ZV9jNDUsXG4rXHRcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IG10NzUzMF9tYWNfcG9ydF9nZXRfY2FwcyxcbitcdFx0Lm1hY19wb3J0X2NvbmZpZyA9IG10NzUzMF9tYWNfY29uZmlnLFxuK1x0fSxcbiB9O1xuIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7XG4gXG4gaW50XG4gbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuK1x0aW50IHBhc3N0aHJvdWdoID0gbXQ3NTN4X2NoZWNrX3Bhc3N0aHJvdWdoKHByaXYtXHUwMDNlZGV2KTtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFxuK1x0aWYgKHBhc3N0aHJvdWdoIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcGFzc3Rocm91Z2g7XG4rXG4gXHRwcml2LVx1MDAzZWRzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2LVx1MDAzZWRzKSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXByaXYtXHUwMDNlZHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTM1NDQsNyArNDAxOCwxNCBAQCBtdDc1MzBfcHJvYmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdHByaXYtXHUwMDNlaWQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlaWQ7XG4gXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbiBcdHByaXYtXHUwMDNlZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4tXHRwcml2LVx1MDAzZWRzLVx1MDAzZW9wcyA9IFx1MDAyNm10NzUzMF9zd2l0Y2hfb3BzO1xuK1xuK1x0aWYgKHBhc3N0aHJvdWdoKSB7XG4rXHRcdHByaXYtXHUwMDNlZHMtXHUwMDNlb3BzID0gXHUwMDI2bXQ3NTMwX3Bhc3N0aHJvdWdoX3N3aXRjaF9vcHM7XG4rXHRcdHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2ggPSB0cnVlO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VvcHMgPSBcdTAwMjZtdDc1MzBfc3dpdGNoX29wcztcbitcdH1cbitcbiBcdHByaXYtXHUwMDNlZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2bXQ3NTN4X3BoeWxpbmtfbWFjX29wcztcbiBcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0c19sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmggYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcbmluZGV4IDJiYmJlNjE3YjUyZWUuLjFhNDMyOTc0OWMwZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaFxuQEAgLTI0LDYgKzI0LDggQEAgZW51bSBtdDc1M3hfaWQge1xuIFx0SURfRU43NTgxID0gNCxcbiBcdElEX0FONzU4MyA9IDUsXG4gXHRJRF9FTjc1MjggPSA2LFxuK1x0SURfRU43NTEyMjEgPSA3LFxuK1x0SURfRU43NTEyMjFfRVhUID0gOCxcbiB9O1xuIFxuICNkZWZpbmVcdE5VTV9UUkdNSUlfQ1RSTFx0XHRcdDVcbkBAIC00MCw2ICs0Miw3IEBAIGVudW0gbXQ3NTN4X2lkIHtcbiAvKiBSZWdpc3RlciBmb3IgQVJMIGdsb2JhbCBjb250cm9sICovXG4gI2RlZmluZSBNVDc1M1hfQUdDXHRcdFx0MHhjXG4gI2RlZmluZSAgTE9DQUxfRU5cdFx0XHRCSVQoNylcbisjZGVmaW5lICBBR0NfTDJMRU5fQ0hLXHRcdFx0QklUKDQpXG4gXG4gLyogUmVnaXN0ZXIgZm9yIE1BQyBmb3J3YXJkIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1UNzUzWF9NRkNcdFx0XHQweDEwXG5AQCAtMzU1LDYgKzM1OCw5IEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hY2NfZnJtIHtcbiAjZGVmaW5lIE1UNzUzWF9QTUNSX1AoeClcdFx0KDB4MzAwMCArICgoeCkgKiAweDEwMCkpXG4gI2RlZmluZSAgUE1DUl9JRkdfWE1JVF9NQVNLXHRcdEdFTk1BU0soMTksIDE4KVxuICNkZWZpbmUgIFBNQ1JfSUZHX1hNSVQoeClcdFx0RklFTERfUFJFUChQTUNSX0lGR19YTUlUX01BU0ssIHgpXG4rI2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzk2XHRcdDBcbisjZGVmaW5lICAgIFBNQ1JfSUZHX1hNSVRfUkFORFx0XHQxXG4rI2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzY0XHRcdDJcbiAjZGVmaW5lICBQTUNSX0VYVF9QSFlcdFx0XHRCSVQoMTcpXG4gI2RlZmluZSAgUE1DUl9NQUNfTU9ERVx0XHRcdEJJVCgxNilcbiAjZGVmaW5lICBNVDc1MzBfRk9SQ0VfTU9ERVx0XHRCSVQoMTUpXG5AQCAtNTgzLDYgKzU4OSw4IEBAIGVudW0gbXQ3NTMxX2Nsa19za2V3IHtcbiAjZGVmaW5lIE1UNzUzWF9NVFJBUFx0XHRcdDB4NzgwNFxuICNkZWZpbmUgIE1UNzUzMF9QNV9QSFkwX1NFTFx0XHRCSVQoMjApXG4gI2RlZmluZSAgTVQ3NTMwX0NIR19UUkFQXHRcdEJJVCgxNilcbisjZGVmaW5lICBNVDc1MzBfQ0tfU0VMXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgIE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFXHRCSVQoMTQpXG4gI2RlZmluZSAgTVQ3NTMwX1A1X01BQ19TRUxcdFx0QklUKDEzKVxuICNkZWZpbmUgIE1UNzUzMF9QNl9ESVNcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBNVDc1MzBfUDVfUkdNSUlfTU9ERVx0XHRCSVQoNylcbkBAIC01OTksNiArNjA3LDggQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcbiAvKiBSZWdpc3RlciBmb3IgVE9QIHNpZ25hbCBjb250cm9sICovXG4gI2RlZmluZSBNVDc1MzBfVE9QX1NJR19DVFJMXHRcdDB4NzgwOFxuICNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9OT1JNQUxcdFx0KEJJVCgxNykgfCBCSVQoMTYpKVxuKy8qIFVuZG9jdW1lbnRlZCAqL1xuKyNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9CMFx0XHRCSVQoMClcbiBcbiAjZGVmaW5lIE1UNzUzMV9UT1BfU0lHX1NSXHRcdDB4NzgwY1xuICNkZWZpbmUgIFBBRF9EVUFMX1NHTUlJX0VOXHRcdEJJVCgxKVxuQEAgLTY0NSwxOCArNjU1LDMxIEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1JDS19SVFRcdFx0MHg3YTA0XG4gI2RlZmluZSAgRFFTMV9HQVRFXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIERRUzBfR0FURVx0XHRcdEJJVCgzMClcbisvKiBVbmRvY3VtZW50ZWQgKi9cbisjZGVmaW5lICBFTjc1MTIyMV9CMTdcdFx0XHRCSVQoMTcpXG4gXG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1JEKHgpXHRcdCgweDdhMTAgKyAoeCkgKiA4KVxuICNkZWZpbmUgIEJTTElQX0VOXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIEVER0VfQ0hLXHRcdFx0QklUKDMwKVxuKyNkZWZpbmUgIFJEX1ZBTFVFX01BU0tcdFx0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lICBSRF9FUlJfTUFTS1x0XHRcdEdFTk1BU0soMTEsIDgpXG4gI2RlZmluZSAgUkRfVEFQX01BU0tcdFx0XHRHRU5NQVNLKDYsIDApXG4gI2RlZmluZSAgUkRfVEFQKHgpXHRcdFx0RklFTERfUFJFUChSRF9UQVBfTUFTSywgeClcbisvKiBUcmFpbmluZyBkb2VzIG5vdCB0cnkgYW55dGhpbmcgYmV5b25kIHRoaXMgKi9cbisjZGVmaW5lICBURF9UQVBfTUFYXHRcdFx0NjRcbiBcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfVFhDVFJMXHRcdDB4N2E0MFxuICNkZWZpbmUgIFRSQUlOX1RYRU5cdFx0XHRCSVQoMzEpXG4gI2RlZmluZSAgVFhDX0lOVlx0XHRcdEJJVCgzMClcbiAjZGVmaW5lICBUWF9SU1RcdFx0XHRcdEJJVCgyOClcbiBcbisjZGVmaW5lIEVONzUzMF9UUkdNSUlfVERfQ1RSTCh4KVx0KDB4N2E1MCArICh4KSAqIDgpXG4rI2RlZmluZSAgIFRHTUlJX1REX1RBUF9NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSAgIFRHTUlJX1REX1BBVF9NQVNLXHRcdEdFTk1BU0soNywgMClcbisvKiBVc2UgYSAwMTAxMDEwMSBiaXQgcGF0dGVybiAqL1xuKyNkZWZpbmUgICBUR01JSV9URF9QQVRcdFx0XHQweDU1XG4rI2RlZmluZSAgIFRHTUlJX1REX0ZBSUxfUEFUXHRcdDB4YWFcbitcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfVERfT0RUKGkpXHRcdCgweDdhNTQgKyA4ICogKGkpKVxuICNkZWZpbmUgIFREX0RNX0RSVlBfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4gI2RlZmluZSAgVERfRE1fRFJWUCh4KVx0XHRcdEZJRUxEX1BSRVAoVERfRE1fRFJWUF9NQVNLLCB4KVxuQEAgLTc0Nyw4ICs3NzAsNiBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xuICNkZWZpbmUgIE1UNzUzMV9QSFlfUExMX09GRlx0XHRCSVQoNSlcbiAjZGVmaW5lICBNVDc1MzFfUEhZX1BMTF9CWVBBU1NfTU9ERVx0QklUKDQpXG4gXG4tI2RlZmluZSBNVDc1M1hfQ1RSTF9QSFlfQUREUihhZGRyKVx0KCgoYWRkcikgKyAxKSBcdTAwMjYgKFBIWV9NQVhfQUREUiAtIDEpKVxuLVxuICNkZWZpbmUgQ09SRV9QTExfR1JPVVA1XHRcdFx0MHg0MDRcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzFfTUFTS1x0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzEoeClcdFx0RklFTERfUFJFUChSR19MQ0REU19QQ1dfTkNQTzFfTUFTSywgeClcbkBAIC03NjQsNiArNzg1LDkgQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcbiAjZGVmaW5lICBSR19MQ0NEU19DKHgpXHRcdFx0RklFTERfUFJFUChSR19MQ0NEU19DX01BU0ssIHgpXG4gI2RlZmluZSAgUkdfTENERFNfUENXX05DUE9fQ0hHXHRcdEJJVCgzKVxuIFxuKyNkZWZpbmUgQ09SRV9QTExfR1JPVVA4XHRcdFx0MHg0MDdcbisjZGVmaW5lICBSR19MQ0REU19TU0NfRU5cdFx0QklUKDEwKVxuK1xuICNkZWZpbmUgQ09SRV9QTExfR1JPVVAxMFx0XHQweDQwOVxuICNkZWZpbmUgIFJHX0xDRERTX1NTQ19ERUxUQV9NQVNLXHRHRU5NQVNLKDExLCAwKVxuICNkZWZpbmUgIFJHX0xDRERTX1NTQ19ERUxUQSh4KVx0XHRGSUVMRF9QUkVQKFJHX0xDRERTX1NTQ19ERUxUQV9NQVNLLCB4KVxuQEAgLTg4Niw2ICs5MTAsOSBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8ge1xuICAqIEBkZXY6XHRcdFRoZSBkZXZpY2UgcG9pbnRlclxuICAqIEBkczpcdFx0XHRUaGUgcG9pbnRlciB0byB0aGUgZHNhIGNvcmUgc3RydWN0dXJlXG4gICogQGJ1czpcdFx0VGhlIGJ1cyB1c2VkIGZvciB0aGUgZGV2aWNlIGFuZCBidWlsdC1pbiBQSFlcbisgKiBAY2hpbGRfYnVzOlx0XHRUaGUgYnVzIGNyZWF0ZWQgYnkgdGhlIGRldmljZSwgb24gTURJTyBpbXBsZW1lbnRhdGlvbnNcbisgKlx0XHRcdHRoaXMgaXMgYnVzIGluZGlyZWN0bHkgYWNjZXNzZXMgYGJ1c2AsIG9uIE1NSU9cbisgKlx0XHRcdGltcGxlbWVudGF0aW9ucyB0aGlzIGJ1cyBpcyBwYXJ0IG9mIHRoZSBzd2l0Y2guXG4gICogQHJlZ21hcDpcdFx0VGhlIHJlZ21hcCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYWxsIHN3aXRjaCByZWdpc3RlcnNcbiAgKiBAcnN0YzpcdFx0VGhlIHBvaW50ZXIgdG8gcmVzZXQgY29udHJvbCB1c2VkIGJ5IE1DTVxuICAqIEBjb3JlX3B3cjpcdFx0VGhlIHBvd2VyIHN1cHBsaWVkIGludG8gdGhlIGNvcmVcbkBAIC04OTksNiArOTI2LDkgQEAgc3RydWN0IG10NzUzeF9pbmZvIHtcbiAgKiBAcDVfbW9kZTpcdFx0SG9sZGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHBvcnQgNSBvZiB0aGUgTVQ3NTMwIHN3aXRjaFxuICAqIEBwNV9zZ21paTpcdFx0RmxhZyBmb3IgZGlzdGluZ3Vpc2hpbmcgaWYgcG9ydCA1IG9mIHRoZSBNVDc1MzEgc3dpdGNoXG4gICpcdFx0XHRoYXMgZ290IFNHTUlJXG4rICogQGlzX3Bhc3N0aHJvdWdoOlx0SWYgdGhpcyBzd2l0Y2ggaXMgdG8gcGFzcyB0cmFmZmljIGJldHdlZW4gdGhlIHVwc3RyZWFtXG4rICpcdFx0XHQoQ1BVKSBwb3J0IGFuZCBhIHNlY29uZCBkb3duc3RyZWFtIHN3aXRjaCwgd2l0aG91dFxuKyAqXHRcdFx0YWx0ZXJpbmcgdGhlIERTQSB0YWcuXG4gICogQGlycV9kb21haW46XHRcdElSUSBkb21haW4gb2YgdGhlIHN3aXRjaCBpcnFfY2hpcFxuICAqIEBjcmVhdGVfc2dtaWk6XHRQb2ludGVyIHRvIGZ1bmN0aW9uIGNyZWF0aW5nIFNHTUlJIFBDUyBpbnN0YW5jZShzKVxuICAqIEBhY3RpdmVfY3B1X3BvcnRzOlx0SG9sZGluZyB0aGUgYWN0aXZlIENQVSBwb3J0c1xuQEAgLTkxMSw2ICs5NDEsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYge1xuIFx0c3RydWN0IGRldmljZVx0XHQqZGV2O1xuIFx0c3RydWN0IGRzYV9zd2l0Y2hcdCpkcztcbiBcdHN0cnVjdCBtaWlfYnVzXHRcdCpidXM7XG4rXHRzdHJ1Y3QgbWlpX2J1c1x0XHQqY2hpbGRfYnVzO1xuIFx0c3RydWN0IHJlZ21hcFx0XHQqcmVnbWFwO1xuIFx0c3RydWN0IHJlc2V0X2NvbnRyb2xcdCpyc3RjO1xuIFx0c3RydWN0IHJlZ3VsYXRvclx0KmNvcmVfcHdyO1xuQEAgLTkyMyw2ICs5NTQsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYge1xuIFx0Ym9vbFx0XHRcdHA1X3NnbWlpO1xuIFx0dThcdFx0XHRtaXJyb3Jfcng7XG4gXHR1OFx0XHRcdG1pcnJvcl90eDtcbitcdGJvb2xcdFx0XHRpc19wYXNzdGhyb3VnaDtcbiBcdHN0cnVjdCBtdDc1MzBfcG9ydFx0cG9ydHNbTVQ3NTMwX05VTV9QT1JUU107XG4gXHRzdHJ1Y3QgbXQ3NTN4X3Bjc1x0cGNzW01UNzUzMF9OVU1fUE9SVFNdO1xuIFx0LyogcHJvdGVjdCBhbW9uZyBwcm9jZXNzZXMgZm9yIHJlZ2lzdGVycyBhY2Nlc3MqL1xuQEAgLTk2MSw2ICs5OTMsMTYgQEAgc3RydWN0IG10NzUzMF9od19zdGF0cyB7XG4gaW50IG10NzUzMF9wcm9iZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KTtcbiB2b2lkIG10NzUzMF9yZW1vdmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdik7XG4gXG4rLypcbisgKiBXaGVuIGFuIE1NSU8gYmFzZWQgc3dpdGNoIGhhcyBhbiBNRElPIGJ1cyB3aGljaCBjb250YWlucyBhIGRvd25zdHJlYW0gTURJT1xuKyAqIHN3aXRjaCwgdGhlIE1ESU8gYnVzIGlzIG5vdCBub3JtYWxseSBzZXR1cCB1bnRpbCBtdDc1M3hfc2V0dXAoKSBoYXMgYmVlblxuKyAqIGNhbGxlZC4gQnV0IG10NzUzeF9zZXR1cCgpIGlzIG5vdCBjYWxsZWQgdW50aWwgRFNBIHNlZXMgdGhhdCBldmVyeSBzd2l0Y2ggaW5cbisgKiB0aGUgdHJlZSBoYXMgYmVlbiBwcm9iZWQuIENhbGxpbmcgbXQ3NTMwX3NldHVwX21kaW8oKSBhZnRlciBhdCB0aGUgZW5kIG9mXG4rICogdGhlIE1NSU8gcHJvYmUgZnVuY3Rpb24gYWxsb3dzIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB0byByZWdpc3RlciwgY29tcGxldGluZ1xuKyAqIHRoZSB0cmVlLlxuKyAqL1xuK2ludCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpO1xuK1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gbXQ3NTN4X3RhYmxlW107XG4gXG4gI2VuZGlmIC8qIF9fTVQ3NTMwX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjQ2LjE2MTUyNDk4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDI3ODI3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBMaW51eCBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBMb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlc2UgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbGAsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY2AsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY2AsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNgLCBhbmQgYGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaGAuXG5cblJpZ2h0LCBNVDc1MzAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIExldCdzIGNvbmZpcm06IGl0J3MgdGhlIE1lZGlhVGVrIC8gRWNvTmV0IE1UNzUzMCBEU0EgZXRoZXJuZXQgc3dpdGNoIGRyaXZlci4gTm93IGNvbWVzIHRoZSBjcml0aWNhbCBwYXJ0OiBjYW4gd2UgKmFjdHVhbGx5KiBnZXQgYXQgdGhpcyB0aGluZyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBrbm93IHRoZSB0YXJnZXQgaGFyZHdhcmUuIElzIGl0IHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IHRvIGJlIHN1cHBvcnRlZCBieSBRRU1VIG9uIGFtZDY0LCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwPyBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHByb2JpbmcgbWV0aG9kcy5cblxuSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBnaXQgcmVwbywgcHJvYmFibHkgdXNpbmcgYGdpdCBncmVwYCBhbmQgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZSBNVDc1MzAgaXMgaG9va2VkIHVwLiBJcyBpdCBNRElPLCBNTUlPLCBQbGF0Zm9ybSwgU1BJLCBJMkMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBidXMgaXQgcmVsaWVzIG9uIGlzIGVzc2VudGlhbC4gVGhlbiwgSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHdlIGNhbiBzaW11bGF0ZSBpdCwgZW11bGF0ZSBpdCwgb3Igb3RoZXJ3aXNlIHJlYWNoIGl0IHdpdGhpbiB0aGUgZnV6emluZyBmcmFtZXdvcmsuIElmIGl0IHJlcXVpcmVzIHNvbWUgb2JzY3VyZSBoYXJkd2FyZSBJIGNhbid0IGVhc2lseSBlbXVsYXRlLCB0aGVuIHdlJ2xsIGhhdmUgYSB0b3VnaCB0aW1lLiBUaW1lIHRvIHJ1biBncmVwcGVyIG9yIHJlYWQgdGhlIEtjb25maWcgZmlsZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjUwLjkwNDMxMDM2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5NzkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfRFNBX01UNzUzMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWc9Mjk9c291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbGFudGlxL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6MzE6Y29uZmlnIE5FVF9EU0FfTVQ3NTMwXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzUzMCBhbmQgTVQ3NTMxIEV0aGVybmV0IHN3aXRjaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzQtXFx0c2VsZWN0IFJFR01BUF9JUlFcXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzozNTpcXHRpbXBseSBORVRfRFNBX01UNzUzMF9NRElPXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6MzY6XFx0aW1wbHkgTkVUX0RTQV9NVDc1MzBfTU1JT1xcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTM3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTQyLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjQzOmNvbmZpZyBORVRfRFNBX01UNzUzMF9NRElPXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzUzMCBNRElPIGludGVyZmFjZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01UNzUzMFxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTQ2LVxcdHNlbGVjdCBNRURJQVRFS19HRV9QSFlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTUzLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX01UNzUzMF9NTUlPXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzUzMCBNTUlPIGludGVyZmFjZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6NTY6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01UNzUzMFxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTU3LVxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTkVUX0RTQV9LUzg5OTUpIFxcdCs9IGtzODk5NS5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwKVxcdCs9IG10NzUzMC5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01ESU8pICs9IG10NzUzMC1tZGlvLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTU1JTykgKz0gbXQ3NTMwLW1taW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS05LW9iai0kKENPTkZJR19ORVRfRFNBX01UNzYyOCkgKz0gbXQ3NjI4Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6MDQ6NTAuOTUzMjEzMjE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkzMTIwNjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1UNzUzMCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1UNzUzMCBzd2l0Y2ggaXMgYmVpbmcgcHJvYmVkIGFuZCBpbml0aWFsaXplZCBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGRyaXZlciBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIGFyY2hpdGVjdHVyZSBzdWdnZXN0cyB0aGF0IHRoZSBNRElPIGFuZCBNTUlPIHZhcmlhbnRzIGFyZSBsaWtlbHkgdGhlIGtleSBkcml2ZXJzLiBTbywgSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNgIGFuZCBgbXQ3NTMwLW1taW8uY2AuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZHJpdmVycyBhcmUgc3RydWN0dXJlZC5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBwYXR0ZXJucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBNRElPIGRyaXZlciAoYG1kaW9fZHJpdmVyYCkgZm9yIHRoZSBNRElPLWNvbm5lY3RlZCB2YXJpYW50LCBhIHBsYXRmb3JtIGRyaXZlciAoYHBsYXRmb3JtX2RyaXZlcmApIGZvciB0aGUgTU1JTyB2YXJpYW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gQXJlIHRoZXJlIGRldmljZSB0cmVlIChPRikgbWF0Y2ggdGFibGVzIGludm9sdmVkPyBUaGF0J3MgYWxtb3N0IGEgZ2l2ZW4gdGhlc2UgZGF5cywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGNvbmZpcm0uIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgaWRlbnRpZmllcyB0aGVzZSBkZXZpY2VzIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzIGFuZCBob3cgdGhlIHJlbGV2YW50IGRyaXZlciBpcyBhdHRhY2hlZCB0byB0aGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBhbnkgcG90ZW50aWFsIHF1aXJrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExOTQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNDo1NC44ODQ0MjE5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTMxOlxcdFxcdFxcdH1cXG4gMTMyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBvcnRzWzUgKyBpXS5zZ21paV9wY3MgPSBwY3M7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgaSlcXG4gMTM2OlxcdFxcdFxcdG10a19wY3NfbHlueGlfZGVzdHJveShwcml2LVxcdTAwM2Vwb3J0c1s1XS5zZ21paV9wY3MpO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMzk6XFx0fVxcbiAxNDA6XFx0XFxuIDE0MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc1MzBfb2ZfbWF0Y2hbXSA9IHtcXG4gMTQyOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXFxuIDE0MzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzYyMVxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc2MjFdLCB9LFxcbiAxNDQ6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc1MzBcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMwXSwgfSxcXG4gMTQ1OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXFxuIDE0NjpcXHRcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4gMTQ3OlxcdH07XFxuIDE0ODpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcXG4gMTUxOlxcdFxcdC5yZWdfYml0cyA9IDE2LFxcbiAxNTI6XFx0XFx0LnZhbF9iaXRzID0gMzIsXFxuIDE1MzpcXHRcXHQucmVnX3N0cmlkZSA9IDQsXFxuIDE1NDpcXHRcXHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXFxuIDE1NTpcXHRcXHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxcbiAxNTY6XFx0XFx0LnVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2ssXFxuIDE1NzpcXHR9O1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRzdGF0aWMgaW50XFxuIDE2MDpcXHRtdDc1MzBfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiAxNjE6XFx0e1xcbiAxNjI6XFx0XFx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xcbiAxNjM6XFx0XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbiAxNjQ6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpkbjtcXG4gMTY1OlxcdFxcdGludCByZXQ7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdGRuID0gbWRpb2Rldi1cXHUwMDNlZGV2Lm9mX25vZGU7XFxuIDE2ODpcXHRcXG4gMTY5OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjU0Ljg4NDQ4MTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ3NDMwODQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEhhcmR3YXJlIEFic3RyYWN0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgc2VlaW5nIHNvbWV0aGluZyBwZWN1bGlhciwgYW5kIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgdHJhY2sgZG93biB0aGUgc291cmNlLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgb2YgdGhlIHByb2JsZW0sIEkga25vdyBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgdGhlIG1vcmUgb2J2aW91cyBzdXNwZWN0cywgYnV0IGl0J3MgdGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byBgbXQ3NTMwLW1taW8uY2AuIFRoaXMgZmlsZSBhbG1vc3QgY2VydGFpbmx5IGNvbnRhaW5zIHRoZSBsb3ctbGV2ZWwgbWVtb3J5LW1hcHBlZCBJL08gZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIE1UNzUzMCBoYXJkd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBjcml0aWNhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBpdHNlbGYgaXMgaGFuZGxlZC4gVGhpcyBpcyBsaWtlbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjY4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNDo1OS4zNTg3OTE3MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Jlc2V0LmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXFwibXQ3NTMwLmhcXFwiXFxuICAxMTpcXHRcXG4gIDEyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10Nzk4OF9vZl9tYXRjaFtdID0ge1xcbiAgMTM6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsYW43NTgzLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LFxcbiAgMTQ6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxcbiAgMTU6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTEyMjEtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSxcXG4gIDE2OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUyOC1zd2l0Y2hcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcXG4gIDE3OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxcbiAgMTg6XFx0XFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuICAxOTpcXHR9O1xcbiAgMjA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3OTg4X29mX21hdGNoKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHN3X3JlZ21hcF9jb25maWcgPSB7XFxuICAyMzpcXHRcXHQubmFtZSA9IFxcXCJzd2l0Y2hcXFwiLFxcbiAgMjQ6XFx0XFx0LnJlZ19iaXRzID0gMTYsXFxuICAyNTpcXHRcXHQudmFsX2JpdHMgPSAzMixcXG4gIDI2OlxcdFxcdC5yZWdfc3RyaWRlID0gNCxcXG4gIDI3OlxcdFxcdC5tYXhfcmVnaXN0ZXIgPSBNVDc1MzBfQ1JFVixcXG4gIDI4OlxcdH07XFxuICAyOTpcXHRcXG4gIDMwOlxcdHN0YXRpYyBpbnRcXG4gIDMxOlxcdG10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiAgMzI6XFx0e1xcbiAgMzM6XFx0XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbiAgMzQ6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XFxuICAzNTpcXHRcXHRpbnQgcmV0O1xcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbiAgMzg6XFx0XFx0aWYgKCFwcml2KVxcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdHByaXYtXFx1MDAzZWJ1cyA9IE5VTEw7XFxuICA0MjpcXHRcXHRwcml2LVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xcbiAgNDU6XFx0XFx0aWYgKHJldClcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdHByaXYtXFx1MDAzZXJzdGMgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbiAgNDk6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2Vyc3RjKSkge1xcbiAgNTA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ291bGRuJ3QgZ2V0IG91ciByZXNldCBsaW5lXFxcXG5cXFwiKTtcXG4gIDUxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZXJzdGMpO1xcbiAgNTI6XFx0XFx0fVxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7XFxuICA1NTpcXHRcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4gIDU2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImNhbm5vdCByZXF1ZXN0IEkvTyBtZW1vcnkgc3BhY2VcXFxcblxcXCIpO1xcbiAgNTc6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJhc2VfYWRkcixcXG4gIDYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnN3X3JlZ21hcF9jb25maWcpO1xcbiAgNjI6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiAgNjM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChwcml2LVxcdTAwM2Vkcyk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGlmIChyZXQpXFxuICA2ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdHN0YXRpYyB2b2lkIG10Nzk4OF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gIDc0OlxcdHtcXG4gIDc1OlxcdFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAocHJpdilcXG4gIDc4OlxcdFxcdFxcdG10NzUzMF9yZW1vdmVfY29tbW9uKHByaXYpO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjU5LjM1ODg2NTkzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NjU3NjkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBNVDc1MzAgRHJpdmVyIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYG10NzUzMGAuLi4gcmlnaHQsIHRoYXQncyBhIERTQSBkcml2ZXIgZm9yIE1lZGlhVGVrL0Vjb05ldCBldGhlcm5ldCBzd2l0Y2hlcy4gQW5kIGl0J3Mgbm90IGp1c3QgdGhlIE1UNzUzMDsgaXQgY292ZXJzIGEgZmFtaWx5IG9mIHRoZW0sIGluY2x1ZGluZyBNVDc1MzEsIE1UNzYyMSwgYW5kIHNvIG9uLiBUaGVzZSBhcmUgc3BlY2lmaWNhbGx5IFNvQy1pbnRlcm5hbCBFdGhlcm5ldCBzd2l0Y2hlcywgb3IgTURJTy9PRi1wcm9iZWQgZXh0ZXJuYWwgc3dpdGNoZXMsIGZvdW5kIG9uIHNwZWNpZmljIEFSTS9NSVBTIE1lZGlhVGVrL0Vjb05ldC9BaXJvaGEgU29Dcy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB4ODYvYW1kNjQgUUVNVSBlbnZpcm9ubWVudD8gIENhbiB3ZSBwcm9iZSBvciBlbXVsYXRlIHRoZXNlIERTQSBzd2l0Y2hlcyB3aXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYSBwcm9wZXJseSBjb25zdHJ1Y3RlZCBkZXZpY2UgdHJlZT9cblxuTGV0IG1lIHJldmlldyB0aGUgcmVhY2hhYmlsaXR5IGNyaXRlcmlhLiBUaGUgcHJpbWFyeSBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gVGhlIHByb21wdCBlbXBoYXNpemVzIHRoYXQgZnV6emluZyBzaG91bGQgb25seSB0YXJnZXQgY29kZSB0aGF0ICpjYW4qIGFjdHVhbGx5IHJ1biBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBtZWFuaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCBvciB0dW4vdGFwLiAgSWYgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBpdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcsIG5vIG1hdHRlciBob3cgY29tcGxleCB0aGUgbG9naWMuXG5cblRoZSBleGFtcGxlcyBvZiAqdW5yZWFjaGFibGUqIGhhcmR3YXJlIGFyZSBpbGx1bWluYXRpbmc6IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDcy9QQ0llIGNhcmRzIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUuICBBbHNvLCBjb2RlIHBhdGhzIHNwZWNpZmljIHRvIG5vbi10YXJnZXQgYXJjaGl0ZWN0dXJlcy5cblxuU28sIGhvdyBhcmUgdGhlc2UgTURJTyBhbmQgTU1JTyBEU0EgZHJpdmVycyBwcm9iZWQ/IENhbiBzeXprYWxsZXIgcHJvYmUgdGhlbT8gVGhlIGtleSBpcyB3aGV0aGVyIG9yIG5vdCBzeXprYWxsZXIgb3IgdXNlcnNwYWNlIGNhbiBwcm9iZSBPRiBwbGF0Zm9ybSBkZXZpY2VzIG9yIE1ESU8gZGV2aWNlcyBvbiBhbWQ2NCwgb3VyIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbkFuZCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIE9uIGFtZDY0LCBpcyB0aGVyZSBldmVuIGEgRFQvT0Ygb3IgdmlydHVhbCBNRElPIGJ1cyBvciBBQ1BJIHRhYmxlIGluc3RhbnRpYXRpbmcgYW4gYGVjb25ldCxlbjc1MTIyMWAgb3IgYG1lZGlhdGVrLG10NzUzMGA/IEkgbmVlZCB0byBjaGVjayB0aGUgZGV2aWNlIG1hdGNoaW5nLiBgbXQ3NTMwLW1kaW9gIGFuZCBgbXQ3NTMwLW1taW9gIHNlZW0gdG8gbWF0Y2ggb25seSB0aHJvdWdoIGBvZl9kZXZpY2VfaWRgIGVudHJpZXMsIHNwZWNpZmljYWxseSBgbXQ3NTMwX29mX21hdGNoW11gIGFuZCBgbXQ3OTg4X29mX21hdGNoW11gLiAgVGhhdCdzIERldmljZSBUcmVlIHRlcnJpdG9yeS4gTm8gcGxhdGZvcm0gZGV2aWNlIElEcywgbm8gQUNQSSBkZXZpY2UgSURzLCBubyBQQ0kgZGV2aWNlIElEcyDigJMgc3RyaWN0bHkgT0YgZGV2aWNlcy4gQW5kIHRoZXNlIGRldmljZXMgYXJlIGZvciBzcGVjaWZpYyBNZWRpYVRlay9FY29OZXQgU29DcywgdGhlIGxpa2VzIG9mIEVONzUxMjIxIGFuZCBNVDc2MjEsIHdoaWNoIGFyZSBNSVBTL0FSTS5cblxuVGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IEluIG91ciB4ODZfNjQvYW1kNjQgUUVNVS9HQ0Ugc2V0dXAsIHRoZXJlJ3Mgbm8gRGV2aWNlIFRyZWUgbm9kZXMgZm9yIHRoZXNlIE1lZGlhVGVrL0Vjb25ldCBzd2l0Y2hlcywgYW5kIHRoZXJlJ3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUgZWl0aGVyLiBUaGV5J3JlIGp1c3Qgbm90IHByZXNlbnQuXG5cbk5vdywgYSBmaW5hbCwgaG9wZWZ1bCB0aG91Z2h0OiBDb3VsZCB0aGVzZSBEU0Egc3dpdGNoZXMgYmUgKm1vY2thYmxlKj8gQ291bGQgd2UgcmVhY2ggdGhlbSB2aWEgc29tZSB2aXJ0dWFsIGludGVyZmFjZSBsaWtlIG5ldGRldnNpbSBvciBkc2FfbG9vcD8gSSBuZWVkIHRvIGtub3cgaWYgYGRzYV9sb29wYCBvciBtb2NrIGRyaXZlcnMgdXNlIGBtdDc1MzBgLiAgTGV0J3Mgc2VlOiBgZHNhX2xvb3BgIGlzIGEgZml4ZWQsIGR1bW15IGRyaXZlciBmb3IgdGVzdGluZyBEU0EsIHVzaW5nIGl0cyBvd24gc3dpdGNoIGRyaXZlciAoYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYCkuIEl0IGRvZXMgKm5vdCogdXRpbGl6ZSBgbXQ3NTMwLmNgLiBTbyB0aGF0J3Mgb3V0LiBJJ2xsIHZlcmlmeSB0aGlzIHdpdGggZ3JlcHBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNTowNS44MjQ2Mzc5NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjA4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzUzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE2NTMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXFx0Kz0gbXQ3NTMwLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTURJTykgKz0gbXQ3NTMwLW1kaW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NTUlPKSArPSBtdDc1MzAtbW1pby5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NjI4KSArPSBtdDc2Mjgub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTY6I2luY2x1ZGUgXFxcIm10NzUzMC5oXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxOTptdDc1MzBfcmVnbWFwX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjAte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjItXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTQzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo0NDptdDc1MzBfcmVnbWFwX3JlYWQodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDctXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTc2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Nzc6bXQ3NTMwX21kaW9fcmVnbWFwX2xvY2sodm9pZCAqbWRpb19sb2NrKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTgyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODM6bXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayh2b2lkICptZGlvX2xvY2spXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzIG10NzUzMF9yZWdtYXBfYnVzID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjg5OlxcdC5yZWdfd3JpdGUgPSBtdDc1MzBfcmVnbWFwX3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjkwOlxcdC5yZWdfcmVhZCA9IG10NzUzMF9yZWdtYXBfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05MS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9OTM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjk0Om10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk1LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo5NjpcXHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqbXQ3NTMxX3Bjc19jb25maWdbMl0gPSB7fTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05Ny1cXHRzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwMS1cXHRmb3IgKGkgPSBwcml2LVxcdTAwM2VwNV9zZ21paSA/IDAgOiAxOyBpIFxcdTAwM2MgMjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTAyOlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldID0gZGV2bV9remFsbG9jKHByaXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgcmVnbWFwX2NvbmZpZyksXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMDU6XFx0XFx0aWYgKCFtdDc1MzFfcGNzX2NvbmZpZ1tpXSkge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwNi1cXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTA5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExMDpcXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlbmFtZSA9IGkgPyBcXFwicG9ydDZcXFwiIDogXFxcInBvcnQ1XFxcIjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTE6XFx0XFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXFx1MDAzZXJlZ19iaXRzID0gMTY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTEyOlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2V2YWxfYml0cyA9IDMyO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExMzpcXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlcmVnX3N0cmlkZSA9IDQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE0OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2VyZWdfYmFzZSA9IE1UNzUzMV9TR01JSV9SRUdfQkFTRSg1ICsgaSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE1OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2VtYXhfcmVnaXN0ZXIgPSAweDE3YztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTY6XFx0XFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXFx1MDAzZWxvY2sgPSBtdDc1MzBfbWRpb19yZWdtYXBfbG9jaztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTc6XFx0XFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXFx1MDAzZXVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE4OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2Vsb2NrX2FyZyA9IFxcdTAwMjZwcml2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbG9jaztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIwOlxcdFxcdHJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsIHByaXYsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIxOlxcdFxcdFxcdFxcdFxcdCAgbXQ3NTMxX3Bjc19jb25maWdbaV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMi1cXHRcXHRpZiAoSVNfRVJSKHJlZ21hcCkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0MC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDE6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQzOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ0OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ2LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ny19O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0ODpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTA9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXFx0Lm1heF9yZWdpc3RlciA9IE1UNzUzMF9DUkVWLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NTpcXHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NjpcXHQudW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjItXFx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE2MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTc3OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXFx0cmMubG9ja19hcmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjE3OlxcdHByaXYtXFx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjE4LVxcdFxcdFxcdFxcdFxcdHByaXYsIFxcdTAwMjZyYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMjItXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX01UNzUzMSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjM6XFx0XFx0cHJpdi1cXHUwMDNlY3JlYXRlX3NnbWlpID0gbXQ3NTMxX2NyZWF0ZV9zZ21paTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMjQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjk6bXQ3NTMwX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMwLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMi1cXHRpbnQgcmV0ID0gMCwgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI0Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNDc6XFx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI1MzpzdGF0aWMgdm9pZCBtdDc1MzBfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1NC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY1OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXQ3NTMwX21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NjpcXHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NzpcXHQucmVtb3ZlID0gbXQ3NTMwX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XFx0LnNodXRkb3duID0gbXQ3NTMwX3NodXRkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI2OS1cXHQubWRpb2Rydi5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjcwOlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tZGlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbXQ3NTMwX29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI3NTptZGlvX21vZHVsZV9kcml2ZXIobXQ3NTMwX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEwOiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xMS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMzpcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTY6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTI4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTE4LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9MzE9bXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjMzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjQ0OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjcwOlxcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz03Mz1zdGF0aWMgdm9pZCBtdDc5ODhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc3LVxcdGlmIChwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4OlxcdFxcdG10NzUzMF9yZW1vdmVfY29tbW9uKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTgxPXN0YXRpYyB2b2lkIG10Nzk4OF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzo4MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTkzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10Nzk4OF9wbGF0Zm9ybV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05Ny1cXHQuZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4OlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tbWlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05OS1cXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBtdDc5ODhfb2ZfbWF0Y2gsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI2OiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjctXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxOnN0YXRpYyBzdHJ1Y3QgbXQ3NTN4X3BjcyAqcGNzX3RvX210NzUzeF9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtdDc1M3hfcGNzLCBwY3MpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNC19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzYtLyogU3RyaW5nLCBvZmZzZXQsIGFuZCByZWdpc3RlciBzaXplIGluIGJ5dGVzIGlmIGRpZmZlcmVudCBmcm9tIDQgYnl0ZXMgKi9cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgbXQ3NTMwX21pYltdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cXHRNSUJfREVTQygxLCBNVDc1MzBfUE9SVF9NSUJfVFhfRFJPUCwgXFxcIlR4RHJvcFxcXCIpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjM6bXQ3NTMwX211dGV4X2xvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02NC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9Njk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzA6bXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz03Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3OTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04MC1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTg4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTM6XFx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTE0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTE3OmNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExOC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjAtXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEzMDpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlxcdG10NzUzMF9tdXRleF91bmxvY2socHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTY1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE2Njpjb3JlX3NldChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTcxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNzg6bXQ3NTMwX2ZkYl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF9mZGJfY21kIGNtZCwgdTMyICpyc3ApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEwLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTE6c3RhdGljIHZvaWQgbXQ3NTMwX3BvcnRfZmFzdF9hZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjEzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTQtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMzE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjMyOm10NzUzMF9mZGJfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHN0cnVjdCBtdDc1MzBfZmRiICpmZGIpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjU4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjYwLVxcdFxcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjg4LS8qIFNldCB1cCBzd2l0Y2ggY29yZSBjbG9jayBmb3IgTVQ3NTMwICovXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxODptdDc1M3hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTMyOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzA6bXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMzMtXFx0dTMyIG5jcG8xLCBzc2NfZGVsdGEsIHh0YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzkxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM5MjptdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Mzk0OlxcdGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB4dGFsO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOTUtXFx0dTMyIHRvcF9zaWc7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NDc5PXN0YXRpYyBib29sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ4MDplbjc1MTIyMV90cmdtaWlfY2FsX29rKHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsIHUzMiByZWcsIGludCBjaGFuLCBpbnQgaSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00OTM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDk0OmVuNzUxMjIxX3RyZ21paV9jYWxpYnJhdGVfZGlyZWN0aW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqdHgsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG10NzUzMF9wcml2ICpyeCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNDk2LVxcdFxcdFxcdFxcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTU3Mz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NzQ6ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU3NS1cXHRcXHQgICAgICB1OCBjbGtfZHJ2bilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01ODk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkwOmVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjU5MTpcXHRcXHRcXHQgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKm9uZGllLCBpbnQgb25kaWVfcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTkyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02NzU9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Njc2Om10NzUzMF9jYWxfaW50ZXJzd2l0Y2hfdHJnbWlpKHN0cnVjdCBkc2FfcG9ydCAqZHApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjgwLVxcdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgxOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcGVlcjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjgzLVxcdHN0cnVjdCBkc2FfbGluayAqZGw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzI0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNTptdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzI2LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzI3OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3MzM6c3RhdGljIGludCBtdDc1MzBfcGh5X3JlYWRfYzIyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzM3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mzg6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzktXFx0XFx0XFx0XFx0dTE2IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03NDMtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjc0NDpzdGF0aWMgaW50IG10NzUzMF9waHlfcmVhZF9jNDUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ1LVxcdFxcdFxcdCAgICAgICBpbnQgZGV2YWQsIGludCByZWdudW0pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTA6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1MS1cXHRcXHRcXHRcXHRpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTc1Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjc1NzptdDc1MzFfaW5kX2M0NV9waHlfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1OC1cXHRcXHRcXHRpbnQgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTgwNz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjgwODptdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04MDktXFx0XFx0XFx0IGludCByZWdudW0sIHUxNiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg1Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjg1ODptdDc1MzFfaW5kX2MyMl9waHlfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg5ND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjg5NTptdDc1MzFfaW5kX2MyMl9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZ251bSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODk2LVxcdFxcdFxcdCB1MTYgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05MzE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzI6bXQ3NTN4X3BoeV9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTMzLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTM0OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTM1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTkzOT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0MDptdDc1M3hfcGh5X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2YWQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0MS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0MjpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NDc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NDg6bXQ3NTN4X3BoeV93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0OS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1MDpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk1MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTY6bXQ3NTN4X3BoeV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTU3LVxcdFxcdCAgICAgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTU4LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTU5OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTk2ND1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NjU6bXQ3NTMwX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2Ni1cXHRcXHQgICB1aW50OF90ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk3Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTczOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG10NzUzMF9taWIpOyBpKyspXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3NDpcXHRcXHRldGh0b29sX3B1dHMoXFx1MDAyNmRhdGEsIG10NzUzMF9taWJbaV0ubmFtZSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk3NS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTc3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3ODptdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk3OS1cXHRcXHQgICAgICAgdTMyIG9mZnNldCwgdTggc2l6ZSwgdWludDY0X3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTkyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5MzptdDc1MzBfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk0LVxcdFxcdFxcdCB1aW50NjRfdCAqZGF0YSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk1LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTk2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTc6XFx0Y29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyAqbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTgtXFx0aW50IGk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5OS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtdDc1MzBfbWliKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDE6XFx0XFx0bWliID0gXFx1MDAyNm10NzUzMF9taWJbaV07XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMDItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDM6XFx0XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBtaWItXFx1MDAzZW9mZnNldCwgbWliLVxcdTAwM2VzaXplLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDA0LVxcdFxcdFxcdFxcdCAgICAgICBkYXRhICsgaSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTAwOD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDk6bXQ3NTMwX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE0OlxcdHJldHVybiBBUlJBWV9TSVpFKG10NzUzMF9taWIpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE1LX1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNi1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAxNzpzdGF0aWMgdm9pZCBtdDc1MzBfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxOC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxOS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMjA6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjEtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyNi1cXHQgKi9cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyNzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9VTklDQVNULCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyOS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAzMDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9TSU5HTEVfQ09MTElTSU9OLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDMxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VTaW5nbGVDb2xsaXNpb25GcmFtZXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMzOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX01VTFRJUExFX0NPTExJU0lPTiwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM1LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM2OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1VOSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzctXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM5OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0JZVEVTLCAyLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQwLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0MjpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9BTElHTl9FUlIsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUFsaWdubWVudEVycm9ycyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDU6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfREVGRVJSRUQsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDYtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDg6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTEFURV9DT0xMSVNJT04sIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDktXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUxhdGVDb2xsaXNpb25zKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1MC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1MTpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDUyLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1My1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9CWVRFUywgMixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTYtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNTc6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElDQVNULCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU5LVxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyArPSBtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2MDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9CUk9BRENBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjEtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2My1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9NVUxUSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjUtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY2LVxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyArPSBtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNjc6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfQlJPQURDQVNULCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDcxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXQ3NTMwX3Jtb25fcmFuZ2VzW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNzMtXFx0eyAwLCA2NCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODEtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODI6c3RhdGljIHZvaWQgbXQ3NTMwX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDg2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDg4OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1VOREVSX1NJWkVfRVJSLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDg5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNldW5kZXJzaXplX3BrdHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDkwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX09WRVJfU1pfRVJSLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDkxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0cyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTI6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfRlJBR19FUlIsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwOTMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDk0OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0pBQkJFUl9FUlIsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwOTUtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VqYWJiZXJzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA5Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA5NzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNjQsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwOTgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzBdKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA5OTpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNjVfVE9fMTI3LCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTAwLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsxXSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDE6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfUEtUX1NaXzEyOF9UT18yNTUsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMDItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzJdKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEwMzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwNC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RbM10pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTA1OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwNi1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNF0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTA3OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1BLVF9TWl8xMDI0X1RPX01BWCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwOC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTA5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTEwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl82NCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExMS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMF0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTEyOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl82NV9UT18xMjcsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMTMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzFdKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTExNDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExNS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMl0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE2OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl8yNTZfVE9fNTExLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTE3LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMTg6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzUxMl9UT18xMDIzLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTE5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs0XSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMjA6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzEwMjRfVE9fTUFYLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTIxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs1XSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMjM6XFx0KnJhbmdlcyA9IG10NzUzMF9ybW9uX3JhbmdlcztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyNC19XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMjY6c3RhdGljIHZvaWQgbXQ3NTMwX3JlYWRfcG9ydF9zdGF0czY0KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0b3JhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEzNS1cXHQgKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6MDU6MDUuODczMjUxNTM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzQ4Mjg1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbXQ3NTMwYCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyBgbXQ3NTMwYC4uLiByaWdodCwgdGhhdCdzIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBkcml2ZXIuIFNwZWNpZmljYWxseSBmb3IgdGhhdCBNZWRpYVRlayBvciBFY29OZXQgc3dpdGNoIGhhcmR3YXJlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgb3IgcHJvYmUgdGhhdCB0aGluZyB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgaW4gdGhlIHN5c3RlbT8gWW91IGtub3csIHRoZSBraW5kIG9mIHNpdHVhdGlvbiB3aGVyZSB5b3UgbWlnaHQgZ2V0IGEgZmFsc2UgcG9zaXRpdmUgb3IgYW4gdW5leHBlY3RlZCBsb2FkaW5nLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkbyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uIEEgZGVlcCBkaXZlIGlzIG5lZWRlZCB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBzb21laG93IGJlaW5nIHJlZmVyZW5jZWQgb3IgY2FsbGVkIHdpdGhvdXQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNvbmRpdGlvbnMgYmVpbmcgbWV0LiBJIG5lZWQgdG8gY29tYiB0aHJvdWdoIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSB0cmVlLCBsb29raW5nIGZvciBhbnkgaW5zdGFuY2VzIG9mIGVpdGhlciBgbXQ3NTMwYCBvciBgbXQ3NTN4YCBiZWluZyBtZW50aW9uZWQgb3IgdXNlZC4gQW55IGNsdWVzIHdpbGwgYmUgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA1OjEwLjM0ODA4MTgyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjg5MzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc1MzB8bXQ3NTN4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTYzMiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMy0tLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbCNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9ODk9cHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTkzLSAgICAgICAgICBTdGFuZGFsb25lIE1UNzUzMCBhbmQgbXVsdGktY2hpcCBtb2R1bGUgTVQ3NTMwIGluIE1UNzYyM0FJIFNvQ1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjk0OiAgICAgICAgY29uc3Q6IG1lZGlhdGVrLG10NzUzMFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTk1LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MjI3PSRkZWZzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjM5LVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjI0MDogIG10NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydDpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0yNDEtICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjUzLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjI1NDogIG10NzUzMC1kc2EtcG9ydDpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0yNTUtICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MzA4PWFsbE9mOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzI2LSAgICAgICAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDozMjc6ICAgICAgICAgIGNvbnN0OiBtZWRpYXRlayxtdDc1MzBcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zMjgtICAgIHRoZW46XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzI5OiAgICAgICRyZWY6IFxcXCIjLyRkZWZzL210NzUzMC1kc2EtcG9ydFxcXCJcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zMzAtICAgICAgcmVxdWlyZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNDgtICAgIHRoZW46XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzQ5OiAgICAgICRyZWY6IFxcXCIjLyRkZWZzL210NzUzMC1kc2EtcG9ydFxcXCJcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNTAtICAgICAgcmVxdWlyZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNzQtICAgIHRoZW46XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6Mzc1OiAgICAgICRyZWY6IFxcXCIjLyRkZWZzL210NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydFxcXCJcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNzYtICAgICAgcmVxdWlyZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbD0zODE9ZXhhbXBsZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zOTAtICAgICAgICBzd2l0Y2hAMWYge1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjM5MTogICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzUzMFxcXCI7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzkyLSAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTQ1MS0gICAgICAgIHN3aXRjaEAxZiB7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6NDUyOiAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC00NTMtICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4MWZcXHUwMDNlO1xcbi0tXFxuTUFJTlRBSU5FUlM9MTY4MjE9UzpcXHRNYWludGFpbmVkXFxuTUFJTlRBSU5FUlM6MTY4MjI6RjpcXHRkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xcbk1BSU5UQUlORVJTOjE2ODIzOkY6XFx0ZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmNcXG5NQUlOVEFJTkVSUzoxNjgyNDpGOlxcdGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuKlxcbk1BSU5UQUlORVJTLTE2ODI1LUY6XFx0bmV0L2RzYS90YWdfbXRrLmNcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM2EuZHRzaT01MD1cXHRcXHRzd2l0Y2gwOiBzd2l0Y2hAMWYge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM2EuZHRzaTo1MTpcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzUzMFxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzYS5kdHNpLTUyLVxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tYmFuYW5hcGktYnBpLXIyLmR0cz0yMDM9XFx0XFx0c3dpdGNoQDFmIHtcXG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNuLWJhbmFuYXBpLWJwaS1yMi5kdHM6MjA0OlxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNuLWJhbmFuYXBpLWJwaS1yMi5kdHMtMjA1LVxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzPTE4OD1cXHRcXHRzd2l0Y2hAMWYge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzOjE4OTpcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzUzMFxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1yZmItZW1tYy5kdHMtMTkwLVxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXFx0Kz0gbXQ3NTMwLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTURJTykgKz0gbXQ3NTMwLW1kaW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NTUlPKSArPSBtdDc1MzAtbW1pby5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NjI4KSArPSBtdDc2Mjgub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTY6I2luY2x1ZGUgXFxcIm10NzUzMC5oXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxOTptdDc1MzBfcmVnbWFwX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjAte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjItXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTQzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo0NDptdDc1MzBfcmVnbWFwX3JlYWQodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDctXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTc2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Nzc6bXQ3NTMwX21kaW9fcmVnbWFwX2xvY2sodm9pZCAqbWRpb19sb2NrKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTgyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODM6bXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayh2b2lkICptZGlvX2xvY2spXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzIG10NzUzMF9yZWdtYXBfYnVzID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjg5OlxcdC5yZWdfd3JpdGUgPSBtdDc1MzBfcmVnbWFwX3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjkwOlxcdC5yZWdfcmVhZCA9IG10NzUzMF9yZWdtYXBfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05MS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9OTM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjk0Om10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTExNS1cXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlbWF4X3JlZ2lzdGVyID0gMHgxN2M7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE2OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2Vsb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE3OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2V1bmxvY2sgPSBtdDc1MzBfbWRpb19yZWdtYXBfdW5sb2NrO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTExOC1cXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlbG9ja19hcmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTE5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjEyMDpcXHRcXHRyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KHByaXYtXFx1MDAzZWRldiwgXFx1MDAyNm10NzUzMF9yZWdtYXBfYnVzLCBwcml2LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMS1cXHRcXHRcXHRcXHRcXHQgIG10NzUzMV9wY3NfY29uZmlnW2ldKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0MC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDE6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQzOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ0OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ2LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ny19O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0ODpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTA9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXFx0Lm1heF9yZWdpc3RlciA9IE1UNzUzMF9DUkVWLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NTpcXHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NjpcXHQudW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjItXFx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE2MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTc3OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXFx0cmMubG9ja19hcmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjE3OlxcdHByaXYtXFx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjE4LVxcdFxcdFxcdFxcdFxcdHByaXYsIFxcdTAwMjZyYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjk6bXQ3NTMwX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMwLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMi1cXHRpbnQgcmV0ID0gMCwgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI0Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNDc6XFx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI1MzpzdGF0aWMgdm9pZCBtdDc1MzBfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1NC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY1OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXQ3NTMwX21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NjpcXHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NzpcXHQucmVtb3ZlID0gbXQ3NTMwX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XFx0LnNodXRkb3duID0gbXQ3NTMwX3NodXRkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI2OS1cXHQubWRpb2Rydi5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjcwOlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tZGlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbXQ3NTMwX29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI3NTptZGlvX21vZHVsZV9kcml2ZXIobXQ3NTMwX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEwOiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xMS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMzpcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTY6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTI4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTE4LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9MzE9bXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjMzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjQ0OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjcwOlxcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz03Mz1zdGF0aWMgdm9pZCBtdDc5ODhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc3LVxcdGlmIChwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4OlxcdFxcdG10NzUzMF9yZW1vdmVfY29tbW9uKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTgxPXN0YXRpYyB2b2lkIG10Nzk4OF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzo4MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTkzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10Nzk4OF9wbGF0Zm9ybV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05Ny1cXHQuZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4OlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tbWlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05OS1cXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBtdDc5ODhfb2ZfbWF0Y2gsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI2OiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjctXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxOnN0YXRpYyBzdHJ1Y3QgbXQ3NTN4X3BjcyAqcGNzX3RvX210NzUzeF9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtdDc1M3hfcGNzLCBwY3MpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNC19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzYtLyogU3RyaW5nLCBvZmZzZXQsIGFuZCByZWdpc3RlciBzaXplIGluIGJ5dGVzIGlmIGRpZmZlcmVudCBmcm9tIDQgYnl0ZXMgKi9cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgbXQ3NTMwX21pYltdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cXHRNSUJfREVTQygxLCBNVDc1MzBfUE9SVF9NSUJfVFhfRFJPUCwgXFxcIlR4RHJvcFxcXCIpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjM6bXQ3NTMwX211dGV4X2xvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02NC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9Njk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzA6bXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz03Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3OTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04MC1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTg4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTM6XFx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTE0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTE3OmNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExOC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjAtXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEzMDpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlxcdG10NzUzMF9tdXRleF91bmxvY2socHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTY1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE2Njpjb3JlX3NldChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTcxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNzg6bXQ3NTMwX2ZkYl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF9mZGJfY21kIGNtZCwgdTMyICpyc3ApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEwLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTE6c3RhdGljIHZvaWQgbXQ3NTMwX3BvcnRfZmFzdF9hZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjEzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTQtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMzE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjMyOm10NzUzMF9mZGJfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHN0cnVjdCBtdDc1MzBfZmRiICpmZGIpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjU4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjYwLVxcdFxcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjg4LS8qIFNldCB1cCBzd2l0Y2ggY29yZSBjbG9jayBmb3IgTVQ3NTMwICovXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxODptdDc1M3hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTMyOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzA6bXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMzMtXFx0dTMyIG5jcG8xLCBzc2NfZGVsdGEsIHh0YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzkxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM5MjptdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00Nzk9c3RhdGljIGJvb2xcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDgwOmVuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy00ODEte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5Mz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo0OTQ6ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDk1OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy00OTYtXFx0XFx0XFx0XFx0ICAgIHU4ICpkZWZhdWx0X3RhcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTczPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjU3NDplbjc1MTIyMV9zZXRfdHhfZHJpdmUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1OCBkcnZwLCB1OCBkcnZuLCB1OCBjbGtfZHJ2cCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTc1LVxcdFxcdCAgICAgIHU4IGNsa19kcnZuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTU4OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1OTA6ZW43NTEyMjFfdHJnbWlpX3BhaXJfc2V0dXAoc3RydWN0IG10NzUzMF9wcml2ICpleHQsIGludCBleHRfcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkxOlxcdFxcdFxcdCAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01OTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTY3NT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2NzY6bXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02ODAtXFx0c3RydWN0IGRzYV9wb3J0ICpwZWVyX2RwO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODE6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwZWVyO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODI6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02ODMtXFx0c3RydWN0IGRzYV9saW5rICpkbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz03MjQ9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzI1Om10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjYte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mjc6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjczMzpzdGF0aWMgaW50IG10NzUzMF9waHlfcmVhZF9jMjIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjczODpzdGF0aWMgaW50IG10NzUzMF9waHlfd3JpdGVfYzIyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczOS1cXHRcXHRcXHRcXHR1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0My1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzQ0OnN0YXRpYyBpbnQgbXQ3NTMwX3BoeV9yZWFkX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03NDUtXFx0XFx0XFx0ICAgICAgIGludCBkZXZhZCwgaW50IHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03NDktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjc1MDpzdGF0aWMgaW50IG10NzUzMF9waHlfd3JpdGVfYzQ1KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzUxLVxcdFxcdFxcdFxcdGludCByZWdudW0sIHUxNiB2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzU2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzU3Om10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzU4LVxcdFxcdFxcdGludCByZWdudW0pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODA3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODA4Om10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwOS1cXHRcXHRcXHQgaW50IHJlZ251bSwgdTE2IGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODU3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODU4Om10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTg1OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODk0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODk1Om10NzUzMV9pbmRfYzIyX3BoeV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04OTYtXFx0XFx0XFx0IHUxNiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTkzMT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjkzMjptdDc1M3hfcGh5X3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzMte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzQ6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTM5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQwOm10NzUzeF9waHlfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTk0Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0ODptdDc1M3hfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQ5LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTUwOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTk1NT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1NjptdDc1M3hfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldmFkLCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTctXFx0XFx0ICAgICB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTk6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NjAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTY0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk2NTptdDc1MzBfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTY2LVxcdFxcdCAgIHVpbnQ4X3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTcyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NzM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc0OlxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgbXQ3NTMwX21pYltpXS5uYW1lKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05Nzc9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc4Om10NzUzMF9yZWFkX3BvcnRfc3RhdHMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc5LVxcdFxcdCAgICAgICB1MzIgb2Zmc2V0LCB1OCBzaXplLCB1aW50NjRfdCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05OTI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTkzOm10NzUzMF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTQtXFx0XFx0XFx0IHVpbnQ2NF90ICpkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTY6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5NzpcXHRjb25zdCBzdHJ1Y3QgbXQ3NTMwX21pYl9kZXNjICptaWI7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5OC1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDAwOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG10NzUzMF9taWIpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMTpcXHRcXHRtaWIgPSBcXHUwMDI2bXQ3NTMwX21pYltpXTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAwMi1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMzpcXHRcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIG1pYi1cXHUwMDNlb2Zmc2V0LCBtaWItXFx1MDAzZXNpemUsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMDQtXFx0XFx0XFx0XFx0ICAgICAgIGRhdGEgKyBpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMDA4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwOTptdDc1MzBfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTMtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMTQ6XFx0cmV0dXJuIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTUtfVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE3OnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE5LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyMDpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI2LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDI3OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1VOSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1NJTkdMRV9DT0xMSVNJT04sIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzEtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMzM6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElQTEVfQ09MTElTSU9OLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM0LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMzY6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfVU5JQ0FTVCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNy1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzgtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMzk6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfQllURVMsIDIsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDAtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDQyOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FMSUdOX0VSUiwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0My1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlQWxpZ25tZW50RXJyb3JzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0NC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0NTpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9ERUZFUlJFRCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0Ni1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0ODpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9MQVRFX0NPTExJU0lPTiwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0OS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlTGF0ZUNvbGxpc2lvbnMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDUwLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDUxOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDUzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDU0OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0JZVEVTLCAyLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU1LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNSZWNlaXZlZE9LKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9NVUxUSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTktXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LICs9IG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDYwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0JST0FEQ0FTVCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2MS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDYzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDY0OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX01VTFRJQ0FTVCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjYtXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNSZWNlaXZlZE9LICs9IG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9CUk9BRENBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNzEtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNzI6c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBtdDc1MzBfcm1vbl9yYW5nZXNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3My1cXHR7IDAsIDY0IH0sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA4MjpzdGF0aWMgdm9pZCBtdDc1MzBfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4My1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4NS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODY6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODctXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA1OjEyLjQ2MDk4NDE5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDc1MTk4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogTVQ3NTMwIEV0aGVybmV0IFN3aXRjaCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbGAgYW5kIHRoZSBgZHJpdmVycy9uZXQvZHNhL210NzUzMCpgIGRyaXZlci4gVGhpcyBpcyB0aGUgTWVkaWFUZWsvRWNvTmV0L0Fpcm9oYSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVyIGZvciB0aGVpciBlbWJlZGRlZCBTb0NzLCBzcGVjaWZpY2FsbHkgdGhlIE1UNzUzMC9NVDc1MzEvTVQ3NjIxL01UNzk4OC9FTjc1MTIyMSBhbmQgc2ltaWxhciBkZXZpY2VzLiBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgYW1kNjQuXG5cblRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbGlrZSBRRU1VIGFuZCBHQ0Ugb24gYW1kNjQsIHNpbXBseSAqZG9uJ3QqIGhhdmUgdGhpcyBzcGVjaWZpYyBNZWRpYVRlayBTb0Mgc3dpdGNoIGhhcmR3YXJlIHByZXNlbnQuIFRoZXJlIGFyZW4ndCBhbnkgcmVhZGlseSBhdmFpbGFibGUgbW9jayBkZXZpY2VzIG9yIHZpcnR1YWwgYnVzZXMgdG8gaW5zdGFudGlhdGUgYW5kIGJpbmQgdGhpcyBkcml2ZXIgb24gYW1kNjQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBNeSByZXZpZXcgb2Ygc2VjdGlvbiAyIGNsZWFybHkgc2hvd3MgYSBzdHJ1Y3R1cmFsIHByb2JsZW06IHRoZSBNVDc1MzAgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBBU0lDL1NvQy1pbnRlZ3JhdGVkIHN3aXRjaCwgYW5kIHRoZSBjaGFuZ2VzIGludm9sdmUgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCBJIGhhdmUgbm8gcmVhc29uIHRvIHRoaW5rIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciB0aGlzIGFyY2hpdGVjdHVyZS5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgc3RydWN0dXJhbCB1bnJlYWNoYWJpbGl0eSBvZiB0aGUgaGFyZHdhcmUsIEknbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSdtIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuIEknbGwgbmVlZCB0byBjbGVhcmx5IHN0YXRlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbnMgdG91Y2ggZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIHRoZSBNVDc1MzAvTVQ3NTMxL0VONzUxMjIxIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyLCBhbmQgdGhhdCB0aGlzIGhhcmR3YXJlIGlzbid0IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBNeSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBlbXB0eS5cblxuT2theSwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDAzMSwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6MDU6MjAuNTM2MTg1MDcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgRGV2aWNlIFRyZWUgYmluZGluZ3MgZG9jdW1lbnRhdGlvbiBhbmQgYWRkcyBzdXBwb3J0IGZvciBFY29OZXQgRU43NTEyMjEgU29DcyBhbmQgcGFzc3Rocm91Z2ggbW9kZSB0byB0aGUgTWVkaWFUZWsgTVQ3NTMwIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKikuIFRoaXMgZHJpdmVyIGNvbnRyb2xzIHNwZWNpZmljIHBoeXNpY2FsIE1lZGlhVGVrL0Vjb05ldCBTb0MgZXRoZXJuZXQgc3dpdGNoZXMgYW5kIE1ESU8vTU1JTyBkZXZpY2VzIHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIGFuZCBhZGRzIHN1cHBvcnQgZm9yIEVjb05ldCBFTjc1MTIyMSBTb0NzIGFuZCBwYXNzdGhyb3VnaCBtb2RlIHRvIHRoZSBNZWRpYVRlayBNVDc1MzAgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAqKS4gVGhpcyBkcml2ZXIgY29udHJvbHMgc3BlY2lmaWMgcGh5c2ljYWwgTWVkaWFUZWsvRWNvTmV0IFNvQyBldGhlcm5ldCBzd2l0Y2hlcyBhbmQgTURJTy9NTUlPIGRldmljZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA1OjIwLjUzNjIxMDgyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownc99q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 15:19:02 +0000 UTC FinishedAt: 2026-09-09 16:05:22 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgRGV2aWNlIFRyZWUgYmluZGluZ3MgZG9jdW1lbnRhdGlvbiBhbmQgYWRkcyBzdXBwb3J0IGZvciBFY29OZXQgRU43NTEyMjEgU29DcyBhbmQgcGFzc3Rocm91Z2ggbW9kZSB0byB0aGUgTWVkaWFUZWsgTVQ3NTMwIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKikuIFRoaXMgZHJpdmVyIGNvbnRyb2xzIHNwZWNpZmljIHBoeXNpY2FsIE1lZGlhVGVrL0Vjb05ldCBTb0MgZXRoZXJuZXQgc3dpdGNoZXMgYW5kIE1ESU8vTU1JTyBkZXZpY2VzIHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzhhNzI2ZTk2NmFkZDljMzAzZjM4Y2NmYjE5MTY3NWU4MTQwMjZlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTY6MDQ6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxuaW5kZXggOTBiMzU4MmI3NjE5MC4uMTA2YzQwODc1MjhkNyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxuQEAgLTI5LDYgJiM0MzsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfFxuICAgYW5kIHRoZSBzd2l0Y2ggcmVnaXN0ZXJzIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byBTb0MmIzM5O3MgbWVtb3J5IG1hcCByYXRoZXIgdGhhblxuICAgdXNpbmcgTURJTy4gVGhlIERTQSBkcml2ZXIgY3VycmVudGx5IGRvZXNuJiMzOTt0IHN1cHBvcnQgTVQ3NjIwIHZhcmlhbnRzLlxuIFxuJiM0MzsgIEVjb05ldCBFTjc1MTIyMSBTb0NzIGhhdmUgYSBtZW1vcnkgbWFwcGVkIE1UNzUzMCB3aXRoIDN4IDEwLzEwMCBQSFlzIGFuZCAxeFxuJiM0MzsgIGdpZ2FiaXQgUEhZLiBTb21lIEVONzUxMjIxIGNoaXBzIHN1Y2ggYXMgRU43NTEzRyBhbmQgRU43NTI2RyBoYXZlIGEgbXVsdGktY2hpcFxuJiM0MzsgIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTVQ3NTMwIGFzIHdlbGwgYXMgdGhlIG9uLWRpZSBzd2l0Y2guIEluIHRoZXNlXG4mIzQzOyAgcGFja2FnZXMsIHRoZSBtdWx0aS1jaGlwIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gcG9ydCA1IG9mIHRoZSBvbi1kaWUgc3dpdGNoXG4mIzQzOyAgdmlhIGEgVFJHTUlJIGxpbmsuXG4mIzQzO1xuICAgVGhlcmUgaXMgb25seSB0aGUgc3RhbmRhbG9uZSB2ZXJzaW9uIG9mIE1UNzUzMS5cbiBcbiAgIFBvcnQgNSBvbiBNVDc1MzAgc3VwcG9ydHMgdmFyaW91cyBjb25maWd1cmF0aW9uczpcbkBAIC03Myw2ICYjNDM7NzksMTMgQEAgZGVzY3JpcHRpb246IHxcbiBcbiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LlxuIFxuJiM0MzsgIFRoZSBNVDc1MzAgYW5kIE1UNzUzMSBzd2l0Y2hlcyBhcmUgY2FwYWJsZSBvZiBiZWluZyBvcGVyYXRlZCBpbiBcJiMzNDtwYXNzdGhyb3VnaFwmIzM0O1xuJiM0MzsgIG1vZGUuIEluIHRoaXMgbW9kZSwgdHJhZmZpYyBpcyB1bmNvbmRpdGlvbmFsbHkgcGFzc2VkIGJldHdlZW4gdGhlIENQVSBwb3J0XG4mIzQzOyAgYW5kIHRoZSBEU0EgcG9ydCB3aGljaCBsaW5rcyB0byBhIHNlY29uZCBzd2l0Y2guIFRvIHVzZSBwYXNzdGhyb3VnaCBtb2RlLCB0aGVcbiYjNDM7ICB1cHN0cmVhbSBzd2l0Y2ggaXMgY29uZmlndXJlZCB3aXRoIGEgRFNBIGxpbmsgdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLiBJblxuJiM0MzsgIHBhc3N0aHJvdWdoIG1vZGUgdGhlIHVwc3RyZWFtIHN3aXRjaCBpcyByZXN0cmljdGVkLCB3aXRoIG5vIG90aGVyIHBvcnRzIG9yXG4mIzQzOyAgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYWxsb3dlZC5cbiYjNDM7XG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuQEAgLTEwNCw2ICYjNDM7MTE3LDE0IEBAIHByb3BlcnRpZXM6XG4gICAgICAgICAgIEJ1aWx0LWluIHN3aXRjaCBvZiB0aGUgRWNvTmV0IEVONzUyOCBTb0NcbiAgICAgICAgIGNvbnN0OiBlY29uZXQsZW43NTI4LXN3aXRjaFxuIFxuJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIEVjb05ldCBFTjc1MTIyMSBTb0NcbiYjNDM7ICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxuJiM0MztcbiYjNDM7ICAgICAgLSBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgIE11bHRpLWNoaXAgbW9kdWxlIE1UNzUzMCBpbiBFTjc1MTIyMSBTb0NcbiYjNDM7ICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxXG4mIzQzO1xuICAgcmVnOlxuICAgICBtYXhJdGVtczogMVxuIFxuQEAgLTE1Myw4ICYjNDM7MTc0LDggQEAgcHJvcGVydGllczpcbiAgIG1lZGlhdGVrLG1jbTpcbiAgICAgdHlwZTogYm9vbGVhblxuICAgICBkZXNjcmlwdGlvbjpcbi0gICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCBhbmQgTVQ3NjIzQUkgU29DcyB3aGljaCB0aGUgTVQ3NTMwXG4tICAgICAgc3dpdGNoIGlzIGEgcGFydCBvZiB0aGUgbXVsdGktY2hpcCBtb2R1bGUuXG4mIzQzOyAgICAgIFVzZWQgZm9yIE1UNzYyMUFULCBNVDc2MjFEQVQsIE1UNzYyMVNULCBNVDc2MjNBSSBhbmQgRU43NTEyMjEgU29DcyB3aGljaFxuJiM0MzsgICAgICB0aGUgTVQ3NTMwIHN3aXRjaCBpcyBhIHBhcnQgb2YgdGhlIG11bHRpLWNoaXAgbW9kdWxlLlxuIFxuICAgcmVzZXQtZ3Bpb3M6XG4gICAgIGRlc2NyaXB0aW9uOiB8XG5AQCAtMjE2LDYgJiM0MzsyMzcsMjAgQEAgJGRlZnM6XG4gICAgICAgICAgICAgICAgIHBoeS1tb2RlOlxuICAgICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbFxuIFxuJiM0MzsgIG10NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydDpcbiYjNDM7ICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICBcJiMzNDteKGV0aGVybmV0LSk/cG9ydHMkXCYjMzQ7OlxuJiM0MzsgICAgICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgXCYjMzQ7XihldGhlcm5ldC0pP3BvcnRAWzAtNl0kXCYjMzQ7OlxuJiM0MzsgICAgICAgICAgICBpZjpcbiYjNDM7ICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF1cbiYjNDM7ICAgICAgICAgICAgdGhlbjpcbiYjNDM7ICAgICAgICAgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgICAgICAgICAgcmVnOlxuJiM0MzsgICAgICAgICAgICAgICAgICBjb25zdDogNlxuJiM0MzsgICAgICAgICAgICAgICAgcGh5LW1vZGU6XG4mIzQzOyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWlcbiYjNDM7XG4gICBtdDc1MzAtZHNhLXBvcnQ6XG4gICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuICAgICAgIFwmIzM0O14oZXRoZXJuZXQtKT9wb3J0cyRcJiMzNDs6XG5AQCAtMzIzLDYgJiM0MzszNTgsNyBAQCBhbGxPZjpcbiAgICAgICAgICAgICAtIGFpcm9oYSxlbjc1ODEtc3dpdGNoXG4gICAgICAgICAgICAgLSBhaXJvaGEsYW43NTgzLXN3aXRjaFxuICAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUyOC1zd2l0Y2hcbiYjNDM7ICAgICAgICAgICAgLSBlY29uZXQsZW43NTEyMjEtc3dpdGNoXG4gICAgIHRoZW46XG4gICAgICAgJHJlZjogXCYjMzQ7Iy8kZGVmcy9idWlsdGluLWRzYS1wb3J0XCYjMzQ7XG4gICAgICAgcHJvcGVydGllczpcbkBAIC0zMzAsNiAmIzQzOzM2NiwxNiBAQCBhbGxPZjpcbiAgICAgICAgIG1lZGlhdGVrLG1jbTogZmFsc2VcbiAgICAgICAgIHJlc2V0LW5hbWVzOiBmYWxzZVxuIFxuJiM0MzsgIC0gaWY6XG4mIzQzOyAgICAgIHByb3BlcnRpZXM6XG4mIzQzOyAgICAgICAgY29tcGF0aWJsZTpcbiYjNDM7ICAgICAgICAgIGVudW06XG4mIzQzOyAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUxMjIxXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICAkcmVmOiBcJiMzNDsjLyRkZWZzL210NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydFwmIzM0O1xuJiM0MzsgICAgICByZXF1aXJlZDpcbiYjNDM7ICAgICAgICAtIG1lZGlhdGVrLG1jbVxuJiM0MztcbiB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4gXG4gZXhhbXBsZXM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xuaW5kZXggMjRlZjU0ZjNkYjJhNi4uMmZkOTg3ZmY4NTEwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xuQEAgLTEzOSw2ICYjNDM7MTM5LDcgQEAgbXQ3NTMxX2NyZWF0ZV9zZ21paShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTEyMjFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NjIxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc2MjFdLCB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMwXSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc1MzFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuaW5kZXggY2YzYmRiMjNhMmQ1NC4uMWEyOWIxZWVmYjJjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OTg4X29mX21hdGNoW10gPSB7XG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGFuNzU4My1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG4mIzQzO1x0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1MTIyMS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc5ODgtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG5AQCAtNjEsNyAmIzQzOzYyLDEyIEBAIG10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbi1cdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKHByaXYtXHUwMDNlZHMpO1xuJiM0MztcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG10Nzk4OF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNcbmluZGV4IDI4Zjk0Y2QyNWI5NTUuLjZmZDQ3MTlhYWI4OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xuQEAgLTQ2LDYgJiM0Mzs0NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyBtdDc1MzBfbWliW10gPSB7XG4gXHRNSUJfREVTQygxLCBNVDc1MzBfUE9SVF9NSUJfUlhfQVJMX0RST1AsIFwmIzM0O1J4QXJsRHJvcFwmIzM0OyksXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0MzttdDc1M3hfY3RybF9waHlfYWRkcihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMSlcbiYjNDM7XHRcdHJldHVybiAxMjtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghcHJpdi1cdTAwM2VtZGlvZGV2KSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHQvKiBEZWZhdWx0IGlzIDFzdCBQSFkgKi9cbiYjNDM7XHRyZXR1cm4gKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyICYjNDM7IDEpIFx1MDAyNiAoUEhZX01BWF9BRERSIC0gMSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBtdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuQEAgLTYzLDMyICYjNDM7NzYsMzYgQEAgbXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gc3RhdGljIHZvaWRcbiBjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbiB7XG4mIzQzO1x0aW50IGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZWJ1cztcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKCFidXMpXG4mIzQzO1x0XHRidXMgPSBwcml2LVx1MDAzZWNoaWxkX2J1cztcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkZXNpcmVkIE1NRCBEZXZhZCAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCByZWcpO1xuJiM0MztcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgcmVnKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuJiM0MztcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksXG4gXHRcdFx0IE1JSV9NTURfQ1RSTCwgTURJT19NTURfVkVORDIgfCBNSUlfTU1EX0NUUkxfTk9JTkNSKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQmIzM5O3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCB2YWwpO1xuJiM0MztcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgdmFsKTtcbiBlcnI6XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRkZXZfZXJyKFx1MDAyNmJ1cy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcXG5cJiMzNDspO1xuQEAgLTk5LDMzICYjNDM7MTE2LDM3IEBAIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuIHN0YXRpYyB2b2lkXG4gY29yZV9ybXcoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHNldClcbiB7XG4mIzQzO1x0aW50IGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZWJ1cztcbiBcdHUzMiB2YWw7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmICghYnVzKVxuJiM0MztcdFx0YnVzID0gcHJpdi1cdTAwM2VjaGlsZF9idXM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWJ1cykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG4gXG4gXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4mIzQzO1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkZXNpcmVkIE1NRCByZWdpc3RlciBhZGRyZXNzICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0IE1JSV9NTURfREFUQSwgcmVnKTtcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHJlZyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFNlbGVjdCB0aGUgRnVuY3Rpb24gOiBEQVRBIHdpdGggbm8gcG9zdCBpbmNyZW1lbnQgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LFxuIFx0XHRcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXJlYWQoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0TUlJX01NRF9EQVRBKTtcbiYjNDM7XHRyZXQgPSBidXMtXHUwMDNlcmVhZChidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcdHZhbCA9IHJldDtcbkBAIC0xMzMsOCAmIzQzOzE1NCw3IEBAIGNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXG4gXHR2YWwgXHUwMDI2PSB+bWFzaztcbiBcdHZhbCB8PSBzZXQ7XG4gXHQvKiBXcml0ZSB0aGUgZGF0YSBpbnRvIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCBNSUlfTU1EX0RBVEEsIHZhbCk7XG4mIzQzO1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCB2YWwpO1xuIGVycjpcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGRldl9lcnIoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIG1tZCByZWdpc3RlclxcblwmIzM0Oyk7XG5AQCAtMzI3LDEyICYjNDM7MzQ3LDE5IEBAIG10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4gXHRyZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLCBcdTAwMjZ4dGFsKTtcbiBcdHh0YWwgXHUwMDI2PSBNVDc1MzBfWFRBTF9NQVNLO1xuIFxuJiM0MztcdC8qIEVONzUxMjIxIG9uLWRpZSBkb2VzIG5vdCByZXBvcnQgY2xvY2sgc3BlZWQgaW4gTVRSQVAgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMSlcbiYjNDM7XHRcdHh0YWwgPSBNVDc1MzBfWFRBTF8yNU1IWjtcbiYjNDM7XG4gXHRpZiAoeHRhbCA9PSBNVDc1MzBfWFRBTF8yNU1IWilcbiBcdFx0c3NjX2RlbHRhID0gMHg1NztcbiBcdGVsc2VcbiBcdFx0c3NjX2RlbHRhID0gMHg4NztcbiBcbi1cdGlmIChwcml2LVx1MDAzZWlkID09IElEX01UNzYyMSkge1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxX0VYVCB8fCBwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxKSB7XG4mIzQzO1x0XHQvKiBQTEwgZnJlcXVlbmN5OiAzNjIuNU1oeiAqL1xuJiM0MztcdFx0bmNwbzEgPSAweDFkMDA7XG4mIzQzO1x0fSBlbHNlIGlmIChwcml2LVx1MDAzZWlkID09IElEX01UNzYyMSkge1xuIFx0XHQvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi9cbiBcdFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXG4gXHRcdFx0bmNwbzEgPSAweDA2NDA7XG5AQCAtNDQ5LDYgJiM0Mzs0NzYsMjUxIEBAIG10NzUzMV9wbGxfc2V0dXAoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0dXNsZWVwX3JhbmdlKDI1LCAzNSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbFxuJiM0Mztlbjc1MTIyMV90cmdtaWlfY2FsX29rKHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsIHUzMiByZWcsIGludCBjaGFuLCBpbnQgaSlcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfcmVhZChyeC1cdTAwM2VyZWdtYXAsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUocngtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCB8IEVER0VfQ0hLKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUocngtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCBcdTAwMjYgfkVER0VfQ0hLKTtcbiYjNDM7XHRyZWdtYXBfcmVhZChyeC1cdTAwM2VyZWdtYXAsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIEZJRUxEX0dFVChSRF9WQUxVRV9NQVNLLCB2YWwpID09IFRHTUlJX1REX1BBVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgIUZJRUxEX0dFVChSRF9FUlJfTUFTSywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG10NzUzMF9wcml2ICpyeCxcbiYjNDM7XHRcdFx0XHQgICAgdTggKmRlZmF1bHRfdGFwcylcbiYjNDM7e1xuJiM0MztcdGludCBjaGFubmVsO1xuJiM0MztcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHModHgtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7XG4mIzQzO1xuJiM0MztcdC8qIFB1dCBmYWlsIHBhdHRlcm4gb24gZXZlcnkgY2hhbm5lbCAqL1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspXG4mIzQzO1x0XHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4mIzQzO1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFRHTUlJX1REX0ZBSUxfUEFUKSk7XG4mIzQzO1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiByeF9yZWcgPSBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpO1xuJiM0MztcdFx0aW50IGJlc3RfdGFwID0gLTEsIGJlc3RfcmFuZ2UgPSAtMTtcbiYjNDM7XHRcdGludCBmaXJzdCA9IC0xO1xuJiM0MztcdFx0dTggZGFjO1xuJiM0MztcdFx0Y2hhciBsb2dbVERfVEFQX01BWCAmIzQzOyAxXTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBQdXQgdGVzdCBwYXR0ZXJuIG9uIGNvcnJlY3QgY2hhbm5lbCAqL1xuJiM0MztcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxuJiM0MztcdFx0XHRcdCAgIFRHTUlJX1REX1BBVF9NQVNLLFxuJiM0MztcdFx0XHRcdCAgIEZJRUxEX1BSRVAoVEdNSUlfVERfUEFUX01BU0ssIFRHTUlJX1REX1BBVCkpO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoZGFjID0gMDsgZGFjIFx1MDAzYyBURF9UQVBfTUFYOyBkYWMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdC8qIFNldCBUQVAgKi9cbiYjNDM7XHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgIFJEX1RBUChkYWMpKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIENoZWNrIGlmIHdlIGNhbiBnZXQgYSBnb29kIHJlYWQgKi9cbiYjNDM7XHRcdFx0aWYgKGVuNzUxMjIxX3RyZ21paV9jYWxfb2socngsIHJ4X3JlZywgY2hhbm5lbCwgZGFjKSkge1xuJiM0MztcdFx0XHRcdGxvZ1tkYWNdID0gJiMzOTsmIzQzOyYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAoZmlyc3QgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0XHRmaXJzdCA9IGRhYztcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKChkYWMgLSBmaXJzdCkgXHUwMDNlIGJlc3RfcmFuZ2UpIHtcbiYjNDM7XHRcdFx0XHRcdGJlc3RfdGFwID0gKGZpcnN0ICYjNDM7IGRhYykgLyAyO1xuJiM0MztcdFx0XHRcdFx0YmVzdF9yYW5nZSA9IGRhYyAtIGZpcnN0O1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRsb2dbZGFjXSA9ICYjMzk7LiYjMzk7O1xuJiM0MztcdFx0XHRcdGZpcnN0ID0gLTE7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsb2dbVERfVEFQX01BWF0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdGlmIChiZXN0X3RhcCBcdTAwM2UgLTEpIHtcbiYjNDM7XHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgIFJEX1RBUChiZXN0X3RhcCkpO1xuJiM0MztcbiYjNDM7XHRcdFx0bG9nW2Jlc3RfdGFwXSA9ICYjMzk7WCYjMzk7O1xuJiM0MztcbiYjNDM7XHRcdFx0ZGV2X2luZm8ocngtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCBcJiMzNDtUUkdNSUkgbGFuZSAlZDogJXMgdGFwICVkIG9sZCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgY2hhbm5lbCwgbG9nLCBiZXN0X3RhcCwgZGVmYXVsdF90YXBzW2NoYW5uZWxdKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHJlZ21hcF91cGRhdGVfYml0cyhyeC1cdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICBSRF9UQVAoZGVmYXVsdF90YXBzW2NoYW5uZWxdKSk7XG4mIzQzO1xuJiM0MztcdFx0XHRkZXZfd2FybihyeC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O1RSR01JSSBsYW5lICVkOiAlcyBjYWxpYnJhdGlvbiBmYWlsZWQsIHByZXNlcnZpbmcgdGFwICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBjaGFubmVsLCBsb2csIGRlZmF1bHRfdGFwc1tjaGFubmVsXSk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogUmV0dXJuIGNoYW5uZWwgdG8gZmFpbHVyZSBwYXR0ZXJuICovXG4mIzQzO1x0XHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4mIzQzO1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4mIzQzO1x0XHRcdFx0ICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIFRHTUlJX1REX0ZBSUxfUEFUKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyh0eC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUUkFJTl9UWEVOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXG4mIzQzO1x0XHQgICAgICB1OCBjbGtfZHJ2bilcbiYjNDM7e1xuJiM0MztcdGludCBjaGFubmVsO1xuJiM0MztcbiYjNDM7XHQvKiBUeCBkcml2aW5nIGZvciBUUkdNSUkgcGF0aCBvbiBTb0MgKi9cbiYjNDM7XHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwmIzQzOyYjNDM7KVxuJiM0MztcdFx0cmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1REX09EVChjaGFubmVsKSxcbiYjNDM7XHRcdFx0ICAgICBURF9ETV9EUlZQKGRydnApIHwgVERfRE1fRFJWTihkcnZuKSk7XG4mIzQzO1xuJiM0MztcdC8qIFVuZG9jdW1lbnRlZCA2dGggY2hhbm5lbCwgcHJvYmFibHkgZHJpdmUgc3RyZW5ndGggZm9yIGNsb2NrIGxpbmUuICovXG4mIzQzO1x0cmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1REX09EVCg1KSwgVERfRE1fRFJWUChkcnZwKSB8XG4mIzQzO1x0XHQgICAgIFREX0RNX0RSVk4oZHJ2bikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mztlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKmV4dCwgaW50IGV4dF9wb3J0LFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKm9uZGllLCBpbnQgb25kaWVfcG9ydClcbiYjNDM7e1xuJiM0MztcdHU4IGRlZmF1bHRfdGFwc19vbmRpZVtOVU1fVFJHTUlJX0NUUkxdO1xuJiM0MztcdHU4IGRlZmF1bHRfdGFwc19leHRbTlVNX1RSR01JSV9DVFJMXTtcbiYjNDM7XHR1MzIgbWNyX2Rvd24sIG1jcl91cDtcbiYjNDM7XHRpbnQgY2hhbm5lbDtcbiYjNDM7XHRpbnQgcmVnX3ZhbDtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUHV0IGludGVyZmFjZXMgaW4gYSBkb3duZWQgc3RhdGUgKi9cbiYjNDM7XHRtY3JfZG93biA9IFBNQ1JfSUZHX1hNSVQoUE1DUl9JRkdfWE1JVF82NCkgfCBQTUNSX01BQ19NT0RFIHxcbiYjNDM7XHRcdCAgIE1UNzUzMF9GT1JDRV9NT0RFIHwgUE1DUl9NQUNfUlhfRU4gfCBQTUNSX0JBQ0tPRkZfRU4gfFxuJiM0MztcdFx0ICAgUE1DUl9CQUNLUFJfRU4gfCBQTUNSX0ZPUkNFX1NQRUVEXzEwMDAgfCBQTUNSX0ZPUkNFX0ZEWDtcbiYjNDM7XHRyZWdtYXBfd3JpdGUob25kaWUtXHUwMDNlcmVnbWFwLCAgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX2Rvd24pO1xuJiM0MztcdHJlZ21hcF93cml0ZShleHQtXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKGV4dF9wb3J0KSwgbWNyX2Rvd24pO1xuJiM0MztcdHVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUmVzZXQgVFggKi9cbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4mIzQzO1x0cmVnbWFwX3NldF9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4mIzQzO1x0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xuJiM0MztcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xuJiM0MztcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4mIzQzO1xuJiM0MztcdC8qIEJPVEg6IFJlc2V0IFJYIGNvbnRyb2xsZXJzIGRvd24gKi9cbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTtcbiYjNDM7XHRyZWdtYXBfc2V0X2JpdHMob25kaWUtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpO1xuJiM0MztcbiYjNDM7XHQvKiBCT1RIOiBTZXQgVFggZHJpdmUgc3RyZW5ndGgsIE1DTSB1c2VzIG1vcmUgKi9cbiYjNDM7XHRlbjc1MTIyMV9zZXRfdHhfZHJpdmUob25kaWUsIDgsIDgsIDcsIDcpO1xuJiM0MztcdGVuNzUxMjIxX3NldF90eF9kcml2ZShleHQsIDExLCAxMSwgMTYsIDE2KTtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi9cbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpO1xuJiM0MztcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTtcbiYjNDM7XG4mIzQzO1x0LyogQk9USDogUG9ydHMgdXAgKi9cbiYjNDM7XHRtY3JfdXAgPSBtY3JfZG93biB8IFBNQ1JfTUFDX1RYX0VOIHwgUE1DUl9GT1JDRV9MTks7XG4mIzQzO1x0cmVnbWFwX3dyaXRlKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX3VwKTtcbiYjNDM7XHRyZWdtYXBfd3JpdGUoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChleHRfcG9ydCksIG1jcl91cCk7XG4mIzQzO1xuJiM0MztcdC8qIE1DTTogU2V0IEV4dC1cdTAwM2VTb0MgVFggZGVsYXkgdG8gMCAqL1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspXG4mIzQzO1x0XHRyZWdtYXBfY2xlYXJfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4mIzQzO1x0XHRcdFx0ICBUR01JSV9URF9UQVBfTUFTSyk7XG4mIzQzO1xuJiM0MztcdC8qIFNPQzogT0RUICovXG4mIzQzO1x0cmVnbWFwX3NldF9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfUlRULFxuJiM0MztcdFx0XHREUVMxX0dBVEUgfCBEUVMwX0dBVEUgfCBFTjc1MTIyMV9CMTcpO1xuJiM0MztcbiYjNDM7XHQvKiBTT0M6IFVuZG9jdW1lbnRlZCAqL1xuJiM0MztcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspXG4mIzQzO1x0XHRyZWdtYXBfd3JpdGUob25kaWUtXHUwMDNlcmVnbWFwLCAgKDB4N2ExNCAmIzQzOyBjaGFubmVsICogOCksXG4mIzQzO1x0XHRcdCAgICAgMHgzMjI3NzAwKTtcbiYjNDM7XG4mIzQzO1x0LyogTUNNOiBTcHJlYWQgc3BlY3RydW0gY2xvY2sqL1xuJiM0MztcdGNvcmVfY2xlYXIoZXh0LCBDT1JFX1BMTF9HUk9VUDgsIFJHX0xDRERTX1NTQ19FTik7XG4mIzQzO1xuJiM0MztcdC8qIEJPVEg6IFplcm8gY2xvY2sgZGVsYXkgKi9cbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLFxuJiM0MztcdFx0XHQgIERRU0kwX1RBUF9NQVNLKTtcbiYjNDM7XHRyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsXG4mIzQzO1x0XHRcdCAgRFFTSTBfVEFQX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBCT1RIOiBDb2xsZWN0IGFuZCB0aGVuIHplcm8gZXZlcnkgUlggVEFQICovXG4mIzQzO1x0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVnX3ZhbCA9IDA7XG4mIzQzO1x0XHRyZWdtYXBfcmVhZChleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLCBcdTAwMjZyZWdfdmFsKTtcbiYjNDM7XHRcdGRlZmF1bHRfdGFwc19leHRbY2hhbm5lbF0gPSBGSUVMRF9HRVQoUkRfVEFQX01BU0ssIHJlZ192YWwpO1xuJiM0MztcdFx0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSxcbiYjNDM7XHRcdFx0XHQgIFJEX1RBUF9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfdmFsID0gMDtcbiYjNDM7XHRcdHJlZ21hcF9yZWFkKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSwgXHUwMDI2cmVnX3ZhbCk7XG4mIzQzO1x0XHRkZWZhdWx0X3RhcHNfb25kaWVbY2hhbm5lbF0gPSBGSUVMRF9HRVQoUkRfVEFQX01BU0ssIHJlZ192YWwpO1xuJiM0MztcdFx0cmVnbWFwX2NsZWFyX2JpdHMob25kaWUtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLFxuJiM0MztcdFx0XHRcdCAgUkRfVEFQX01BU0spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24ob25kaWUsIGV4dCwgZGVmYXVsdF90YXBzX2V4dCk7XG4mIzQzO1x0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oZXh0LCBvbmRpZSwgZGVmYXVsdF90YXBzX2V4dCk7XG4mIzQzO1xuJiM0MztcdGRldl9pbmZvKG9uZGllLVx1MDAzZWRldiwgXCYjMzQ7VFJHTUlJIGludGVyLXN3aXRjaCBsaW5rIGluaXRpYWxpemVkXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7bXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpwZWVyX2RzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcbiYjNDM7XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnBlZXI7XG4mIzQzO1x0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuJiM0MztcdHN0cnVjdCBkc2FfbGluayAqZGw7XG4mIzQzO1x0dTMyIHBtc3IgPSAwO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoZHAtXHUwMDNldHlwZSAhPSBEU0FfUE9SVF9UWVBFX0RTQSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmVnbWFwX3JlYWQocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QTVNSX1AoZHAtXHUwMDNlaW5kZXgpLCBcdTAwMjZwbXNyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCEocG1zciBcdTAwMjYgUE1TUl9MSU5LKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShkbCwgXHUwMDI2ZHMtXHUwMDNlZHN0LVx1MDAzZXJ0YWJsZSwgbGlzdCkge1xuJiM0MztcdFx0aWYgKGRsLVx1MDAzZWRwICE9IGRwKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RwID0gZGwtXHUwMDNlbGlua19kcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGVlcl9kcC1cdTAwM2V0eXBlICE9IERTQV9QT1JUX1RZUEVfRFNBKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyX2RzID0gZGwtXHUwMDNlbGlua19kcC1cdTAwM2VkcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBlZXJfZHMtXHUwMDNlZGV2LVx1MDAzZW9mX25vZGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIFwmIzM0O2Vjb25ldCxlbjc1MTIyMS1zd2l0Y2hcJiMzNDspKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwZWVyID0gcGVlcl9kcy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZWVyLVx1MDAzZWlkICE9IElEX0VONzUxMjIxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChwcml2LCBkcC1cdTAwM2VpbmRleCwgcGVlcixcbiYjNDM7XHRcdFx0XHRcdCAgIHBlZXJfZHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIG10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbkBAIC0xMjgxLDEzICYjNDM7MTU1Myw0MSBAQCBtdDc1M3hfdHJhcF9mcmFtZXMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0XHRcdFx0ICAgVE9fQ1BVX0ZXX0NQVV9PTkxZKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7bXQ3NTMwX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbmV3X210dSk7XG4mIzQzO1xuJiM0MzsvKiBJZiB0aGlzIHN3aXRjaCBpcyBkb3duc3RyZWFtIG9mIGFub3RoZXIgc3dpdGNoIHRoYXQgaXMgaW4gcGFzc3Rocm91Z2ggbW9kZSxcbiYjNDM7ICogdGhlIFwmIzM0O0NQVVwmIzM0OyBwb3J0IGlzIGFjdHVhbGx5IGEgRFNBIHBvcnQuXG4mIzQzOyAqL1xuIHN0YXRpYyB2b2lkXG4gbXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuIHtcbiBcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXG4tXHQvKiBFbmFibGUgTWVkaWF0ZWsgaGVhZGVyIG1vZGUgb24gdGhlIGNwdSBwb3J0ICovXG4tXHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSwgUE9SVF9TUEVDX1RBRyk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2gpIHtcbiYjNDM7XHRcdC8qIERpc2FibGUgcGFyc2luZyBvZiB0aGUgRFNBIHRhZywgaXQgd2lsbCBiZSBmb3J3YXJkZWQgYmxpbmRseVxuJiM0MztcdFx0ICogdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSxcbiYjNDM7XHRcdFx0ICAgICBWTEFOX0FUVFIoTVQ3NTMwX1ZMQU5fVFJBTlNQQVJFTlQpIHxcbiYjNDM7XHRcdFx0ICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIHBvcnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gcGFyc2UgRFNBIHRhZ3MsIHNvIHRoZXkgYXJlXG4mIzQzO1x0XHQgKiBsaWFibGUgdG8gYmUgY29uZnVzZWQgZm9yIGxlbmd0aCBmaWVsZHMsIHNvIGxlbmd0aCBjaGVjayBpc1xuJiM0MztcdFx0ICogZGlzYWJsZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlZ21hcF9jbGVhcl9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1M1hfQUdDLCBBR0NfTDJMRU5fQ0hLKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbiBwYXNzdGhyb3VnaCBtb2RlLCBNVFUgaXMgb25seSBlbmZvcmNlZCBkb3duc3RyZWFtICovXG4mIzQzO1x0XHRtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KGRzLCBwb3J0LCBNVDc1MzBfTUFYX01UVSk7XG4mIzQzO1xuJiM0MztcdFx0LyogTG9vcCBkZXRlY3Rpb24gaGFzIG5vIHZhbHVlIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cbiYjNDM7XHRcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLFxuJiM0MztcdFx0XHRcdE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogTm90IHBhc3N0aHJvdWdoLCBlbmFibGUgRFNBIHRhZyBoYW5kbGluZyBvbiBDUFUgcG9ydC4gKi9cbiYjNDM7XHRcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBFbmFibGUgZmxvb2Rpbmcgb24gdGhlIENQVSBwb3J0ICovXG4gXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzWF9NRkMsXG5AQCAtMTMxNyw2ICYjNDM7MTYxNyw3IEBAIHN0YXRpYyBpbnRcbiBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdFx0ICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiB7XG4mIzQzO1x0aW50IHVwc3RyZWFtX3B0ID0gZHNhX3N3aXRjaF91cHN0cmVhbV9wb3J0KGRzKTtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFxuQEAgLTEzMjcsMTcgJiM0MzsxNjI4LDQzIEBAIG10NzUzMF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ICogYnJpZGdlLlxuIFx0ICovXG4gXHRpZiAoZHNhX3BvcnRfaXNfdXNlcihkcCkpIHtcbi1cdFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHAgPSBkcC1cdTAwM2VjcHVfZHA7XG4mIzQzO1x0XHRwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKHVwc3RyZWFtX3B0KSk7XG4mIzQzO1xuJiM0MztcdH0gZWxzZSBpZiAoZHNhX3BvcnRfaXNfZHNhKGRwKSBcdTAwMjZcdTAwMjYgZHAtXHUwMDNlaW5kZXggIT0gdXBzdHJlYW1fcHQpIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBTaG91bGQgbm90IGhhcHBlbiAqL1xuJiM0MztcdFx0V0FSTl9PTl9PTkNFKCFwcml2LVx1MDAzZWlzX3Bhc3N0aHJvdWdoKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBXZSBhcmUgcGFzc2luZyB0aHJvdWdoIHRvIGEgZG93bnN0cmVhbSBzd2l0Y2ggc28gd2Ugc2V0IGJvdGhcbiYjNDM7XHRcdCAqIENQVSBhbmQgZG93bnN0cmVhbSBsaW5rIHRvIHBhc3MgdHJhZmZpYyB1bnRvdWNoZWQgc28gdGhhdFxuJiM0MztcdFx0ICogdGhlIFNUQUcgZnJvbSB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggd2lsbCBwYXNzIHRvIHRoZSB1cHN0cmVhbS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmVnbWFwX3dyaXRlKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksXG4mIzQzO1x0XHRcdCAgICAgVkxBTl9BVFRSKE1UNzUzMF9WTEFOX1RSQU5TUEFSRU5UKSB8XG4mIzQzO1x0XHRcdCAgICAgUFZDX0VHX1RBRyhNVDc1MzBfVkxBTl9FR19ESVNBQkxFRCkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi9cbiYjNDM7XHRcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01GQywgQkNfRkZQKEJJVChwb3J0KSkgfFxuJiM0MztcdFx0XHRcdFVOTV9GRlAoQklUKHBvcnQpKSB8IFVOVV9GRlAoQklUKHBvcnQpKSk7XG4gXG4tXHRcdHByaXYtXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQoY3B1X2RwLVx1MDAzZWluZGV4KSk7XG4mIzQzO1x0XHQvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuXG4mIzQzO1x0XHQgKiBUaGlzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBQT1JUX1NQRUNfVEFHIGlzIHVuc2V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QQ1JfUCh1cHN0cmVhbV9wdCksXG4mIzQzO1x0XHRcdCAgICAgUENSX01BVFJJWChCSVQocG9ydCkpKTtcbiBcdH1cbiBcdHByaXYtXHUwMDNlcG9ydHNbcG9ydF0uZW5hYmxlID0gdHJ1ZTtcbi1cdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BDUl9QKHBvcnQpLCBQQ1JfTUFUUklYX01BU0ssXG4tXHRcdFx0ICAgcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSk7XG4mIzQzO1xuJiM0MztcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIENQVSBwb3J0IG1hc2sgaXMgc2V0IGFib3ZlLiAqL1xuJiM0MztcdGlmICghKHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2ggXHUwMDI2XHUwMDI2IGRwLVx1MDAzZWluZGV4ID09IHVwc3RyZWFtX3B0KSlcbiYjNDM7XHRcdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BDUl9QKHBvcnQpLFxuJiM0MztcdFx0XHRcdCAgIFBDUl9NQVRSSVhfTUFTSywgcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSk7XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc1MzAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxX0VYVClcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAocG9ydCA9PSA1KVxuQEAgLTEzNjQsNyAmIzQzOzE2OTEsOCBAQCBtdDc1MzBfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc1MzAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxX0VYVClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogRG8gbm90IHNldCBNVDc1MzBfUDVfRElTIHdoZW4gcG9ydCA1IGlzIGJlaW5nIHVzZWQgZm9yIFBIWSBtdXhpbmcuICovXG5AQCAtMTM4NSw3ICYjNDM7MTcxMyw3IEBAIG10NzUzMF9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXG4gXHQgKiBsYXJnZXN0IE1UVSBvZiB0aGUgdXNlciBwb3J0cy4gQmVjYXVzZSB0aGUgc3dpdGNoIG9ubHkgaGFzIGEgZ2xvYmFsXG4gXHQgKiBSWCBsZW5ndGggcmVnaXN0ZXIsIG9ubHkgYWxsb3dpbmcgQ1BVIHBvcnQgaGVyZSBpcyBlbm91Z2guXG4gXHQgKi9cbi1cdGlmICghZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSlcbiYjNDM7XHRpZiAoIWRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBwb3J0KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRyZWdtYXBfcmVhZChwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX0dNQUNDUiwgXHUwMDI2dmFsKTtcbkBAIC0yMzMzLDcgJiM0MzsyNjYxLDcgQEAgbXQ3NTMwX2ZyZWVfbWRpb19pcnEoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50XG4mIzQzO2ludFxuIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucCwgKm5wID0gcHJpdi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbkBAIC0yMzQzLDYgJiM0MzsyNjcxLDEwIEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdHN0YXRpYyBpbnQgaWR4O1xuIFx0aW50IHJldCA9IDA7XG4gXG4mIzQzO1x0LyogQWxyZWFkeSBkb25lICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlY2hpbGRfYnVzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0bW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuIFxuIFx0aWYgKG1ucCBcdTAwMjZcdTAwMjYgIW9mX2RldmljZV9pc19hdmFpbGFibGUobW5wKSlcbkBAIC0yMzcwLDggJiM0MzsyNzAyLDExIEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdGlmIChwcml2LVx1MDAzZWlycV9kb21haW4gXHUwMDI2XHUwMDI2ICFtbnApXG4gXHRcdG10NzUzMF9zZXR1cF9tZGlvX2lycShwcml2KTtcbiBcbiYjNDM7XHRwcml2LVx1MDAzZWNoaWxkX2J1cyA9IGJ1cztcbiYjNDM7XG4gXHRyZXQgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMsIG1ucCk7XG4gXHRpZiAocmV0KSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWNoaWxkX2J1cyA9IE5VTEw7XG4gXHRcdGRldl9lcnIoZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIFx0XHRpZiAocHJpdi1cdTAwM2VpcnFfZG9tYWluIFx1MDAyNlx1MDAyNiAhbW5wKVxuIFx0XHRcdG10NzUzMF9mcmVlX21kaW9faXJxKHByaXYpO1xuQEAgLTIzODEsNiAmIzQzOzI3MTYsNyBAQCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gXHRvZl9ub2RlX3B1dChtbnApO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG10NzUzMF9zZXR1cF9tZGlvKTtcbiBcbiBzdGF0aWMgaW50XG4gbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbkBAIC0yNDA2LDExICYjNDM7Mjc0Miw2IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0aWYgKCFkbikge1xuLVx0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCYjMzQ7cGFyZW50IE9GIG5vZGUgb2YgRFNBIGNvbmR1aXQgbm90IGZvdW5kXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4gXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4gXHRkcy1cdTAwM2V1bnRhZ192bGFuX2F3YXJlX2JyaWRnZV9wdmlkID0gdHJ1ZTtcbiBcdGRzLVx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcbkBAIC0yNDg5LDYgJiM0MzsyODIwLDEyIEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdFx0ICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX1BIWV9JTkRJUkVDVF9BQ0NFU1MsXG4gXHRcdFx0ICAgTVQ3NTMwX0NIR19UUkFQKTtcbiBcbiYjNDM7XHQvKiBFTjc1MTIyMSBNQ00gc3RhcnRzIG9uIHRoZSB3cm9uZyBmcmVxdWVuY3kgKi9cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMV9FWFQpXG4mIzQzO1x0XHRyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzWF9NVFJBUCxcbiYjNDM7XHRcdFx0XHQgICBNVDc1MzBfQ0hHX1RSQVAgfCBNVDc1MzBfQ0tfU0VMLFxuJiM0MztcdFx0XHRcdCAgIE1UNzUzMF9DSEdfVFJBUCk7XG4mIzQzO1xuIFx0aWYgKCh2YWwgXHUwMDI2IE1UNzUzMF9YVEFMX01BU0spID09IE1UNzUzMF9YVEFMXzQwTUhaKVxuIFx0XHRtdDc1MzBfcGxsX3NldHVwKHByaXYpO1xuIFxuQEAgLTI1MTIsNyAmIzQzOzI4NDksNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHQvKiBEaXNhYmxlIGxlYXJuaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovXG4gXHRcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BTQ19QKGkpLCBTQV9ESVMpO1xuIFxuLVx0XHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkge1xuJiM0MztcdFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xuIFx0XHRcdG10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xuQEAgLTI1MzYsNyAmIzQzOzI4NzMsNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogQ2hlY2sgZm9yIFBIWSBtdXhpbmcgb24gcG9ydCA1ICovXG4tXHRpZiAoZHNhX2lzX3VudXNlZF9wb3J0KGRzLCA1KSkge1xuJiM0MztcdGlmIChkbiBcdTAwMjZcdTAwMjYgZHNhX2lzX3VudXNlZF9wb3J0KGRzLCA1KSkge1xuIFx0XHQvKiBTY2FuIHRoZSBldGhlcm5ldCBub2Rlcy4gTG9vayBmb3IgR01BQzEsIGxvb2t1cCB0aGUgdXNlZCBQSFkuXG4gXHRcdCAqIFNldCBwcml2LVx1MDAzZXA1X21vZGUgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGlmIFBIWSBtdXhpbmcgaXNcbiBcdFx0ICogZGV0ZWN0ZWQuXG5AQCAtMjYzNiw3ICYjNDM7Mjk3Myw3IEBAIG10NzUzMV9zZXR1cF9jb21tb24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMV9EQkdfQ05UKGkpLFxuIFx0XHRcdFx0TVQ3NTMxX0RJU19DTFIpO1xuIFxuLVx0XHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkge1xuJiM0MztcdFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xuIFx0XHRcdG10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xuQEAgLTI2NzQsOCAmIzQzOzMwMTEsMTEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0dTMyIHZhbCwgaWQ7XG4mIzQzO1x0aW50IGN0bF9waHk7XG4gXHRpbnQgcmV0LCBpO1xuIFxuJiM0MztcdGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTtcbiYjNDM7XG4gXHQvKiBSZXNldCB3aG9sZSBjaGlwIHRocm91Z2ggZ3BpbyBwaW4gb3IgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgZm9yXG4gXHQgKiBkaWZmZXJlbnQgdHlwZSBvZiBoYXJkd2FyZVxuIFx0ICovXG5AQCAtMjc0MywyNSAmIzQzOzMwODMsMjEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdCAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duXG4gXHQgKiBtdDc1MzFfaW5kX21tZF9waHlfW3JlYWQsd3JpdGVdIHRvIGNvbXBsZXRlIHRoaXMgZnVuY3Rpb24uXG4gXHQgKi9cbi1cdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsXG4tXHRcdFx0XHQgICAgICBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0XHQgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0KTtcbiYjNDM7XHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZChwcml2LCBjdGxfcGh5LCBNRElPX01NRF9WRU5EMixcbiYjNDM7XHRcdFx0XHQgICAgICBDT1JFX1BMTF9HUk9VUDQpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHZhbCA9IHJldDtcbiBcdHZhbCB8PSBNVDc1MzFfUkdfU1lTUExMX0RNWTIgfCBNVDc1MzFfUEhZX1BMTF9CWVBBU1NfTU9ERTtcbiBcdHZhbCBcdTAwMjY9IH5NVDc1MzFfUEhZX1BMTF9PRkY7XG4tXHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdixcbi1cdFx0XHRcdCAgICAgICBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0XHQgICAgICAgTURJT19NTURfVkVORDIsIENPUkVfUExMX0dST1VQNCwgdmFsKTtcbiYjNDM7XHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsXG4mIzQzO1x0XHRcdFx0ICAgICAgIENPUkVfUExMX0dST1VQNCwgdmFsKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBEaXNhYmxlIEVFRSBhZHZlcnRpc2VtZW50IG9uIHRoZSBzd2l0Y2ggUEhZcy4gKi9cbi1cdGZvciAoaSA9IE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKTtcbi1cdCAgICAgaSBcdTAwM2MgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpICYjNDM7IE1UNzUzMF9OVU1fUEhZUztcbi1cdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSBjdGxfcGh5OyBpIFx1MDAzYyBjdGxfcGh5ICYjNDM7IE1UNzUzMF9OVU1fUEhZUzsgaSYjNDM7JiM0MzspIHtcbiBcdFx0bXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsIGksIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYsXG4gXHRcdFx0XHRcdCAwKTtcbiBcdH1cbkBAIC0yOTEwLDYgJiM0MzszMjQ2LDQ0IEBAIHN0YXRpYyB2b2lkIGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHBvcnQpIHtcbiYjNDM7XHQvKiBFTjc1MTIyMSBwb3J0cyAwLi4zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVncmF0ZWQgRkUgUEhZcy4gKi9cbiYjNDM7XHRjYXNlIDAgLi4uIDM6XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuJiM0MztcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHQvKiBQb3J0IDQgaXMgY29ubmVjdGVkIHRvIHRoZSBzdGFuZGFsb25lIEVONzUxMi9FTjc1MjEgR1BIWS4gKi9cbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuJiM0MztcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0LyogUG9ydCA1IGlzIHRoZSAxIEdiaXQvcyBUUkdNSUkgY2FzY2FkZSB0byB0aGUgZXh0ZXJuYWwgTVQ3NTMwLiAqL1xuJiM0MztcdGNhc2UgNTpcbiYjNDM7XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJLFxuJiM0MztcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHQvKiBQb3J0IDYgaXMgdGhlIDEgR2JpdC9zIENQVSBsaW5rIHRvIEdETTEuICovXG4mIzQzO1x0Y2FzZSA2OlxuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcbiYjNDM7XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWRcbiBtdDc1MzBfbWFjX2NvbmZpZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0ICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuQEAgLTMwNTksNiAmIzQzOzM0MzMsOSBAQCBzdGF0aWMgdm9pZCBtdDc1M3hfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdH1cbiBcbiBcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC1cdTAwM2VpbmRleCksIG1jcik7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSlcbiYjNDM7XHRcdG10NzUzMF9jYWxfaW50ZXJzd2l0Y2hfdHJnbWlpKGRwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NTN4X3BoeWxpbmtfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuQEAgLTMyOTgsMTAgJiM0MzszNjc1LDExIEBAIG10NzUzeF9jb25kdWl0X3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4gXG4gXHQvKiBTZXQgdGhlIENQVSBwb3J0IHRvIHRyYXAgZnJhbWVzIHRvIGZvciBNVDc1MzAuIFRyYXBwZWQgZnJhbWVzIHdpbGwgYmVcbiBcdCAqIGZvcndhcmRlZCB0byB0aGUgbnVtZXJpY2FsbHkgc21hbGxlc3QgQ1BVIHBvcnQgd2hvc2UgY29uZHVpdFxuLVx0ICogaW50ZXJmYWNlIGlzIHVwLlxuJiM0MztcdCAqIGludGVyZmFjZSBpcyB1cC4gTk9URTogXCYjMzQ7Q1BVIHBvcnRcJiMzNDsgY2FuIGFsc28gbWVhbiBhbiB1cHN0cmVhbSBEU0EgbGluay5cbiBcdCAqL1xuIFx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSBcdTAwMjZcdTAwMjZcbi1cdCAgICBwcml2LVx1MDAzZWlkICE9IElEX0VONzUyOClcbiYjNDM7XHQgICAgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MjggXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtYXNrID0gQklUKGNwdV9kcC1cdTAwM2VpbmRleCk7XG5AQCAtMzM5Myw2ICYjNDM7Mzc3MSw3NiBAQCBzdGF0aWMgaW50IG10Nzk4OF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRyZXR1cm4gbXQ3NTMxX3NldHVwX2NvbW1vbihkcyk7XG4gfVxuIFxuJiM0MzsvKiAxIGlmIHBhc3N0aHJvdWdoLCBuZWdhdGl2ZSBpZiBlcnJvci4gKi9cbiYjNDM7c3RhdGljIGludCBtdDc1M3hfY2hlY2tfcGFzc3Rocm91Z2goc3RydWN0IGRldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cywgKnBvcnQ7XG4mIzQzO1x0aW50IHBhc3N0aHJvdWdoX3BvcnRzID0gMDtcbiYjNDM7XHRpbnQgZW5hYmxlZF9wb3J0cyA9IDA7XG4mIzQzO1xuJiM0MztcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3BvcnRzXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIXBvcnRzKVxuJiM0MztcdFx0cG9ydHMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXHUwMDNlb2Zfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcG9ydHNcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBvcnRzKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7bm8gcG9ydHMgY2hpbGQgbm9kZSBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBvcnRzLCBwb3J0KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmxpbms7XG4mIzQzO1xuJiM0MztcdFx0ZW5hYmxlZF9wb3J0cyYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXCYjMzQ7ZXRoZXJuZXRcJiMzNDssIDApO1xuJiM0MztcdFx0aWYgKCFsaW5rKVxuJiM0MztcdFx0XHRsaW5rID0gb2ZfcGFyc2VfcGhhbmRsZShwb3J0LCBcJiMzNDtsaW5rXCYjMzQ7LCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWxpbmspXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdG9mX25vZGVfcHV0KGxpbmspO1xuJiM0MztcbiYjNDM7XHRcdHBhc3N0aHJvdWdoX3BvcnRzJiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9mX25vZGVfcHV0KHBvcnRzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBIHN3aXRjaCBpcyBjb25zaWRlcmVkIHBhc3N0aHJvdWdoIGlmIGV4YWN0bHkgdHdvIGF2YWlsYWJsZVxuJiM0MztcdCAqIHBvcnRzIGhhdmUgYW4gXCYjMzQ7ZXRoZXJuZXRcJiMzNDsgb3IgXCYjMzQ7bGlua1wmIzM0OyBwaGFuZGxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwYXNzdGhyb3VnaF9wb3J0cyBcdTAwM2UgMiB8fFxuJiM0MztcdCAgICAocGFzc3Rocm91Z2hfcG9ydHMgPT0gMiBcdTAwMjZcdTAwMjYgZW5hYmxlZF9wb3J0cyAhPSAyKVxuJiM0MztcdCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O09ubHkgdHdvIHBvcnRzIGFsbG93ZWQgaW4gcGFzc3Rocm91Z2ggbW9kZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYXNzdGhyb3VnaF9wb3J0cyA9PSAyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBObyBtYW5pcHVsYXRpb24gb2YgZm9yd2FyZGluZyBydWxlcyBhbGxvd2VkIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHtcbiYjNDM7XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdGtfZ2V0X3RhZ19wcm90b2NvbCxcbiYjNDM7XHQuc2V0dXBcdFx0XHQ9IG10NzUzeF9zZXR1cCxcbiYjNDM7XHQudGVhcmRvd25cdFx0PSBtdDc1M3hfdGVhcmRvd24sXG4mIzQzO1x0LnByZWZlcnJlZF9kZWZhdWx0X2xvY2FsX2NwdV9wb3J0ID0gbXQ3NTN4X3ByZWZlcnJlZF9kZWZhdWx0X2xvY2FsX2NwdV9wb3J0LFxuJiM0MztcdC5nZXRfc3RyaW5nc1x0XHQ9IG10NzUzMF9nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLFxuJiM0MztcdC5nZXRfc3NldF9jb3VudFx0XHQ9IG10NzUzMF9nZXRfc3NldF9jb3VudCxcbiYjNDM7XHQuZ2V0X2V0aF9tYWNfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGhfbWFjX3N0YXRzLFxuJiM0MztcdC5nZXRfcm1vbl9zdGF0c1x0XHQ9IG10NzUzMF9nZXRfcm1vbl9zdGF0cyxcbiYjNDM7XHQuZ2V0X2V0aF9jdHJsX3N0YXRzXHQ9IG10NzUzMF9nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO1x0LmdldF9zdGF0czY0XHRcdD0gbXQ3NTMwX2dldF9zdGF0czY0LFxuJiM0MztcdC5wb3J0X2VuYWJsZVx0XHQ9IG10NzUzMF9wb3J0X2VuYWJsZSxcbiYjNDM7XHQucG9ydF9kaXNhYmxlXHRcdD0gbXQ3NTMwX3BvcnRfZGlzYWJsZSxcbiYjNDM7XHQucGh5bGlua19nZXRfY2Fwc1x0PSBtdDc1M3hfcGh5bGlua19nZXRfY2FwcyxcbiYjNDM7XHQuc3VwcG9ydF9lZWVcdFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxuJiM0MztcdC5zZXRfbWFjX2VlZVx0XHQ9IG10NzUzeF9zZXRfbWFjX2VlZSxcbiYjNDM7XHQuY29uZHVpdF9zdGF0ZV9jaGFuZ2VcdD0gbXQ3NTN4X2NvbmR1aXRfc3RhdGVfY2hhbmdlLFxuJiM0Mzt9O1xuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzUzMF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF90YWdfcHJvdG9jb2xcdD0gbXRrX2dldF90YWdfcHJvdG9jb2wsXG4gXHQuc2V0dXBcdFx0XHQ9IG10NzUzeF9zZXR1cCxcbkBAIC0zNTE5LDE0ICYjNDM7Mzk2Nyw0MCBAQCBjb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gbXQ3NTN4X3RhYmxlW10gPSB7XG4gXHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlLFxuIFx0XHQubWFjX3BvcnRfZ2V0X2NhcHMgPSBlbjc1MjhfbWFjX3BvcnRfZ2V0X2NhcHMsXG4gXHR9LFxuJiM0MztcdFtJRF9FTjc1MTIyMV0gPSB7XG4mIzQzO1x0XHQuaWQgPSBJRF9FTjc1MTIyMSxcbiYjNDM7XHRcdC5wY3Nfb3BzID0gXHUwMDI2bXQ3NTMwX3Bjc19vcHMsXG4mIzQzO1x0XHQuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsXG4mIzQzO1x0XHQucGh5X3JlYWRfYzIyID0gbXQ3NTMxX2luZF9jMjJfcGh5X3JlYWQsXG4mIzQzO1x0XHQucGh5X3dyaXRlX2MyMiA9IG10NzUzMV9pbmRfYzIyX3BoeV93cml0ZSxcbiYjNDM7XHRcdC5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCxcbiYjNDM7XHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlLFxuJiM0MztcdFx0Lm1hY19wb3J0X2dldF9jYXBzID0gZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMsXG4mIzQzO1x0XHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXG4mIzQzO1x0fSxcbiYjNDM7XHRbSURfRU43NTEyMjFfRVhUXSA9IHtcbiYjNDM7XHRcdC5pZCA9IElEX0VONzUxMjIxX0VYVCxcbiYjNDM7XHRcdC5wY3Nfb3BzID0gXHUwMDI2bXQ3NTMwX3Bjc19vcHMsXG4mIzQzO1x0XHQuc3dfc2V0dXAgPSBtdDc1MzBfc2V0dXAsXG4mIzQzO1x0XHQucGh5X3JlYWRfYzIyID0gbXQ3NTMwX3BoeV9yZWFkX2MyMixcbiYjNDM7XHRcdC5waHlfd3JpdGVfYzIyID0gbXQ3NTMwX3BoeV93cml0ZV9jMjIsXG4mIzQzO1x0XHQucGh5X3JlYWRfYzQ1ID0gbXQ3NTMwX3BoeV9yZWFkX2M0NSxcbiYjNDM7XHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMwX3BoeV93cml0ZV9jNDUsXG4mIzQzO1x0XHQubWFjX3BvcnRfZ2V0X2NhcHMgPSBtdDc1MzBfbWFjX3BvcnRfZ2V0X2NhcHMsXG4mIzQzO1x0XHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXG4mIzQzO1x0fSxcbiB9O1xuIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7XG4gXG4gaW50XG4gbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuJiM0MztcdGludCBwYXNzdGhyb3VnaCA9IG10NzUzeF9jaGVja19wYXNzdGhyb3VnaChwcml2LVx1MDAzZWRldik7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LVx1MDAzZWRldjtcbiBcbiYjNDM7XHRpZiAocGFzc3Rocm91Z2ggXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcGFzc3Rocm91Z2g7XG4mIzQzO1xuIFx0cHJpdi1cdTAwM2VkcyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdi1cdTAwM2VkcyksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFwcml2LVx1MDAzZWRzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0zNTQ0LDcgJiM0Mzs0MDE4LDE0IEBAIG10NzUzMF9wcm9iZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0cHJpdi1cdTAwM2VpZCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VpZDtcbiBcdHByaXYtXHUwMDNlZGV2ID0gZGV2O1xuIFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbi1cdHByaXYtXHUwMDNlZHMtXHUwMDNlb3BzID0gXHUwMDI2bXQ3NTMwX3N3aXRjaF9vcHM7XG4mIzQzO1xuJiM0MztcdGlmIChwYXNzdGhyb3VnaCkge1xuJiM0MztcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VvcHMgPSBcdTAwMjZtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcztcbiYjNDM7XHRcdHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2ggPSB0cnVlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRwcml2LVx1MDAzZWRzLVx1MDAzZW9wcyA9IFx1MDAyNm10NzUzMF9zd2l0Y2hfb3BzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwcml2LVx1MDAzZWRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNm10NzUzeF9waHlsaW5rX21hY19vcHM7XG4gXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcmVnX211dGV4KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oXG5pbmRleCAyYmJiZTYxN2I1MmVlLi4xYTQzMjk3NDljMGYxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcbkBAIC0yNCw2ICYjNDM7MjQsOCBAQCBlbnVtIG10NzUzeF9pZCB7XG4gXHRJRF9FTjc1ODEgPSA0LFxuIFx0SURfQU43NTgzID0gNSxcbiBcdElEX0VONzUyOCA9IDYsXG4mIzQzO1x0SURfRU43NTEyMjEgPSA3LFxuJiM0MztcdElEX0VONzUxMjIxX0VYVCA9IDgsXG4gfTtcbiBcbiAjZGVmaW5lXHROVU1fVFJHTUlJX0NUUkxcdFx0XHQ1XG5AQCAtNDAsNiAmIzQzOzQyLDcgQEAgZW51bSBtdDc1M3hfaWQge1xuIC8qIFJlZ2lzdGVyIGZvciBBUkwgZ2xvYmFsIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1UNzUzWF9BR0NcdFx0XHQweGNcbiAjZGVmaW5lICBMT0NBTF9FTlx0XHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBBR0NfTDJMRU5fQ0hLXHRcdFx0QklUKDQpXG4gXG4gLyogUmVnaXN0ZXIgZm9yIE1BQyBmb3J3YXJkIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1UNzUzWF9NRkNcdFx0XHQweDEwXG5AQCAtMzU1LDYgJiM0MzszNTgsOSBAQCBlbnVtIG10NzUzMF92bGFuX3BvcnRfYWNjX2ZybSB7XG4gI2RlZmluZSBNVDc1M1hfUE1DUl9QKHgpXHRcdCgweDMwMDAgJiM0MzsgKCh4KSAqIDB4MTAwKSlcbiAjZGVmaW5lICBQTUNSX0lGR19YTUlUX01BU0tcdFx0R0VOTUFTSygxOSwgMTgpXG4gI2RlZmluZSAgUE1DUl9JRkdfWE1JVCh4KVx0XHRGSUVMRF9QUkVQKFBNQ1JfSUZHX1hNSVRfTUFTSywgeClcbiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzk2XHRcdDBcbiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUX1JBTkRcdFx0MVxuJiM0MzsjZGVmaW5lICAgIFBNQ1JfSUZHX1hNSVRfNjRcdFx0MlxuICNkZWZpbmUgIFBNQ1JfRVhUX1BIWVx0XHRcdEJJVCgxNylcbiAjZGVmaW5lICBQTUNSX01BQ19NT0RFXHRcdFx0QklUKDE2KVxuICNkZWZpbmUgIE1UNzUzMF9GT1JDRV9NT0RFXHRcdEJJVCgxNSlcbkBAIC01ODMsNiAmIzQzOzU4OSw4IEBAIGVudW0gbXQ3NTMxX2Nsa19za2V3IHtcbiAjZGVmaW5lIE1UNzUzWF9NVFJBUFx0XHRcdDB4NzgwNFxuICNkZWZpbmUgIE1UNzUzMF9QNV9QSFkwX1NFTFx0XHRCSVQoMjApXG4gI2RlZmluZSAgTVQ3NTMwX0NIR19UUkFQXHRcdEJJVCgxNilcbiYjNDM7I2RlZmluZSAgTVQ3NTMwX0NLX1NFTFx0XHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgTVQ3NTMwX0xPT1BfREVUX0RJU0FCTEVcdEJJVCgxNClcbiAjZGVmaW5lICBNVDc1MzBfUDVfTUFDX1NFTFx0XHRCSVQoMTMpXG4gI2RlZmluZSAgTVQ3NTMwX1A2X0RJU1x0XHRcdEJJVCg4KVxuICNkZWZpbmUgIE1UNzUzMF9QNV9SR01JSV9NT0RFXHRcdEJJVCg3KVxuQEAgLTU5OSw2ICYjNDM7NjA3LDggQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcbiAvKiBSZWdpc3RlciBmb3IgVE9QIHNpZ25hbCBjb250cm9sICovXG4gI2RlZmluZSBNVDc1MzBfVE9QX1NJR19DVFJMXHRcdDB4NzgwOFxuICNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9OT1JNQUxcdFx0KEJJVCgxNykgfCBCSVQoMTYpKVxuJiM0MzsvKiBVbmRvY3VtZW50ZWQgKi9cbiYjNDM7I2RlZmluZSAgVE9QX1NJR19DVFJMX0IwXHRcdEJJVCgwKVxuIFxuICNkZWZpbmUgTVQ3NTMxX1RPUF9TSUdfU1JcdFx0MHg3ODBjXG4gI2RlZmluZSAgUEFEX0RVQUxfU0dNSUlfRU5cdFx0QklUKDEpXG5AQCAtNjQ1LDE4ICYjNDM7NjU1LDMxIEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1JDS19SVFRcdFx0MHg3YTA0XG4gI2RlZmluZSAgRFFTMV9HQVRFXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIERRUzBfR0FURVx0XHRcdEJJVCgzMClcbiYjNDM7LyogVW5kb2N1bWVudGVkICovXG4mIzQzOyNkZWZpbmUgIEVONzUxMjIxX0IxN1x0XHRcdEJJVCgxNylcbiBcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkQoeClcdFx0KDB4N2ExMCAmIzQzOyAoeCkgKiA4KVxuICNkZWZpbmUgIEJTTElQX0VOXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIEVER0VfQ0hLXHRcdFx0QklUKDMwKVxuJiM0MzsjZGVmaW5lICBSRF9WQUxVRV9NQVNLXHRcdFx0R0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgIFJEX0VSUl9NQVNLXHRcdFx0R0VOTUFTSygxMSwgOClcbiAjZGVmaW5lICBSRF9UQVBfTUFTS1x0XHRcdEdFTk1BU0soNiwgMClcbiAjZGVmaW5lICBSRF9UQVAoeClcdFx0XHRGSUVMRF9QUkVQKFJEX1RBUF9NQVNLLCB4KVxuJiM0MzsvKiBUcmFpbmluZyBkb2VzIG5vdCB0cnkgYW55dGhpbmcgYmV5b25kIHRoaXMgKi9cbiYjNDM7I2RlZmluZSAgVERfVEFQX01BWFx0XHRcdDY0XG4gXG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1RYQ1RSTFx0XHQweDdhNDBcbiAjZGVmaW5lICBUUkFJTl9UWEVOXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIFRYQ19JTlZcdFx0XHRCSVQoMzApXG4gI2RlZmluZSAgVFhfUlNUXHRcdFx0XHRCSVQoMjgpXG4gXG4mIzQzOyNkZWZpbmUgRU43NTMwX1RSR01JSV9URF9DVFJMKHgpXHQoMHg3YTUwICYjNDM7ICh4KSAqIDgpXG4mIzQzOyNkZWZpbmUgICBUR01JSV9URF9UQVBfTUFTS1x0XHRHRU5NQVNLKDExLCA4KVxuJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfUEFUX01BU0tcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsvKiBVc2UgYSAwMTAxMDEwMSBiaXQgcGF0dGVybiAqL1xuJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfUEFUXHRcdFx0MHg1NVxuJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfRkFJTF9QQVRcdFx0MHhhYVxuJiM0MztcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfVERfT0RUKGkpXHRcdCgweDdhNTQgJiM0MzsgOCAqIChpKSlcbiAjZGVmaW5lICBURF9ETV9EUlZQX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuICNkZWZpbmUgIFREX0RNX0RSVlAoeClcdFx0XHRGSUVMRF9QUkVQKFREX0RNX0RSVlBfTUFTSywgeClcbkBAIC03NDcsOCAmIzQzOzc3MCw2IEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSAgTVQ3NTMxX1BIWV9QTExfT0ZGXHRcdEJJVCg1KVxuICNkZWZpbmUgIE1UNzUzMV9QSFlfUExMX0JZUEFTU19NT0RFXHRCSVQoNClcbiBcbi0jZGVmaW5lIE1UNzUzWF9DVFJMX1BIWV9BRERSKGFkZHIpXHQoKChhZGRyKSAmIzQzOyAxKSBcdTAwMjYgKFBIWV9NQVhfQUREUiAtIDEpKVxuLVxuICNkZWZpbmUgQ09SRV9QTExfR1JPVVA1XHRcdFx0MHg0MDRcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzFfTUFTS1x0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzEoeClcdFx0RklFTERfUFJFUChSR19MQ0REU19QQ1dfTkNQTzFfTUFTSywgeClcbkBAIC03NjQsNiAmIzQzOzc4NSw5IEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSAgUkdfTENDRFNfQyh4KVx0XHRcdEZJRUxEX1BSRVAoUkdfTENDRFNfQ19NQVNLLCB4KVxuICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPX0NIR1x0XHRCSVQoMylcbiBcbiYjNDM7I2RlZmluZSBDT1JFX1BMTF9HUk9VUDhcdFx0XHQweDQwN1xuJiM0MzsjZGVmaW5lICBSR19MQ0REU19TU0NfRU5cdFx0QklUKDEwKVxuJiM0MztcbiAjZGVmaW5lIENPUkVfUExMX0dST1VQMTBcdFx0MHg0MDlcbiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEFfTUFTS1x0R0VOTUFTSygxMSwgMClcbiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEEoeClcdFx0RklFTERfUFJFUChSR19MQ0REU19TU0NfREVMVEFfTUFTSywgeClcbkBAIC04ODYsNiAmIzQzOzkxMCw5IEBAIHN0cnVjdCBtdDc1M3hfaW5mbyB7XG4gICogQGRldjpcdFx0VGhlIGRldmljZSBwb2ludGVyXG4gICogQGRzOlx0XHRcdFRoZSBwb2ludGVyIHRvIHRoZSBkc2EgY29yZSBzdHJ1Y3R1cmVcbiAgKiBAYnVzOlx0XHRUaGUgYnVzIHVzZWQgZm9yIHRoZSBkZXZpY2UgYW5kIGJ1aWx0LWluIFBIWVxuJiM0MzsgKiBAY2hpbGRfYnVzOlx0XHRUaGUgYnVzIGNyZWF0ZWQgYnkgdGhlIGRldmljZSwgb24gTURJTyBpbXBsZW1lbnRhdGlvbnNcbiYjNDM7ICpcdFx0XHR0aGlzIGlzIGJ1cyBpbmRpcmVjdGx5IGFjY2Vzc2VzIGBidXNgLCBvbiBNTUlPXG4mIzQzOyAqXHRcdFx0aW1wbGVtZW50YXRpb25zIHRoaXMgYnVzIGlzIHBhcnQgb2YgdGhlIHN3aXRjaC5cbiAgKiBAcmVnbWFwOlx0XHRUaGUgcmVnbWFwIGluc3RhbmNlIHJlcHJlc2VudGluZyBhbGwgc3dpdGNoIHJlZ2lzdGVyc1xuICAqIEByc3RjOlx0XHRUaGUgcG9pbnRlciB0byByZXNldCBjb250cm9sIHVzZWQgYnkgTUNNXG4gICogQGNvcmVfcHdyOlx0XHRUaGUgcG93ZXIgc3VwcGxpZWQgaW50byB0aGUgY29yZVxuQEAgLTg5OSw2ICYjNDM7OTI2LDkgQEAgc3RydWN0IG10NzUzeF9pbmZvIHtcbiAgKiBAcDVfbW9kZTpcdFx0SG9sZGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHBvcnQgNSBvZiB0aGUgTVQ3NTMwIHN3aXRjaFxuICAqIEBwNV9zZ21paTpcdFx0RmxhZyBmb3IgZGlzdGluZ3Vpc2hpbmcgaWYgcG9ydCA1IG9mIHRoZSBNVDc1MzEgc3dpdGNoXG4gICpcdFx0XHRoYXMgZ290IFNHTUlJXG4mIzQzOyAqIEBpc19wYXNzdGhyb3VnaDpcdElmIHRoaXMgc3dpdGNoIGlzIHRvIHBhc3MgdHJhZmZpYyBiZXR3ZWVuIHRoZSB1cHN0cmVhbVxuJiM0MzsgKlx0XHRcdChDUFUpIHBvcnQgYW5kIGEgc2Vjb25kIGRvd25zdHJlYW0gc3dpdGNoLCB3aXRob3V0XG4mIzQzOyAqXHRcdFx0YWx0ZXJpbmcgdGhlIERTQSB0YWcuXG4gICogQGlycV9kb21haW46XHRcdElSUSBkb21haW4gb2YgdGhlIHN3aXRjaCBpcnFfY2hpcFxuICAqIEBjcmVhdGVfc2dtaWk6XHRQb2ludGVyIHRvIGZ1bmN0aW9uIGNyZWF0aW5nIFNHTUlJIFBDUyBpbnN0YW5jZShzKVxuICAqIEBhY3RpdmVfY3B1X3BvcnRzOlx0SG9sZGluZyB0aGUgYWN0aXZlIENQVSBwb3J0c1xuQEAgLTkxMSw2ICYjNDM7OTQxLDcgQEAgc3RydWN0IG10NzUzMF9wcml2IHtcbiBcdHN0cnVjdCBkZXZpY2VcdFx0KmRldjtcbiBcdHN0cnVjdCBkc2Ffc3dpdGNoXHQqZHM7XG4gXHRzdHJ1Y3QgbWlpX2J1c1x0XHQqYnVzO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzXHRcdCpjaGlsZF9idXM7XG4gXHRzdHJ1Y3QgcmVnbWFwXHRcdCpyZWdtYXA7XG4gXHRzdHJ1Y3QgcmVzZXRfY29udHJvbFx0KnJzdGM7XG4gXHRzdHJ1Y3QgcmVndWxhdG9yXHQqY29yZV9wd3I7XG5AQCAtOTIzLDYgJiM0Mzs5NTQsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYge1xuIFx0Ym9vbFx0XHRcdHA1X3NnbWlpO1xuIFx0dThcdFx0XHRtaXJyb3Jfcng7XG4gXHR1OFx0XHRcdG1pcnJvcl90eDtcbiYjNDM7XHRib29sXHRcdFx0aXNfcGFzc3Rocm91Z2g7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3BvcnRcdHBvcnRzW01UNzUzMF9OVU1fUE9SVFNdO1xuIFx0c3RydWN0IG10NzUzeF9wY3NcdHBjc1tNVDc1MzBfTlVNX1BPUlRTXTtcbiBcdC8qIHByb3RlY3QgYW1vbmcgcHJvY2Vzc2VzIGZvciByZWdpc3RlcnMgYWNjZXNzKi9cbkBAIC05NjEsNiAmIzQzOzk5MywxNiBAQCBzdHJ1Y3QgbXQ3NTMwX2h3X3N0YXRzIHtcbiBpbnQgbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpO1xuIHZvaWQgbXQ3NTMwX3JlbW92ZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KTtcbiBcbiYjNDM7LypcbiYjNDM7ICogV2hlbiBhbiBNTUlPIGJhc2VkIHN3aXRjaCBoYXMgYW4gTURJTyBidXMgd2hpY2ggY29udGFpbnMgYSBkb3duc3RyZWFtIE1ESU9cbiYjNDM7ICogc3dpdGNoLCB0aGUgTURJTyBidXMgaXMgbm90IG5vcm1hbGx5IHNldHVwIHVudGlsIG10NzUzeF9zZXR1cCgpIGhhcyBiZWVuXG4mIzQzOyAqIGNhbGxlZC4gQnV0IG10NzUzeF9zZXR1cCgpIGlzIG5vdCBjYWxsZWQgdW50aWwgRFNBIHNlZXMgdGhhdCBldmVyeSBzd2l0Y2ggaW5cbiYjNDM7ICogdGhlIHRyZWUgaGFzIGJlZW4gcHJvYmVkLiBDYWxsaW5nIG10NzUzMF9zZXR1cF9tZGlvKCkgYWZ0ZXIgYXQgdGhlIGVuZCBvZlxuJiM0MzsgKiB0aGUgTU1JTyBwcm9iZSBmdW5jdGlvbiBhbGxvd3MgdGhlIGRvd25zdHJlYW0gc3dpdGNoIHRvIHJlZ2lzdGVyLCBjb21wbGV0aW5nXG4mIzQzOyAqIHRoZSB0cmVlLlxuJiM0MzsgKi9cbiYjNDM7aW50IG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdik7XG4mIzQzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gbXQ3NTN4X3RhYmxlW107XG4gXG4gI2VuZGlmIC8qIF9fTVQ3NTMwX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIGFuZCBhZGRzIHN1cHBvcnQgZm9yIEVjb05ldCBFTjc1MTIyMSBTb0NzIGFuZCBwYXNzdGhyb3VnaCBtb2RlIHRvIHRoZSBNZWRpYVRlayBNVDc1MzAgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAqKS4gVGhpcyBkcml2ZXIgY29udHJvbHMgc3BlY2lmaWMgcGh5c2ljYWwgTWVkaWFUZWsvRWNvTmV0IFNvQyBldGhlcm5ldCBzd2l0Y2hlcyBhbmQgTURJTy9NTUlPIGRldmljZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzOGE3MjZlOTY2YWRkOWMzMDNmMzhjY2ZiMTkxNjc1ZTgxNDAyNmU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxNjowNDo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwKaW5kZXggOTBiMzU4MmI3NjE5MC4uMTA2YzQwODc1MjhkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwKQEAgLTI5LDYgJiM0MzsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfAogICBhbmQgdGhlIHN3aXRjaCByZWdpc3RlcnMgYXJlIGRpcmVjdGx5IG1hcHBlZCBpbnRvIFNvQyYjMzk7cyBtZW1vcnkgbWFwIHJhdGhlciB0aGFuCiAgIHVzaW5nIE1ESU8uIFRoZSBEU0EgZHJpdmVyIGN1cnJlbnRseSBkb2VzbiYjMzk7dCBzdXBwb3J0IE1UNzYyMCB2YXJpYW50cy4KIAomIzQzOyAgRWNvTmV0IEVONzUxMjIxIFNvQ3MgaGF2ZSBhIG1lbW9yeSBtYXBwZWQgTVQ3NTMwIHdpdGggM3ggMTAvMTAwIFBIWXMgYW5kIDF4CiYjNDM7ICBnaWdhYml0IFBIWS4gU29tZSBFTjc1MTIyMSBjaGlwcyBzdWNoIGFzIEVONzUxM0cgYW5kIEVONzUyNkcgaGF2ZSBhIG11bHRpLWNoaXAKJiM0MzsgIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTVQ3NTMwIGFzIHdlbGwgYXMgdGhlIG9uLWRpZSBzd2l0Y2guIEluIHRoZXNlCiYjNDM7ICBwYWNrYWdlcywgdGhlIG11bHRpLWNoaXAgbW9kdWxlIGlzIGNvbm5lY3RlZCB0byBwb3J0IDUgb2YgdGhlIG9uLWRpZSBzd2l0Y2gKJiM0MzsgIHZpYSBhIFRSR01JSSBsaW5rLgomIzQzOwogICBUaGVyZSBpcyBvbmx5IHRoZSBzdGFuZGFsb25lIHZlcnNpb24gb2YgTVQ3NTMxLgogCiAgIFBvcnQgNSBvbiBNVDc1MzAgc3VwcG9ydHMgdmFyaW91cyBjb25maWd1cmF0aW9uczoKQEAgLTczLDYgJiM0Mzs3OSwxMyBAQCBkZXNjcmlwdGlvbjogfAogCiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LgogCiYjNDM7ICBUaGUgTVQ3NTMwIGFuZCBNVDc1MzEgc3dpdGNoZXMgYXJlIGNhcGFibGUgb2YgYmVpbmcgb3BlcmF0ZWQgaW4gJiMzNDtwYXNzdGhyb3VnaCYjMzQ7CiYjNDM7ICBtb2RlLiBJbiB0aGlzIG1vZGUsIHRyYWZmaWMgaXMgdW5jb25kaXRpb25hbGx5IHBhc3NlZCBiZXR3ZWVuIHRoZSBDUFUgcG9ydAomIzQzOyAgYW5kIHRoZSBEU0EgcG9ydCB3aGljaCBsaW5rcyB0byBhIHNlY29uZCBzd2l0Y2guIFRvIHVzZSBwYXNzdGhyb3VnaCBtb2RlLCB0aGUKJiM0MzsgIHVwc3RyZWFtIHN3aXRjaCBpcyBjb25maWd1cmVkIHdpdGggYSBEU0EgbGluayB0byB0aGUgZG93bnN0cmVhbSBzd2l0Y2guIEluCiYjNDM7ICBwYXNzdGhyb3VnaCBtb2RlIHRoZSB1cHN0cmVhbSBzd2l0Y2ggaXMgcmVzdHJpY3RlZCwgd2l0aCBubyBvdGhlciBwb3J0cyBvcgomIzQzOyAgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYWxsb3dlZC4KJiM0MzsKIHByb3BlcnRpZXM6CiAgIGNvbXBhdGlibGU6CiAgICAgb25lT2Y6CkBAIC0xMDQsNiAmIzQzOzExNywxNCBAQCBwcm9wZXJ0aWVzOgogICAgICAgICAgIEJ1aWx0LWluIHN3aXRjaCBvZiB0aGUgRWNvTmV0IEVONzUyOCBTb0MKICAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1Mjgtc3dpdGNoCiAKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBCdWlsdC1pbiBzd2l0Y2ggb2YgRWNvTmV0IEVONzUxMjIxIFNvQwomIzQzOyAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1MTIyMS1zd2l0Y2gKJiM0MzsKJiM0MzsgICAgICAtIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgICAgICBNdWx0aS1jaGlwIG1vZHVsZSBNVDc1MzAgaW4gRU43NTEyMjEgU29DCiYjNDM7ICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxCiYjNDM7CiAgIHJlZzoKICAgICBtYXhJdGVtczogMQogCkBAIC0xNTMsOCAmIzQzOzE3NCw4IEBAIHByb3BlcnRpZXM6CiAgIG1lZGlhdGVrLG1jbToKICAgICB0eXBlOiBib29sZWFuCiAgICAgZGVzY3JpcHRpb246Ci0gICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCBhbmQgTVQ3NjIzQUkgU29DcyB3aGljaCB0aGUgTVQ3NTMwCi0gICAgICBzd2l0Y2ggaXMgYSBwYXJ0IG9mIHRoZSBtdWx0aS1jaGlwIG1vZHVsZS4KJiM0MzsgICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCwgTVQ3NjIzQUkgYW5kIEVONzUxMjIxIFNvQ3Mgd2hpY2gKJiM0MzsgICAgICB0aGUgTVQ3NTMwIHN3aXRjaCBpcyBhIHBhcnQgb2YgdGhlIG11bHRpLWNoaXAgbW9kdWxlLgogCiAgIHJlc2V0LWdwaW9zOgogICAgIGRlc2NyaXB0aW9uOiB8CkBAIC0yMTYsNiAmIzQzOzIzNywyMCBAQCAkZGVmczoKICAgICAgICAgICAgICAgICBwaHktbW9kZToKICAgICAgICAgICAgICAgICAgIGNvbnN0OiBpbnRlcm5hbAogCiYjNDM7ICBtdDc1MzAtcGFzc3Rocm91Z2gtZHNhLXBvcnQ6CiYjNDM7ICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgomIzQzOyAgICAgICYjMzQ7XihldGhlcm5ldC0pP3BvcnRzJCYjMzQ7OgomIzQzOyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6CiYjNDM7ICAgICAgICAgICYjMzQ7XihldGhlcm5ldC0pP3BvcnRAWzAtNl0kJiMzNDs6CiYjNDM7ICAgICAgICAgICAgaWY6CiYjNDM7ICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF0KJiM0MzsgICAgICAgICAgICB0aGVuOgomIzQzOyAgICAgICAgICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgICAgICAgICAgcmVnOgomIzQzOyAgICAgICAgICAgICAgICAgIGNvbnN0OiA2CiYjNDM7ICAgICAgICAgICAgICAgIHBoeS1tb2RlOgomIzQzOyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWkKJiM0MzsKICAgbXQ3NTMwLWRzYS1wb3J0OgogICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOgogICAgICAgJiMzNDteKGV0aGVybmV0LSk/cG9ydHMkJiMzNDs6CkBAIC0zMjMsNiAmIzQzOzM1OCw3IEBAIGFsbE9mOgogICAgICAgICAgICAgLSBhaXJvaGEsZW43NTgxLXN3aXRjaAogICAgICAgICAgICAgLSBhaXJvaGEsYW43NTgzLXN3aXRjaAogICAgICAgICAgICAgLSBlY29uZXQsZW43NTI4LXN3aXRjaAomIzQzOyAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUxMjIxLXN3aXRjaAogICAgIHRoZW46CiAgICAgICAkcmVmOiAmIzM0OyMvJGRlZnMvYnVpbHRpbi1kc2EtcG9ydCYjMzQ7CiAgICAgICBwcm9wZXJ0aWVzOgpAQCAtMzMwLDYgJiM0MzszNjYsMTYgQEAgYWxsT2Y6CiAgICAgICAgIG1lZGlhdGVrLG1jbTogZmFsc2UKICAgICAgICAgcmVzZXQtbmFtZXM6IGZhbHNlCiAKJiM0MzsgIC0gaWY6CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGNvbXBhdGlibGU6CiYjNDM7ICAgICAgICAgIGVudW06CiYjNDM7ICAgICAgICAgICAgLSBlY29uZXQsZW43NTEyMjEKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICAkcmVmOiAmIzM0OyMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0JiMzNDsKJiM0MzsgICAgICByZXF1aXJlZDoKJiM0MzsgICAgICAgIC0gbWVkaWF0ZWssbWNtCiYjNDM7CiB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiAKIGV4YW1wbGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYwppbmRleCAyNGVmNTRmM2RiMmE2Li4yZmQ5ODdmZjg1MTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYwpAQCAtMTM5LDYgJiM0MzsxMzksNyBAQCBtdDc1MzFfY3JlYXRlX3NnbWlpKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7CiYjNDM7CXsgLmNvbXBhdGlibGUgPSAmIzM0O2Vjb25ldCxlbjc1MTIyMSYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWVkaWF0ZWssbXQ3NjIxJiMzNDssIC5kYXRhID0gJmFtcDttdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDttZWRpYXRlayxtdDc1MzAmIzM0OywgLmRhdGEgPSAmYW1wO210NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O21lZGlhdGVrLG10NzUzMSYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jCmluZGV4IGNmM2JkYjIzYTJkNTQuLjFhMjliMWVlZmIyYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jCkBAIC0xMiw2ICYjNDM7MTIsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OTg4X29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7YWlyb2hhLGFuNzU4My1zd2l0Y2gmIzM0OywgLmRhdGEgPSAmYW1wO210NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LAogCXsgLmNvbXBhdGlibGUgPSAmIzM0O2Fpcm9oYSxlbjc1ODEtc3dpdGNoJiMzNDssIC5kYXRhID0gJmFtcDttdDc1M3hfdGFibGVbSURfRU43NTgxXSwgfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7ZWNvbmV0LGVuNzUxMjIxLXN3aXRjaCYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSwKIAl7IC5jb21wYXRpYmxlID0gJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaCYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX0VONzUyOF0sIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7bWVkaWF0ZWssbXQ3OTg4LXN3aXRjaCYjMzQ7LCAuZGF0YSA9ICZhbXA7bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CkBAIC02MSw3ICYjNDM7NjIsMTIgQEAgbXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKElTX0VSUihwcml2LSZndDtyZWdtYXApKQogCQlyZXR1cm4gUFRSX0VSUihwcml2LSZndDtyZWdtYXApOwogCi0JcmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi0mZ3Q7ZHMpOwomIzQzOwlyZXQgPSBkc2FfcmVnaXN0ZXJfc3dpdGNoKHByaXYtJmd0O2RzKTsKJiM0MzsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCmluZGV4IDI4Zjk0Y2QyNWI5NTUuLjZmZDQ3MTlhYWI4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKQEAgLTQ2LDYgJiM0Mzs0NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyBtdDc1MzBfbWliW10gPSB7CiAJTUlCX0RFU0MoMSwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FSTF9EUk9QLCAmIzM0O1J4QXJsRHJvcCYjMzQ7KSwKIH07CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxKQomIzQzOwkJcmV0dXJuIDEyOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFwcml2LSZndDttZGlvZGV2KSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKiBEZWZhdWx0IGlzIDFzdCBQSFkgKi8KJiM0MzsJcmV0dXJuIChwcml2LSZndDttZGlvZGV2LSZndDthZGRyICYjNDM7IDEpICZhbXA7IChQSFlfTUFYX0FERFIgLSAxKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZAogbXQ3NTMwX211dGV4X2xvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQogewpAQCAtNjMsMzIgJiM0Mzs3NiwzNiBAQCBtdDc1MzBfbXV0ZXhfdW5sb2NrKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIHN0YXRpYyB2b2lkCiBjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKIHsKJiM0MzsJaW50IGN0bF9waHkgPSBtdDc1M3hfY3RybF9waHlfYWRkcihwcml2KTsKIAlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0mZ3Q7YnVzOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFidXMpCiYjNDM7CQlidXMgPSBwcml2LSZndDtjaGlsZF9idXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWJ1cykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbXQ3NTMwX211dGV4X2xvY2socHJpdik7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi8KLQlyZXQgPSBidXMtJmd0O3dyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciksCi0JCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnI7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKLQkJCSBNSUlfTU1EX0RBVEEsIHJlZyk7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHJlZyk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyOwogCiAJLyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKJiM0MzsJcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIGN0bF9waHksCiAJCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMiB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAogCS8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJiMzOTtzIHNlbGVjdGVkIHJlZ2lzdGVyICovCi0JcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHIpLAotCQkJIE1JSV9NTURfREFUQSwgdmFsKTsKJiM0MzsJcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgdmFsKTsKIGVycjoKIAlpZiAocmV0ICZsdDsgMCkKIAkJZGV2X2VycigmYW1wO2J1cy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcbiYjMzQ7KTsKQEAgLTk5LDMzICYjNDM7MTE2LDM3IEBAIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQogc3RhdGljIHZvaWQKIGNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpCiB7CiYjNDM7CWludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7CiAJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtJmd0O2J1czsKIAl1MzIgdmFsOwogCWludCByZXQ7CiAKJiM0MzsJaWYgKCFidXMpCiYjNDM7CQlidXMgPSBwcml2LSZndDtjaGlsZF9idXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWJ1cykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbXQ3NTMwX211dGV4X2xvY2socHJpdik7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi8KLQlyZXQgPSBidXMtJmd0O3dyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciksCi0JCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnI7CiAKIAkvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKLQkJCSBNSUlfTU1EX0RBVEEsIHJlZyk7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHJlZyk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyOwogCiAJLyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKJiM0MzsJcmV0ID0gYnVzLSZndDt3cml0ZShidXMsIGN0bF9waHksCiAJCQkgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMiB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAogCS8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqLwotCXJldCA9IGJ1cy0mZ3Q7cmVhZChidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHIpLAotCQkJTUlJX01NRF9EQVRBKTsKJiM0MzsJcmV0ID0gYnVzLSZndDtyZWFkKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBKTsKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnI7CiAJdmFsID0gcmV0OwpAQCAtMTMzLDggJiM0MzsxNTQsNyBAQCBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KQogCXZhbCAmYW1wOz0gfm1hc2s7CiAJdmFsIHw9IHNldDsKIAkvKiBXcml0ZSB0aGUgZGF0YSBpbnRvIE1NRCYjMzk7cyBzZWxlY3RlZCByZWdpc3RlciAqLwotCXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSwKLQkJCSBNSUlfTU1EX0RBVEEsIHZhbCk7CiYjNDM7CXJldCA9IGJ1cy0mZ3Q7d3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHZhbCk7CiBlcnI6CiAJaWYgKHJldCAmbHQ7IDApCiAJCWRldl9lcnIoJmFtcDtidXMtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gd3JpdGUgbW1kIHJlZ2lzdGVyXG4mIzM0Oyk7CkBAIC0zMjcsMTIgJiM0MzszNDcsMTkgQEAgbXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKIAlyZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIE1UNzUzWF9NVFJBUCwgJmFtcDt4dGFsKTsKIAl4dGFsICZhbXA7PSBNVDc1MzBfWFRBTF9NQVNLOwogCiYjNDM7CS8qIEVONzUxMjIxIG9uLWRpZSBkb2VzIG5vdCByZXBvcnQgY2xvY2sgc3BlZWQgaW4gTVRSQVAgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxKQomIzQzOwkJeHRhbCA9IE1UNzUzMF9YVEFMXzI1TUhaOwomIzQzOwogCWlmICh4dGFsID09IE1UNzUzMF9YVEFMXzI1TUhaKQogCQlzc2NfZGVsdGEgPSAweDU3OwogCWVsc2UKIAkJc3NjX2RlbHRhID0gMHg4NzsKIAotCWlmIChwcml2LSZndDtpZCA9PSBJRF9NVDc2MjEpIHsKJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxX0VYVCB8fCBwcml2LSZndDtpZCA9PSBJRF9FTjc1MTIyMSkgewomIzQzOwkJLyogUExMIGZyZXF1ZW5jeTogMzYyLjVNaHogKi8KJiM0MzsJCW5jcG8xID0gMHgxZDAwOwomIzQzOwl9IGVsc2UgaWYgKHByaXYtJmd0O2lkID09IElEX01UNzYyMSkgewogCQkvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi8KIAkJaWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopCiAJCQluY3BvMSA9IDB4MDY0MDsKQEAgLTQ0OSw2ICYjNDM7NDc2LDI1MSBAQCBtdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIAl1c2xlZXBfcmFuZ2UoMjUsIDM1KTsKIH0KIAomIzQzO3N0YXRpYyBib29sCiYjNDM7ZW43NTEyMjFfdHJnbWlpX2NhbF9vayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LCB1MzIgcmVnLCBpbnQgY2hhbiwgaW50IGkpCiYjNDM7ewomIzQzOwl1MzIgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmVnbWFwX3JlYWQocngtJmd0O3JlZ21hcCwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CXJlZ21hcF93cml0ZShyeC0mZ3Q7cmVnbWFwLCByZWcsIHZhbCB8IEVER0VfQ0hLKTsKJiM0MzsJcmVnbWFwX3dyaXRlKHJ4LSZndDtyZWdtYXAsIHJlZywgdmFsICZhbXA7IH5FREdFX0NISyk7CiYjNDM7CXJlZ21hcF9yZWFkKHJ4LSZndDtyZWdtYXAsIHJlZywgJmFtcDt2YWwpOwomIzQzOwomIzQzOwlyZXR1cm4gRklFTERfR0VUKFJEX1ZBTFVFX01BU0ssIHZhbCkgPT0gVEdNSUlfVERfUEFUICZhbXA7JmFtcDsKJiM0MzsJICAgICAgICFGSUVMRF9HRVQoUkRfRVJSX01BU0ssIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCwKJiM0MzsJCQkJICAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsCiYjNDM7CQkJCSAgICB1OCAqZGVmYXVsdF90YXBzKQomIzQzO3sKJiM0MzsJaW50IGNoYW5uZWw7CiYjNDM7CiYjNDM7CXJlZ21hcF9zZXRfYml0cyh0eC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7CiYjNDM7CiYjNDM7CS8qIFB1dCBmYWlsIHBhdHRlcm4gb24gZXZlcnkgY2hhbm5lbCAqLwomIzQzOwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsICZsdDsgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsJiM0MzsmIzQzOykKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyh0eC0mZ3Q7cmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksCiYjNDM7CQkJCSAgIFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkJICAgICAgVEdNSUlfVERfRkFJTF9QQVQpKTsKJiM0MzsKJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiByeF9yZWcgPSBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpOwomIzQzOwkJaW50IGJlc3RfdGFwID0gLTEsIGJlc3RfcmFuZ2UgPSAtMTsKJiM0MzsJCWludCBmaXJzdCA9IC0xOwomIzQzOwkJdTggZGFjOwomIzQzOwkJY2hhciBsb2dbVERfVEFQX01BWCAmIzQzOyAxXTsKJiM0MzsKJiM0MzsJCS8qIFB1dCB0ZXN0IHBhdHRlcm4gb24gY29ycmVjdCBjaGFubmVsICovCiYjNDM7CQlyZWdtYXBfdXBkYXRlX2JpdHModHgtJmd0O3JlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLAomIzQzOwkJCQkgICBUR01JSV9URF9QQVRfTUFTSywKJiM0MzsJCQkJICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSywgVEdNSUlfVERfUEFUKSk7CiYjNDM7CiYjNDM7CQlmb3IgKGRhYyA9IDA7IGRhYyAmbHQ7IFREX1RBUF9NQVg7IGRhYyYjNDM7JiM0MzspIHsKJiM0MzsJCQkvKiBTZXQgVEFQICovCiYjNDM7CQkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LSZndDtyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssCiYjNDM7CQkJCQkgICBSRF9UQVAoZGFjKSk7CiYjNDM7CiYjNDM7CQkJLyogQ2hlY2sgaWYgd2UgY2FuIGdldCBhIGdvb2QgcmVhZCAqLwomIzQzOwkJCWlmIChlbjc1MTIyMV90cmdtaWlfY2FsX29rKHJ4LCByeF9yZWcsIGNoYW5uZWwsIGRhYykpIHsKJiM0MzsJCQkJbG9nW2RhY10gPSAmIzM5OyYjNDM7JiMzOTs7CiYjNDM7CiYjNDM7CQkJCWlmIChmaXJzdCAmbHQ7IDApCiYjNDM7CQkJCQlmaXJzdCA9IGRhYzsKJiM0MzsKJiM0MzsJCQkJaWYgKChkYWMgLSBmaXJzdCkgJmd0OyBiZXN0X3JhbmdlKSB7CiYjNDM7CQkJCQliZXN0X3RhcCA9IChmaXJzdCAmIzQzOyBkYWMpIC8gMjsKJiM0MzsJCQkJCWJlc3RfcmFuZ2UgPSBkYWMgLSBmaXJzdDsKJiM0MzsJCQkJfQomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWxvZ1tkYWNdID0gJiMzOTsuJiMzOTs7CiYjNDM7CQkJCWZpcnN0ID0gLTE7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJbG9nW1REX1RBUF9NQVhdID0gJiMzOTtcMCYjMzk7OwomIzQzOwomIzQzOwkJaWYgKGJlc3RfdGFwICZndDsgLTEpIHsKJiM0MzsJCQlyZWdtYXBfdXBkYXRlX2JpdHMocngtJmd0O3JlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSywKJiM0MzsJCQkJCSAgIFJEX1RBUChiZXN0X3RhcCkpOwomIzQzOwomIzQzOwkJCWxvZ1tiZXN0X3RhcF0gPSAmIzM5O1gmIzM5OzsKJiM0MzsKJiM0MzsJCQlkZXZfaW5mbyhyeC0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtUUkdNSUkgbGFuZSAlZDogJXMgdGFwICVkIG9sZCAlZFxuJiMzNDssCiYjNDM7CQkJCSBjaGFubmVsLCBsb2csIGJlc3RfdGFwLCBkZWZhdWx0X3RhcHNbY2hhbm5lbF0pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZWdtYXBfdXBkYXRlX2JpdHMocngtJmd0O3JlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSywKJiM0MzsJCQkJCSAgIFJEX1RBUChkZWZhdWx0X3RhcHNbY2hhbm5lbF0pKTsKJiM0MzsKJiM0MzsJCQlkZXZfd2FybihyeC0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtUUkdNSUkgbGFuZSAlZDogJXMgY2FsaWJyYXRpb24gZmFpbGVkLCBwcmVzZXJ2aW5nIHRhcCAldVxuJiMzNDssCiYjNDM7CQkJCSBjaGFubmVsLCBsb2csIGRlZmF1bHRfdGFwc1tjaGFubmVsXSk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBSZXR1cm4gY2hhbm5lbCB0byBmYWlsdXJlIHBhdHRlcm4gKi8KJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyh0eC0mZ3Q7cmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksCiYjNDM7CQkJCSAgIFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLAomIzQzOwkJCQkJICAgICAgVEdNSUlfVERfRkFJTF9QQVQpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZWdtYXBfY2xlYXJfYml0cyh0eC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsCiYjNDM7CQkgICAgICB1OCBjbGtfZHJ2bikKJiM0Mzt7CiYjNDM7CWludCBjaGFubmVsOwomIzQzOwomIzQzOwkvKiBUeCBkcml2aW5nIGZvciBUUkdNSUkgcGF0aCBvbiBTb0MgKi8KJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1REX09EVChjaGFubmVsKSwKJiM0MzsJCQkgICAgIFREX0RNX0RSVlAoZHJ2cCkgfCBURF9ETV9EUlZOKGRydm4pKTsKJiM0MzsKJiM0MzsJLyogVW5kb2N1bWVudGVkIDZ0aCBjaGFubmVsLCBwcm9iYWJseSBkcml2ZSBzdHJlbmd0aCBmb3IgY2xvY2sgbGluZS4gKi8KJiM0MzsJcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9URF9PRFQoNSksIFREX0RNX0RSVlAoZHJ2cCkgfAomIzQzOwkJICAgICBURF9ETV9EUlZOKGRydm4pKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0Mztlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKmV4dCwgaW50IGV4dF9wb3J0LAomIzQzOwkJCSAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KQomIzQzO3sKJiM0MzsJdTggZGVmYXVsdF90YXBzX29uZGllW05VTV9UUkdNSUlfQ1RSTF07CiYjNDM7CXU4IGRlZmF1bHRfdGFwc19leHRbTlVNX1RSR01JSV9DVFJMXTsKJiM0MzsJdTMyIG1jcl9kb3duLCBtY3JfdXA7CiYjNDM7CWludCBjaGFubmVsOwomIzQzOwlpbnQgcmVnX3ZhbDsKJiM0MzsKJiM0MzsJLyogQk9USDogUHV0IGludGVyZmFjZXMgaW4gYSBkb3duZWQgc3RhdGUgKi8KJiM0MzsJbWNyX2Rvd24gPSBQTUNSX0lGR19YTUlUKFBNQ1JfSUZHX1hNSVRfNjQpIHwgUE1DUl9NQUNfTU9ERSB8CiYjNDM7CQkgICBNVDc1MzBfRk9SQ0VfTU9ERSB8IFBNQ1JfTUFDX1JYX0VOIHwgUE1DUl9CQUNLT0ZGX0VOIHwKJiM0MzsJCSAgIFBNQ1JfQkFDS1BSX0VOIHwgUE1DUl9GT1JDRV9TUEVFRF8xMDAwIHwgUE1DUl9GT1JDRV9GRFg7CiYjNDM7CXJlZ21hcF93cml0ZShvbmRpZS0mZ3Q7cmVnbWFwLCAgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX2Rvd24pOwomIzQzOwlyZWdtYXBfd3JpdGUoZXh0LSZndDtyZWdtYXAsIE1UNzUzWF9QTUNSX1AoZXh0X3BvcnQpLCBtY3JfZG93bik7CiYjNDM7CXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTsKJiM0MzsKJiM0MzsJLyogQk9USDogUmVzZXQgVFggKi8KJiM0MzsJcmVnbWFwX3NldF9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTsKJiM0MzsJcmVnbWFwX3NldF9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpOwomIzQzOwl1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7CiYjNDM7CXJlZ21hcF9jbGVhcl9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTsKJiM0MzsJcmVnbWFwX2NsZWFyX2JpdHMob25kaWUtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IFJlc2V0IFJYIGNvbnRyb2xsZXJzIGRvd24gKi8KJiM0MzsJcmVnbWFwX3NldF9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpOwomIzQzOwlyZWdtYXBfc2V0X2JpdHMob25kaWUtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTsKJiM0MzsKJiM0MzsJLyogQk9USDogU2V0IFRYIGRyaXZlIHN0cmVuZ3RoLCBNQ00gdXNlcyBtb3JlICovCiYjNDM7CWVuNzUxMjIxX3NldF90eF9kcml2ZShvbmRpZSwgOCwgOCwgNywgNyk7CiYjNDM7CWVuNzUxMjIxX3NldF90eF9kcml2ZShleHQsIDExLCAxMSwgMTYsIDE2KTsKJiM0MzsKJiM0MzsJLyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi8KJiM0MzsJcmVnbWFwX2NsZWFyX2JpdHMoZXh0LSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7CiYjNDM7CXJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IFBvcnRzIHVwICovCiYjNDM7CW1jcl91cCA9IG1jcl9kb3duIHwgUE1DUl9NQUNfVFhfRU4gfCBQTUNSX0ZPUkNFX0xOSzsKJiM0MzsJcmVnbWFwX3dyaXRlKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzWF9QTUNSX1Aob25kaWVfcG9ydCksIG1jcl91cCk7CiYjNDM7CXJlZ21hcF93cml0ZShleHQtJmd0O3JlZ21hcCwgTVQ3NTNYX1BNQ1JfUChleHRfcG9ydCksIG1jcl91cCk7CiYjNDM7CiYjNDM7CS8qIE1DTTogU2V0IEV4dC0mZ3Q7U29DIFRYIGRlbGF5IHRvIDAgKi8KJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspCiYjNDM7CQlyZWdtYXBfY2xlYXJfYml0cyhleHQtJmd0O3JlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLAomIzQzOwkJCQkgIFRHTUlJX1REX1RBUF9NQVNLKTsKJiM0MzsKJiM0MzsJLyogU09DOiBPRFQgKi8KJiM0MzsJcmVnbWFwX3NldF9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX1JUVCwKJiM0MzsJCQlEUVMxX0dBVEUgfCBEUVMwX0dBVEUgfCBFTjc1MTIyMV9CMTcpOwomIzQzOwomIzQzOwkvKiBTT0M6IFVuZG9jdW1lbnRlZCAqLwomIzQzOwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsICZsdDsgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsJiM0MzsmIzQzOykKJiM0MzsJCXJlZ21hcF93cml0ZShvbmRpZS0mZ3Q7cmVnbWFwLCAgKDB4N2ExNCAmIzQzOyBjaGFubmVsICogOCksCiYjNDM7CQkJICAgICAweDMyMjc3MDApOwomIzQzOwomIzQzOwkvKiBNQ006IFNwcmVhZCBzcGVjdHJ1bSBjbG9jayovCiYjNDM7CWNvcmVfY2xlYXIoZXh0LCBDT1JFX1BMTF9HUk9VUDgsIFJHX0xDRERTX1NTQ19FTik7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IFplcm8gY2xvY2sgZGVsYXkgKi8KJiM0MzsJcmVnbWFwX2NsZWFyX2JpdHMoZXh0LSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsCiYjNDM7CQkJICBEUVNJMF9UQVBfTUFTSyk7CiYjNDM7CXJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsCiYjNDM7CQkJICBEUVNJMF9UQVBfTUFTSyk7CiYjNDM7CiYjNDM7CS8qIEJPVEg6IENvbGxlY3QgYW5kIHRoZW4gemVybyBldmVyeSBSWCBUQVAgKi8KJiM0MzsJZm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCAmbHQ7IE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCYjNDM7JiM0MzspIHsKJiM0MzsJCXJlZ192YWwgPSAwOwomIzQzOwkJcmVnbWFwX3JlYWQoZXh0LSZndDtyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksICZhbXA7cmVnX3ZhbCk7CiYjNDM7CQlkZWZhdWx0X3RhcHNfZXh0W2NoYW5uZWxdID0gRklFTERfR0VUKFJEX1RBUF9NQVNLLCByZWdfdmFsKTsKJiM0MzsJCXJlZ21hcF9jbGVhcl9iaXRzKGV4dC0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLAomIzQzOwkJCQkgIFJEX1RBUF9NQVNLKTsKJiM0MzsKJiM0MzsJCXJlZ192YWwgPSAwOwomIzQzOwkJcmVnbWFwX3JlYWQob25kaWUtJmd0O3JlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSwgJmFtcDtyZWdfdmFsKTsKJiM0MzsJCWRlZmF1bHRfdGFwc19vbmRpZVtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7CiYjNDM7CQlyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS0mZ3Q7cmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLAomIzQzOwkJCQkgIFJEX1RBUF9NQVNLKTsKJiM0MzsJfQomIzQzOwomIzQzOwllbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihvbmRpZSwgZXh0LCBkZWZhdWx0X3RhcHNfZXh0KTsKJiM0MzsJZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oZXh0LCBvbmRpZSwgZGVmYXVsdF90YXBzX2V4dCk7CiYjNDM7CiYjNDM7CWRldl9pbmZvKG9uZGllLSZndDtkZXYsICYjMzQ7VFJHTUlJIGludGVyLXN3aXRjaCBsaW5rIGluaXRpYWxpemVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkCiYjNDM7bXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLSZndDtkczsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKnBlZXJfZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDsKJiM0MzsJc3RydWN0IG10NzUzMF9wcml2ICpwZWVyOwomIzQzOwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7CiYjNDM7CXN0cnVjdCBkc2FfbGluayAqZGw7CiYjNDM7CXUzMiBwbXNyID0gMDsKJiM0MzsKJiM0MzsJcHJpdiA9IGRzLSZndDtwcml2OwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7aWQgIT0gSURfRU43NTEyMjFfRVhUKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoZHAtJmd0O3R5cGUgIT0gRFNBX1BPUlRfVFlQRV9EU0EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJlZ21hcF9yZWFkKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BNU1JfUChkcC0mZ3Q7aW5kZXgpLCAmYW1wO3Btc3IpOwomIzQzOwomIzQzOwlpZiAoIShwbXNyICZhbXA7IFBNU1JfTElOSykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZGwsICZhbXA7ZHMtJmd0O2RzdC0mZ3Q7cnRhYmxlLCBsaXN0KSB7CiYjNDM7CQlpZiAoZGwtJmd0O2RwICE9IGRwKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcGVlcl9kcCA9IGRsLSZndDtsaW5rX2RwOwomIzQzOwomIzQzOwkJaWYgKHBlZXJfZHAtJmd0O3R5cGUgIT0gRFNBX1BPUlRfVFlQRV9EU0EpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlwZWVyX2RzID0gZGwtJmd0O2xpbmtfZHAtJmd0O2RzOwomIzQzOwomIzQzOwkJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShwZWVyX2RzLSZndDtkZXYtJmd0O29mX25vZGUsCiYjNDM7CQkJCQkgICAgICYjMzQ7ZWNvbmV0LGVuNzUxMjIxLXN3aXRjaCYjMzQ7KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXBlZXIgPSBwZWVyX2RzLSZndDtwcml2OwomIzQzOwomIzQzOwkJaWYgKHBlZXItJmd0O2lkICE9IElEX0VONzUxMjIxKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJZW43NTEyMjFfdHJnbWlpX3BhaXJfc2V0dXAocHJpdiwgZHAtJmd0O2luZGV4LCBwZWVyLAomIzQzOwkJCQkJICAgcGVlcl9kcC0mZ3Q7aW5kZXgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIG10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogewpAQCAtMTI4MSwxMyAmIzQzOzE1NTMsNDEgQEAgbXQ3NTN4X3RyYXBfZnJhbWVzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIAkJCQkgICBUT19DUFVfRldfQ1BVX09OTFkpOwogfQogCiYjNDM7c3RhdGljIGludAomIzQzO210NzUzMF9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpOwomIzQzOwomIzQzOy8qIElmIHRoaXMgc3dpdGNoIGlzIGRvd25zdHJlYW0gb2YgYW5vdGhlciBzd2l0Y2ggdGhhdCBpcyBpbiBwYXNzdGhyb3VnaCBtb2RlLAomIzQzOyAqIHRoZSAmIzM0O0NQVSYjMzQ7IHBvcnQgaXMgYWN0dWFsbHkgYSBEU0EgcG9ydC4KJiM0MzsgKi8KIHN0YXRpYyB2b2lkCiBtdDc1M3hfY3B1X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCiB7CiAJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiAKLQkvKiBFbmFibGUgTWVkaWF0ZWsgaGVhZGVyIG1vZGUgb24gdGhlIGNwdSBwb3J0ICovCi0JcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTsKJiM0MzsJaWYgKHByaXYtJmd0O2lzX3Bhc3N0aHJvdWdoKSB7CiYjNDM7CQkvKiBEaXNhYmxlIHBhcnNpbmcgb2YgdGhlIERTQSB0YWcsIGl0IHdpbGwgYmUgZm9yd2FyZGVkIGJsaW5kbHkKJiM0MzsJCSAqIHRvIHRoZSBkb3duc3RyZWFtIHN3aXRjaC4KJiM0MzsJCSAqLwomIzQzOwkJcmVnbWFwX3dyaXRlKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLAomIzQzOwkJCSAgICAgVkxBTl9BVFRSKE1UNzUzMF9WTEFOX1RSQU5TUEFSRU5UKSB8CiYjNDM7CQkJICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgcG9ydCBpcyBub3QgY29uZmlndXJlZCB0byBwYXJzZSBEU0EgdGFncywgc28gdGhleSBhcmUKJiM0MzsJCSAqIGxpYWJsZSB0byBiZSBjb25mdXNlZCBmb3IgbGVuZ3RoIGZpZWxkcywgc28gbGVuZ3RoIGNoZWNrIGlzCiYjNDM7CQkgKiBkaXNhYmxlZC4KJiM0MzsJCSAqLwomIzQzOwkJcmVnbWFwX2NsZWFyX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1M1hfQUdDLCBBR0NfTDJMRU5fQ0hLKTsKJiM0MzsKJiM0MzsJCS8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIE1UVSBpcyBvbmx5IGVuZm9yY2VkIGRvd25zdHJlYW0gKi8KJiM0MzsJCW10NzUzMF9wb3J0X2NoYW5nZV9tdHUoZHMsIHBvcnQsIE1UNzUzMF9NQVhfTVRVKTsKJiM0MzsKJiM0MzsJCS8qIExvb3AgZGV0ZWN0aW9uIGhhcyBubyB2YWx1ZSBpbiBwYXNzdGhyb3VnaCBtb2RlICovCiYjNDM7CQlyZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1M1hfTVRSQVAsCiYjNDM7CQkJCU1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIE5vdCBwYXNzdGhyb3VnaCwgZW5hYmxlIERTQSB0YWcgaGFuZGxpbmcgb24gQ1BVIHBvcnQuICovCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksIFBPUlRfU1BFQ19UQUcpOwomIzQzOwl9CiAKIAkvKiBFbmFibGUgZmxvb2Rpbmcgb24gdGhlIENQVSBwb3J0ICovCiAJcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTNYX01GQywKQEAgLTEzMTcsNiAmIzQzOzE2MTcsNyBAQCBzdGF0aWMgaW50CiBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkJICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKIHsKJiM0MzsJaW50IHVwc3RyZWFtX3B0ID0gZHNhX3N3aXRjaF91cHN0cmVhbV9wb3J0KGRzKTsKIAlzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOwogCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLSZndDtwcml2OwogCkBAIC0xMzI3LDE3ICYjNDM7MTYyOCw0MyBAQCBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAkgKiBicmlkZ2UuCiAJICovCiAJaWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKSB7Ci0JCXN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZHAtJmd0O2NwdV9kcDsKJiM0MzsJCXByaXYtJmd0O3BvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKHVwc3RyZWFtX3B0KSk7CiYjNDM7CiYjNDM7CX0gZWxzZSBpZiAoZHNhX3BvcnRfaXNfZHNhKGRwKSAmYW1wOyZhbXA7IGRwLSZndDtpbmRleCAhPSB1cHN0cmVhbV9wdCkgewomIzQzOwkJcHJpdi0mZ3Q7cG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTsKJiM0MzsKJiM0MzsJCS8qIFNob3VsZCBub3QgaGFwcGVuICovCiYjNDM7CQlXQVJOX09OX09OQ0UoIXByaXYtJmd0O2lzX3Bhc3N0aHJvdWdoKTsKJiM0MzsKJiM0MzsJCS8qIFdlIGFyZSBwYXNzaW5nIHRocm91Z2ggdG8gYSBkb3duc3RyZWFtIHN3aXRjaCBzbyB3ZSBzZXQgYm90aAomIzQzOwkJICogQ1BVIGFuZCBkb3duc3RyZWFtIGxpbmsgdG8gcGFzcyB0cmFmZmljIHVudG91Y2hlZCBzbyB0aGF0CiYjNDM7CQkgKiB0aGUgU1RBRyBmcm9tIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB3aWxsIHBhc3MgdG8gdGhlIHVwc3RyZWFtLgomIzQzOwkJICovCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksCiYjNDM7CQkJICAgICBWTEFOX0FUVFIoTVQ3NTMwX1ZMQU5fVFJBTlNQQVJFTlQpIHwKJiM0MzsJCQkgICAgIFBWQ19FR19UQUcoTVQ3NTMwX1ZMQU5fRUdfRElTQUJMRUQpKTsKJiM0MzsKJiM0MzsJCS8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi8KJiM0MzsJCXJlZ21hcF9zZXRfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzWF9NRkMsIEJDX0ZGUChCSVQocG9ydCkpIHwKJiM0MzsJCQkJVU5NX0ZGUChCSVQocG9ydCkpIHwgVU5VX0ZGUChCSVQocG9ydCkpKTsKIAotCQlwcml2LSZndDtwb3J0c1twb3J0XS5wbSB8PSBQQ1JfTUFUUklYKEJJVChjcHVfZHAtJmd0O2luZGV4KSk7CiYjNDM7CQkvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuCiYjNDM7CQkgKiBUaGlzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBQT1JUX1NQRUNfVEFHIGlzIHVuc2V0LgomIzQzOwkJICovCiYjNDM7CQlyZWdtYXBfd3JpdGUocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUENSX1AodXBzdHJlYW1fcHQpLAomIzQzOwkJCSAgICAgUENSX01BVFJJWChCSVQocG9ydCkpKTsKIAl9CiAJcHJpdi0mZ3Q7cG9ydHNbcG9ydF0uZW5hYmxlID0gdHJ1ZTsKLQlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBNVDc1MzBfUENSX1AocG9ydCksIFBDUl9NQVRSSVhfTUFTSywKLQkJCSAgIHByaXYtJmd0O3BvcnRzW3BvcnRdLnBtKTsKJiM0MzsKJiM0MzsJLyogSW4gcGFzc3Rocm91Z2ggbW9kZSwgQ1BVIHBvcnQgbWFzayBpcyBzZXQgYWJvdmUuICovCiYjNDM7CWlmICghKHByaXYtJmd0O2lzX3Bhc3N0aHJvdWdoICZhbXA7JmFtcDsgZHAtJmd0O2luZGV4ID09IHVwc3RyZWFtX3B0KSkKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzMF9QQ1JfUChwb3J0KSwKJiM0MzsJCQkJICAgUENSX01BVFJJWF9NQVNLLCBwcml2LSZndDtwb3J0c1twb3J0XS5wbSk7CiAKIAltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbXV0ZXgpOwogCi0JaWYgKHByaXYtJmd0O2lkICE9IElEX01UNzUzMCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX01UNzYyMSkKJiM0MzsJaWYgKHByaXYtJmd0O2lkICE9IElEX01UNzUzMCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX01UNzYyMSAmYW1wOyZhbXA7CiYjNDM7CSAgICBwcml2LSZndDtpZCAhPSBJRF9FTjc1MTIyMSAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxX0VYVCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAocG9ydCA9PSA1KQpAQCAtMTM2NCw3ICYjNDM7MTY5MSw4IEBAIG10NzUzMF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIAogCW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19tdXRleCk7CiAKLQlpZiAocHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NTMwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NjIxKQomIzQzOwlpZiAocHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NTMwICZhbXA7JmFtcDsgcHJpdi0mZ3Q7aWQgIT0gSURfTVQ3NjIxICZhbXA7JmFtcDsKJiM0MzsJICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxICZhbXA7JmFtcDsgcHJpdi0mZ3Q7aWQgIT0gSURfRU43NTEyMjFfRVhUKQogCQlyZXR1cm47CiAKIAkvKiBEbyBub3Qgc2V0IE1UNzUzMF9QNV9ESVMgd2hlbiBwb3J0IDUgaXMgYmVpbmcgdXNlZCBmb3IgUEhZIG11eGluZy4gKi8KQEAgLTEzODUsNyAmIzQzOzE3MTMsNyBAQCBtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KQogCSAqIGxhcmdlc3QgTVRVIG9mIHRoZSB1c2VyIHBvcnRzLiBCZWNhdXNlIHRoZSBzd2l0Y2ggb25seSBoYXMgYSBnbG9iYWwKIAkgKiBSWCBsZW5ndGggcmVnaXN0ZXIsIG9ubHkgYWxsb3dpbmcgQ1BVIHBvcnQgaGVyZSBpcyBlbm91Z2guCiAJICovCi0JaWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKQomIzQzOwlpZiAoIWRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBwb3J0KSkKIAkJcmV0dXJuIDA7CiAKIAlyZWdtYXBfcmVhZChwcml2LSZndDtyZWdtYXAsIE1UNzUzMF9HTUFDQ1IsICZhbXA7dmFsKTsKQEAgLTIzMzMsNyAmIzQzOzI2NjEsNyBAQCBtdDc1MzBfZnJlZV9tZGlvX2lycShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiAJfQogfQogCi1zdGF0aWMgaW50CiYjNDM7aW50CiBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICptbnAsICpucCA9IHByaXYtJmd0O2Rldi0mZ3Q7b2Zfbm9kZTsKQEAgLTIzNDMsNiAmIzQzOzI2NzEsMTAgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQogCXN0YXRpYyBpbnQgaWR4OwogCWludCByZXQgPSAwOwogCiYjNDM7CS8qIEFscmVhZHkgZG9uZSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7Y2hpbGRfYnVzKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJbW5wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsICYjMzQ7bWRpbyYjMzQ7KTsKIAogCWlmIChtbnAgJmFtcDsmYW1wOyAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShtbnApKQpAQCAtMjM3MCw4ICYjNDM7MjcwMiwxMSBAQCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiAJaWYgKHByaXYtJmd0O2lycV9kb21haW4gJmFtcDsmYW1wOyAhbW5wKQogCQltdDc1MzBfc2V0dXBfbWRpb19pcnEocHJpdik7CiAKJiM0MzsJcHJpdi0mZ3Q7Y2hpbGRfYnVzID0gYnVzOwomIzQzOwogCXJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTsKIAlpZiAocmV0KSB7CiYjNDM7CQlwcml2LSZndDtjaGlsZF9idXMgPSBOVUxMOwogCQlkZXZfZXJyKGRldiwgJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXM6ICVkXG4mIzM0OywgcmV0KTsKIAkJaWYgKHByaXYtJmd0O2lycV9kb21haW4gJmFtcDsmYW1wOyAhbW5wKQogCQkJbXQ3NTMwX2ZyZWVfbWRpb19pcnEocHJpdik7CkBAIC0yMzgxLDYgJiM0MzsyNzE2LDcgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQogCW9mX25vZGVfcHV0KG1ucCk7CiAJcmV0dXJuIHJldDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChtdDc1MzBfc2V0dXBfbWRpbyk7CiAKIHN0YXRpYyBpbnQKIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCkBAIC0yNDA2LDExICYjNDM7Mjc0Miw2IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCWJyZWFrOwogCX0KIAotCWlmICghZG4pIHsKLQkJZGV2X2Vycihkcy0mZ3Q7ZGV2LCAmIzM0O3BhcmVudCBPRiBub2RlIG9mIERTQSBjb25kdWl0IG5vdCBmb3VuZCYjMzQ7KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJZHMtJmd0O2Fzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTsKIAlkcy0mZ3Q7dW50YWdfdmxhbl9hd2FyZV9icmlkZ2VfcHZpZCA9IHRydWU7CiAJZHMtJmd0O210dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTsKQEAgLTI0ODksNiAmIzQzOzI4MjAsMTIgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAkJCSAgIE1UNzUzMF9DSEdfVFJBUCB8IE1UNzUzMF9QSFlfSU5ESVJFQ1RfQUNDRVNTLAogCQkJICAgTVQ3NTMwX0NIR19UUkFQKTsKIAomIzQzOwkvKiBFTjc1MTIyMSBNQ00gc3RhcnRzIG9uIHRoZSB3cm9uZyBmcmVxdWVuY3kgKi8KJiM0MzsJaWYgKHByaXYtJmd0O2lkID09IElEX0VONzUxMjIxX0VYVCkKJiM0MzsJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzWF9NVFJBUCwKJiM0MzsJCQkJICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX0NLX1NFTCwKJiM0MzsJCQkJICAgTVQ3NTMwX0NIR19UUkFQKTsKJiM0MzsKIAlpZiAoKHZhbCAmYW1wOyBNVDc1MzBfWFRBTF9NQVNLKSA9PSBNVDc1MzBfWFRBTF80ME1IWikKIAkJbXQ3NTMwX3BsbF9zZXR1cChwcml2KTsKIApAQCAtMjUxMiw3ICYjNDM7Mjg0OSw3IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCS8qIERpc2FibGUgbGVhcm5pbmcgYnkgZGVmYXVsdCBvbiBhbGwgcG9ydHMgKi8KIAkJcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTMwX1BTQ19QKGkpLCBTQV9ESVMpOwogCi0JCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKSB7CiYjNDM7CQlpZiAoZHNhX2lzX3Vwc3RyZWFtX3BvcnQoZHMsIGkpKSB7CiAJCQltdDc1M3hfY3B1X3BvcnRfZW5hYmxlKGRzLCBpKTsKIAkJfSBlbHNlIHsKIAkJCW10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpOwpAQCAtMjUzNiw3ICYjNDM7Mjg3Myw3IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBDaGVjayBmb3IgUEhZIG11eGluZyBvbiBwb3J0IDUgKi8KLQlpZiAoZHNhX2lzX3VudXNlZF9wb3J0KGRzLCA1KSkgewomIzQzOwlpZiAoZG4gJmFtcDsmYW1wOyBkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7CiAJCS8qIFNjYW4gdGhlIGV0aGVybmV0IG5vZGVzLiBMb29rIGZvciBHTUFDMSwgbG9va3VwIHRoZSB1c2VkIFBIWS4KIAkJICogU2V0IHByaXYtJmd0O3A1X21vZGUgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGlmIFBIWSBtdXhpbmcgaXMKIAkJICogZGV0ZWN0ZWQuCkBAIC0yNjM2LDcgJiM0MzsyOTczLDcgQEAgbXQ3NTMxX3NldHVwX2NvbW1vbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXJlZ21hcF9zZXRfYml0cyhwcml2LSZndDtyZWdtYXAsIE1UNzUzMV9EQkdfQ05UKGkpLAogCQkJCU1UNzUzMV9ESVNfQ0xSKTsKIAotCQlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkgewomIzQzOwkJaWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkgewogCQkJbXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShkcywgaSk7CiAJCX0gZWxzZSB7CiAJCQltdDc1MzBfcG9ydF9kaXNhYmxlKGRzLCBpKTsKQEAgLTI2NzQsOCAmIzQzOzMwMTEsMTEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0mZ3Q7cHJpdjsKIAl1MzIgdmFsLCBpZDsKJiM0MzsJaW50IGN0bF9waHk7CiAJaW50IHJldCwgaTsKIAomIzQzOwljdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7CiYjNDM7CiAJLyogUmVzZXQgd2hvbGUgY2hpcCB0aHJvdWdoIGdwaW8gcGluIG9yIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGZvcgogCSAqIGRpZmZlcmVudCB0eXBlIG9mIGhhcmR3YXJlCiAJICovCkBAIC0yNzQzLDI1ICYjNDM7MzA4MywyMSBAQCBtdDc1MzFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCSAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duCiAJICogbXQ3NTMxX2luZF9tbWRfcGh5X1tyZWFkLHdyaXRlXSB0byBjb21wbGV0ZSB0aGlzIGZ1bmN0aW9uLgogCSAqLwotCXJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsCi0JCQkJICAgICAgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkciksCi0JCQkJICAgICAgTURJT19NTURfVkVORDIsIENPUkVfUExMX0dST1VQNCk7CiYjNDM7CXJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsIGN0bF9waHksIE1ESU9fTU1EX1ZFTkQyLAomIzQzOwkJCQkgICAgICBDT1JFX1BMTF9HUk9VUDQpOwogCWlmIChyZXQgJmx0OyAwKQogCQlyZXR1cm4gcmV0OwogCiAJdmFsID0gcmV0OwogCXZhbCB8PSBNVDc1MzFfUkdfU1lTUExMX0RNWTIgfCBNVDc1MzFfUEhZX1BMTF9CWVBBU1NfTU9ERTsKIAl2YWwgJmFtcDs9IH5NVDc1MzFfUEhZX1BMTF9PRkY7Ci0JcmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsCi0JCQkJICAgICAgIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtJmd0O21kaW9kZXYtJmd0O2FkZHIpLAotCQkJCSAgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0LCB2YWwpOwomIzQzOwlyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsCiYjNDM7CQkJCSAgICAgICBDT1JFX1BMTF9HUk9VUDQsIHZhbCk7CiAJaWYgKHJldCAmbHQ7IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBEaXNhYmxlIEVFRSBhZHZlcnRpc2VtZW50IG9uIHRoZSBzd2l0Y2ggUEhZcy4gKi8KLQlmb3IgKGkgPSBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKTsKLQkgICAgIGkgJmx0OyBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LSZndDttZGlvZGV2LSZndDthZGRyKSAmIzQzOyBNVDc1MzBfTlVNX1BIWVM7Ci0JICAgICBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSBjdGxfcGh5OyBpICZsdDsgY3RsX3BoeSAmIzQzOyBNVDc1MzBfTlVNX1BIWVM7IGkmIzQzOyYjNDM7KSB7CiAJCW10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZShwcml2LCBpLCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLAogCQkJCQkgMCk7CiAJfQpAQCAtMjkxMCw2ICYjNDM7MzI0Niw0NCBAQCBzdGF0aWMgdm9pZCBlbjc1MjhfbWFjX3BvcnRfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBlbjc1MTIyMV9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHBvcnQpIHsKJiM0MzsJLyogRU43NTEyMjEgcG9ydHMgMC4uMyBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlZ3JhdGVkIEZFIFBIWXMuICovCiYjNDM7CWNhc2UgMCAuLi4gMzoKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsCiYjNDM7CQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsKJiM0MzsJCWNvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CiYjNDM7CS8qIFBvcnQgNCBpcyBjb25uZWN0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgRU43NTEyL0VONzUyMSBHUEhZLiAqLwomIzQzOwljYXNlIDQ6CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJLyogUG9ydCA1IGlzIHRoZSAxIEdiaXQvcyBUUkdNSUkgY2FzY2FkZSB0byB0aGUgZXh0ZXJuYWwgTVQ3NTMwLiAqLwomIzQzOwljYXNlIDU6CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSwKJiM0MzsJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwomIzQzOwkJY29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJLyogUG9ydCA2IGlzIHRoZSAxIEdiaXQvcyBDUFUgbGluayB0byBHRE0xLiAqLwomIzQzOwljYXNlIDY6CiYjNDM7CQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLAomIzQzOwkJCSAgY29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQKIG10NzUzMF9tYWNfY29uZmlnKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVuc2lnbmVkIGludCBtb2RlLAogCQkgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCkBAIC0zMDU5LDYgJiM0MzszNDMzLDkgQEAgc3RhdGljIHZvaWQgbXQ3NTN4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAJfQogCiAJcmVnbWFwX3NldF9iaXRzKHByaXYtJmd0O3JlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC0mZ3Q7aW5kZXgpLCBtY3IpOwomIzQzOwomIzQzOwlpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpCiYjNDM7CQltdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShkcCk7CiB9CiAKIHN0YXRpYyB2b2lkIG10NzUzeF9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZykKQEAgLTMyOTgsMTAgJiM0MzszNjc1LDExIEBAIG10NzUzeF9jb25kdWl0X3N0YXRlX2NoYW5nZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiAKIAkvKiBTZXQgdGhlIENQVSBwb3J0IHRvIHRyYXAgZnJhbWVzIHRvIGZvciBNVDc1MzAuIFRyYXBwZWQgZnJhbWVzIHdpbGwgYmUKIAkgKiBmb3J3YXJkZWQgdG8gdGhlIG51bWVyaWNhbGx5IHNtYWxsZXN0IENQVSBwb3J0IHdob3NlIGNvbmR1aXQKLQkgKiBpbnRlcmZhY2UgaXMgdXAuCiYjNDM7CSAqIGludGVyZmFjZSBpcyB1cC4gTk9URTogJiMzNDtDUFUgcG9ydCYjMzQ7IGNhbiBhbHNvIG1lYW4gYW4gdXBzdHJlYW0gRFNBIGxpbmsuCiAJICovCiAJaWYgKHByaXYtJmd0O2lkICE9IElEX01UNzUzMCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX01UNzYyMSAmYW1wOyZhbXA7Ci0JICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUyOCkKJiM0MzsJICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUyOCAmYW1wOyZhbXA7IHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxICZhbXA7JmFtcDsKJiM0MzsJICAgIHByaXYtJmd0O2lkICE9IElEX0VONzUxMjIxX0VYVCkKIAkJcmV0dXJuOwogCiAJbWFzayA9IEJJVChjcHVfZHAtJmd0O2luZGV4KTsKQEAgLTMzOTMsNiAmIzQzOzM3NzEsNzYgQEAgc3RhdGljIGludCBtdDc5ODhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCXJldHVybiBtdDc1MzFfc2V0dXBfY29tbW9uKGRzKTsKIH0KIAomIzQzOy8qIDEgaWYgcGFzc3Rocm91Z2gsIG5lZ2F0aXZlIGlmIGVycm9yLiAqLwomIzQzO3N0YXRpYyBpbnQgbXQ3NTN4X2NoZWNrX3Bhc3N0aHJvdWdoKHN0cnVjdCBkZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHMsICpwb3J0OwomIzQzOwlpbnQgcGFzc3Rocm91Z2hfcG9ydHMgPSAwOwomIzQzOwlpbnQgZW5hYmxlZF9wb3J0cyA9IDA7CiYjNDM7CiYjNDM7CXBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LSZndDtvZl9ub2RlLCAmIzM0O3BvcnRzJiMzNDspOwomIzQzOwlpZiAoIXBvcnRzKQomIzQzOwkJcG9ydHMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtJmd0O29mX25vZGUsICYjMzQ7ZXRoZXJuZXQtcG9ydHMmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICghcG9ydHMpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O25vIHBvcnRzIGNoaWxkIG5vZGUgZm91bmRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBvcnRzLCBwb3J0KSB7CiYjNDM7CQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmxpbms7CiYjNDM7CiYjNDM7CQllbmFibGVkX3BvcnRzJiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWxpbmsgPSBvZl9wYXJzZV9waGFuZGxlKHBvcnQsICYjMzQ7ZXRoZXJuZXQmIzM0OywgMCk7CiYjNDM7CQlpZiAoIWxpbmspCiYjNDM7CQkJbGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgJiMzNDtsaW5rJiMzNDssIDApOwomIzQzOwomIzQzOwkJaWYgKCFsaW5rKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJb2Zfbm9kZV9wdXQobGluayk7CiYjNDM7CiYjNDM7CQlwYXNzdGhyb3VnaF9wb3J0cyYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2Zfbm9kZV9wdXQocG9ydHMpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBBIHN3aXRjaCBpcyBjb25zaWRlcmVkIHBhc3N0aHJvdWdoIGlmIGV4YWN0bHkgdHdvIGF2YWlsYWJsZQomIzQzOwkgKiBwb3J0cyBoYXZlIGFuICYjMzQ7ZXRoZXJuZXQmIzM0OyBvciAmIzM0O2xpbmsmIzM0OyBwaGFuZGxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBhc3N0aHJvdWdoX3BvcnRzICZndDsgMiB8fAomIzQzOwkgICAgKHBhc3N0aHJvdWdoX3BvcnRzID09IDIgJmFtcDsmYW1wOyBlbmFibGVkX3BvcnRzICE9IDIpCiYjNDM7CSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7T25seSB0d28gcG9ydHMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFzc3Rocm91Z2hfcG9ydHMgPT0gMjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogTm8gbWFuaXB1bGF0aW9uIG9mIGZvcndhcmRpbmcgcnVsZXMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlICovCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHsKJiM0MzsJLmdldF90YWdfcHJvdG9jb2wJPSBtdGtfZ2V0X3RhZ19wcm90b2NvbCwKJiM0MzsJLnNldHVwCQkJPSBtdDc1M3hfc2V0dXAsCiYjNDM7CS50ZWFyZG93bgkJPSBtdDc1M3hfdGVhcmRvd24sCiYjNDM7CS5wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCA9IG10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCwKJiM0MzsJLmdldF9zdHJpbmdzCQk9IG10NzUzMF9nZXRfc3RyaW5ncywKJiM0MzsJLmdldF9ldGh0b29sX3N0YXRzCT0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLAomIzQzOwkuZ2V0X3NzZXRfY291bnQJCT0gbXQ3NTMwX2dldF9zc2V0X2NvdW50LAomIzQzOwkuZ2V0X2V0aF9tYWNfc3RhdHMJPSBtdDc1MzBfZ2V0X2V0aF9tYWNfc3RhdHMsCiYjNDM7CS5nZXRfcm1vbl9zdGF0cwkJPSBtdDc1MzBfZ2V0X3Jtb25fc3RhdHMsCiYjNDM7CS5nZXRfZXRoX2N0cmxfc3RhdHMJPSBtdDc1MzBfZ2V0X2V0aF9jdHJsX3N0YXRzLAomIzQzOwkuZ2V0X3N0YXRzNjQJCT0gbXQ3NTMwX2dldF9zdGF0czY0LAomIzQzOwkucG9ydF9lbmFibGUJCT0gbXQ3NTMwX3BvcnRfZW5hYmxlLAomIzQzOwkucG9ydF9kaXNhYmxlCQk9IG10NzUzMF9wb3J0X2Rpc2FibGUsCiYjNDM7CS5waHlsaW5rX2dldF9jYXBzCT0gbXQ3NTN4X3BoeWxpbmtfZ2V0X2NhcHMsCiYjNDM7CS5zdXBwb3J0X2VlZQkJPSBkc2Ffc3VwcG9ydHNfZWVlLAomIzQzOwkuc2V0X21hY19lZWUJCT0gbXQ3NTN4X3NldF9tYWNfZWVlLAomIzQzOwkuY29uZHVpdF9zdGF0ZV9jaGFuZ2UJPSBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2UsCiYjNDM7fTsKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7CiAJLmdldF90YWdfcHJvdG9jb2wJPSBtdGtfZ2V0X3RhZ19wcm90b2NvbCwKIAkuc2V0dXAJCQk9IG10NzUzeF9zZXR1cCwKQEAgLTM1MTksMTQgJiM0MzszOTY3LDQwIEBAIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXSA9IHsKIAkJLnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsCiAJCS5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcywKIAl9LAomIzQzOwlbSURfRU43NTEyMjFdID0gewomIzQzOwkJLmlkID0gSURfRU43NTEyMjEsCiYjNDM7CQkucGNzX29wcyA9ICZhbXA7bXQ3NTMwX3Bjc19vcHMsCiYjNDM7CQkuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsCiYjNDM7CQkucGh5X3JlYWRfYzIyID0gbXQ3NTMxX2luZF9jMjJfcGh5X3JlYWQsCiYjNDM7CQkucGh5X3dyaXRlX2MyMiA9IG10NzUzMV9pbmRfYzIyX3BoeV93cml0ZSwKJiM0MzsJCS5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCwKJiM0MzsJCS5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlLAomIzQzOwkJLm1hY19wb3J0X2dldF9jYXBzID0gZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMsCiYjNDM7CQkubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsCiYjNDM7CX0sCiYjNDM7CVtJRF9FTjc1MTIyMV9FWFRdID0gewomIzQzOwkJLmlkID0gSURfRU43NTEyMjFfRVhULAomIzQzOwkJLnBjc19vcHMgPSAmYW1wO210NzUzMF9wY3Nfb3BzLAomIzQzOwkJLnN3X3NldHVwID0gbXQ3NTMwX3NldHVwLAomIzQzOwkJLnBoeV9yZWFkX2MyMiA9IG10NzUzMF9waHlfcmVhZF9jMjIsCiYjNDM7CQkucGh5X3dyaXRlX2MyMiA9IG10NzUzMF9waHlfd3JpdGVfYzIyLAomIzQzOwkJLnBoeV9yZWFkX2M0NSA9IG10NzUzMF9waHlfcmVhZF9jNDUsCiYjNDM7CQkucGh5X3dyaXRlX2M0NSA9IG10NzUzMF9waHlfd3JpdGVfYzQ1LAomIzQzOwkJLm1hY19wb3J0X2dldF9jYXBzID0gbXQ3NTMwX21hY19wb3J0X2dldF9jYXBzLAomIzQzOwkJLm1hY19wb3J0X2NvbmZpZyA9IG10NzUzMF9tYWNfY29uZmlnLAomIzQzOwl9LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7CiAKIGludAogbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpCiB7CiYjNDM7CWludCBwYXNzdGhyb3VnaCA9IG10NzUzeF9jaGVja19wYXNzdGhyb3VnaChwcml2LSZndDtkZXYpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtJmd0O2RldjsKIAomIzQzOwlpZiAocGFzc3Rocm91Z2ggJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBhc3N0aHJvdWdoOwomIzQzOwogCXByaXYtJmd0O2RzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2LSZndDtkcyksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0mZ3Q7ZHMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzU0NCw3ICYjNDM7NDAxOCwxNCBAQCBtdDc1MzBfcHJvYmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdikKIAlwcml2LSZndDtpZCA9IHByaXYtJmd0O2luZm8tJmd0O2lkOwogCXByaXYtJmd0O2RldiA9IGRldjsKIAlwcml2LSZndDtkcy0mZ3Q7cHJpdiA9IHByaXY7Ci0JcHJpdi0mZ3Q7ZHMtJmd0O29wcyA9ICZhbXA7bXQ3NTMwX3N3aXRjaF9vcHM7CiYjNDM7CiYjNDM7CWlmIChwYXNzdGhyb3VnaCkgewomIzQzOwkJcHJpdi0mZ3Q7ZHMtJmd0O29wcyA9ICZhbXA7bXQ3NTMwX3Bhc3N0aHJvdWdoX3N3aXRjaF9vcHM7CiYjNDM7CQlwcml2LSZndDtpc19wYXNzdGhyb3VnaCA9IHRydWU7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwcml2LSZndDtkcy0mZ3Q7b3BzID0gJmFtcDttdDc1MzBfc3dpdGNoX29wczsKJiM0MzsJfQomIzQzOwogCXByaXYtJmd0O2RzLSZndDtwaHlsaW5rX21hY19vcHMgPSAmYW1wO210NzUzeF9waHlsaW5rX21hY19vcHM7CiAJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3JlZ19tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtwcml2LSZndDtzdGF0c19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaCBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAppbmRleCAyYmJiZTYxN2I1MmVlLi4xYTQzMjk3NDljMGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oCkBAIC0yNCw2ICYjNDM7MjQsOCBAQCBlbnVtIG10NzUzeF9pZCB7CiAJSURfRU43NTgxID0gNCwKIAlJRF9BTjc1ODMgPSA1LAogCUlEX0VONzUyOCA9IDYsCiYjNDM7CUlEX0VONzUxMjIxID0gNywKJiM0MzsJSURfRU43NTEyMjFfRVhUID0gOCwKIH07CiAKICNkZWZpbmUJTlVNX1RSR01JSV9DVFJMCQkJNQpAQCAtNDAsNiAmIzQzOzQyLDcgQEAgZW51bSBtdDc1M3hfaWQgewogLyogUmVnaXN0ZXIgZm9yIEFSTCBnbG9iYWwgY29udHJvbCAqLwogI2RlZmluZSBNVDc1M1hfQUdDCQkJMHhjCiAjZGVmaW5lICBMT0NBTF9FTgkJCUJJVCg3KQomIzQzOyNkZWZpbmUgIEFHQ19MMkxFTl9DSEsJCQlCSVQoNCkKIAogLyogUmVnaXN0ZXIgZm9yIE1BQyBmb3J3YXJkIGNvbnRyb2wgKi8KICNkZWZpbmUgTVQ3NTNYX01GQwkJCTB4MTAKQEAgLTM1NSw2ICYjNDM7MzU4LDkgQEAgZW51bSBtdDc1MzBfdmxhbl9wb3J0X2FjY19mcm0gewogI2RlZmluZSBNVDc1M1hfUE1DUl9QKHgpCQkoMHgzMDAwICYjNDM7ICgoeCkgKiAweDEwMCkpCiAjZGVmaW5lICBQTUNSX0lGR19YTUlUX01BU0sJCUdFTk1BU0soMTksIDE4KQogI2RlZmluZSAgUE1DUl9JRkdfWE1JVCh4KQkJRklFTERfUFJFUChQTUNSX0lGR19YTUlUX01BU0ssIHgpCiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzk2CQkwCiYjNDM7I2RlZmluZSAgICBQTUNSX0lGR19YTUlUX1JBTkQJCTEKJiM0MzsjZGVmaW5lICAgIFBNQ1JfSUZHX1hNSVRfNjQJCTIKICNkZWZpbmUgIFBNQ1JfRVhUX1BIWQkJCUJJVCgxNykKICNkZWZpbmUgIFBNQ1JfTUFDX01PREUJCQlCSVQoMTYpCiAjZGVmaW5lICBNVDc1MzBfRk9SQ0VfTU9ERQkJQklUKDE1KQpAQCAtNTgzLDYgJiM0Mzs1ODksOCBAQCBlbnVtIG10NzUzMV9jbGtfc2tldyB7CiAjZGVmaW5lIE1UNzUzWF9NVFJBUAkJCTB4NzgwNAogI2RlZmluZSAgTVQ3NTMwX1A1X1BIWTBfU0VMCQlCSVQoMjApCiAjZGVmaW5lICBNVDc1MzBfQ0hHX1RSQVAJCUJJVCgxNikKJiM0MzsjZGVmaW5lICBNVDc1MzBfQ0tfU0VMCQkJQklUKDE1KQomIzQzOyNkZWZpbmUgIE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFCUJJVCgxNCkKICNkZWZpbmUgIE1UNzUzMF9QNV9NQUNfU0VMCQlCSVQoMTMpCiAjZGVmaW5lICBNVDc1MzBfUDZfRElTCQkJQklUKDgpCiAjZGVmaW5lICBNVDc1MzBfUDVfUkdNSUlfTU9ERQkJQklUKDcpCkBAIC01OTksNiAmIzQzOzYwNyw4IEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7CiAvKiBSZWdpc3RlciBmb3IgVE9QIHNpZ25hbCBjb250cm9sICovCiAjZGVmaW5lIE1UNzUzMF9UT1BfU0lHX0NUUkwJCTB4NzgwOAogI2RlZmluZSAgVE9QX1NJR19DVFJMX05PUk1BTAkJKEJJVCgxNykgfCBCSVQoMTYpKQomIzQzOy8qIFVuZG9jdW1lbnRlZCAqLwomIzQzOyNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9CMAkJQklUKDApCiAKICNkZWZpbmUgTVQ3NTMxX1RPUF9TSUdfU1IJCTB4NzgwYwogI2RlZmluZSAgUEFEX0RVQUxfU0dNSUlfRU4JCUJJVCgxKQpAQCAtNjQ1LDE4ICYjNDM7NjU1LDMxIEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7CiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkNLX1JUVAkJMHg3YTA0CiAjZGVmaW5lICBEUVMxX0dBVEUJCQlCSVQoMzEpCiAjZGVmaW5lICBEUVMwX0dBVEUJCQlCSVQoMzApCiYjNDM7LyogVW5kb2N1bWVudGVkICovCiYjNDM7I2RlZmluZSAgRU43NTEyMjFfQjE3CQkJQklUKDE3KQogCiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkQoeCkJCSgweDdhMTAgJiM0MzsgKHgpICogOCkKICNkZWZpbmUgIEJTTElQX0VOCQkJQklUKDMxKQogI2RlZmluZSAgRURHRV9DSEsJCQlCSVQoMzApCiYjNDM7I2RlZmluZSAgUkRfVkFMVUVfTUFTSwkJCUdFTk1BU0soMjMsIDE2KQomIzQzOyNkZWZpbmUgIFJEX0VSUl9NQVNLCQkJR0VOTUFTSygxMSwgOCkKICNkZWZpbmUgIFJEX1RBUF9NQVNLCQkJR0VOTUFTSyg2LCAwKQogI2RlZmluZSAgUkRfVEFQKHgpCQkJRklFTERfUFJFUChSRF9UQVBfTUFTSywgeCkKJiM0MzsvKiBUcmFpbmluZyBkb2VzIG5vdCB0cnkgYW55dGhpbmcgYmV5b25kIHRoaXMgKi8KJiM0MzsjZGVmaW5lICBURF9UQVBfTUFYCQkJNjQKIAogI2RlZmluZSBNVDc1MzBfVFJHTUlJX1RYQ1RSTAkJMHg3YTQwCiAjZGVmaW5lICBUUkFJTl9UWEVOCQkJQklUKDMxKQogI2RlZmluZSAgVFhDX0lOVgkJCUJJVCgzMCkKICNkZWZpbmUgIFRYX1JTVAkJCQlCSVQoMjgpCiAKJiM0MzsjZGVmaW5lIEVONzUzMF9UUkdNSUlfVERfQ1RSTCh4KQkoMHg3YTUwICYjNDM7ICh4KSAqIDgpCiYjNDM7I2RlZmluZSAgIFRHTUlJX1REX1RBUF9NQVNLCQlHRU5NQVNLKDExLCA4KQomIzQzOyNkZWZpbmUgICBUR01JSV9URF9QQVRfTUFTSwkJR0VOTUFTSyg3LCAwKQomIzQzOy8qIFVzZSBhIDAxMDEwMTAxIGJpdCBwYXR0ZXJuICovCiYjNDM7I2RlZmluZSAgIFRHTUlJX1REX1BBVAkJCTB4NTUKJiM0MzsjZGVmaW5lICAgVEdNSUlfVERfRkFJTF9QQVQJCTB4YWEKJiM0MzsKICNkZWZpbmUgTVQ3NTMwX1RSR01JSV9URF9PRFQoaSkJCSgweDdhNTQgJiM0MzsgOCAqIChpKSkKICNkZWZpbmUgIFREX0RNX0RSVlBfTUFTSwkJR0VOTUFTSygzLCAwKQogI2RlZmluZSAgVERfRE1fRFJWUCh4KQkJCUZJRUxEX1BSRVAoVERfRE1fRFJWUF9NQVNLLCB4KQpAQCAtNzQ3LDggJiM0Mzs3NzAsNiBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwgewogI2RlZmluZSAgTVQ3NTMxX1BIWV9QTExfT0ZGCQlCSVQoNSkKICNkZWZpbmUgIE1UNzUzMV9QSFlfUExMX0JZUEFTU19NT0RFCUJJVCg0KQogCi0jZGVmaW5lIE1UNzUzWF9DVFJMX1BIWV9BRERSKGFkZHIpCSgoKGFkZHIpICYjNDM7IDEpICZhbXA7IChQSFlfTUFYX0FERFIgLSAxKSkKLQogI2RlZmluZSBDT1JFX1BMTF9HUk9VUDUJCQkweDQwNAogI2RlZmluZSAgUkdfTENERFNfUENXX05DUE8xX01BU0sJR0VOTUFTSygxNSwgMCkKICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPMSh4KQkJRklFTERfUFJFUChSR19MQ0REU19QQ1dfTkNQTzFfTUFTSywgeCkKQEAgLTc2NCw2ICYjNDM7Nzg1LDkgQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHsKICNkZWZpbmUgIFJHX0xDQ0RTX0MoeCkJCQlGSUVMRF9QUkVQKFJHX0xDQ0RTX0NfTUFTSywgeCkKICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPX0NIRwkJQklUKDMpCiAKJiM0MzsjZGVmaW5lIENPUkVfUExMX0dST1VQOAkJCTB4NDA3CiYjNDM7I2RlZmluZSAgUkdfTENERFNfU1NDX0VOCQlCSVQoMTApCiYjNDM7CiAjZGVmaW5lIENPUkVfUExMX0dST1VQMTAJCTB4NDA5CiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEFfTUFTSwlHRU5NQVNLKDExLCAwKQogI2RlZmluZSAgUkdfTENERFNfU1NDX0RFTFRBKHgpCQlGSUVMRF9QUkVQKFJHX0xDRERTX1NTQ19ERUxUQV9NQVNLLCB4KQpAQCAtODg2LDYgJiM0Mzs5MTAsOSBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8gewogICogQGRldjoJCVRoZSBkZXZpY2UgcG9pbnRlcgogICogQGRzOgkJCVRoZSBwb2ludGVyIHRvIHRoZSBkc2EgY29yZSBzdHJ1Y3R1cmUKICAqIEBidXM6CQlUaGUgYnVzIHVzZWQgZm9yIHRoZSBkZXZpY2UgYW5kIGJ1aWx0LWluIFBIWQomIzQzOyAqIEBjaGlsZF9idXM6CQlUaGUgYnVzIGNyZWF0ZWQgYnkgdGhlIGRldmljZSwgb24gTURJTyBpbXBsZW1lbnRhdGlvbnMKJiM0MzsgKgkJCXRoaXMgaXMgYnVzIGluZGlyZWN0bHkgYWNjZXNzZXMgYGJ1c2AsIG9uIE1NSU8KJiM0MzsgKgkJCWltcGxlbWVudGF0aW9ucyB0aGlzIGJ1cyBpcyBwYXJ0IG9mIHRoZSBzd2l0Y2guCiAgKiBAcmVnbWFwOgkJVGhlIHJlZ21hcCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYWxsIHN3aXRjaCByZWdpc3RlcnMKICAqIEByc3RjOgkJVGhlIHBvaW50ZXIgdG8gcmVzZXQgY29udHJvbCB1c2VkIGJ5IE1DTQogICogQGNvcmVfcHdyOgkJVGhlIHBvd2VyIHN1cHBsaWVkIGludG8gdGhlIGNvcmUKQEAgLTg5OSw2ICYjNDM7OTI2LDkgQEAgc3RydWN0IG10NzUzeF9pbmZvIHsKICAqIEBwNV9tb2RlOgkJSG9sZGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHBvcnQgNSBvZiB0aGUgTVQ3NTMwIHN3aXRjaAogICogQHA1X3NnbWlpOgkJRmxhZyBmb3IgZGlzdGluZ3Vpc2hpbmcgaWYgcG9ydCA1IG9mIHRoZSBNVDc1MzEgc3dpdGNoCiAgKgkJCWhhcyBnb3QgU0dNSUkKJiM0MzsgKiBAaXNfcGFzc3Rocm91Z2g6CUlmIHRoaXMgc3dpdGNoIGlzIHRvIHBhc3MgdHJhZmZpYyBiZXR3ZWVuIHRoZSB1cHN0cmVhbQomIzQzOyAqCQkJKENQVSkgcG9ydCBhbmQgYSBzZWNvbmQgZG93bnN0cmVhbSBzd2l0Y2gsIHdpdGhvdXQKJiM0MzsgKgkJCWFsdGVyaW5nIHRoZSBEU0EgdGFnLgogICogQGlycV9kb21haW46CQlJUlEgZG9tYWluIG9mIHRoZSBzd2l0Y2ggaXJxX2NoaXAKICAqIEBjcmVhdGVfc2dtaWk6CVBvaW50ZXIgdG8gZnVuY3Rpb24gY3JlYXRpbmcgU0dNSUkgUENTIGluc3RhbmNlKHMpCiAgKiBAYWN0aXZlX2NwdV9wb3J0czoJSG9sZGluZyB0aGUgYWN0aXZlIENQVSBwb3J0cwpAQCAtOTExLDYgJiM0Mzs5NDEsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYgewogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IGRzYV9zd2l0Y2gJKmRzOwogCXN0cnVjdCBtaWlfYnVzCQkqYnVzOwomIzQzOwlzdHJ1Y3QgbWlpX2J1cwkJKmNoaWxkX2J1czsKIAlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOwogCXN0cnVjdCByZXNldF9jb250cm9sCSpyc3RjOwogCXN0cnVjdCByZWd1bGF0b3IJKmNvcmVfcHdyOwpAQCAtOTIzLDYgJiM0Mzs5NTQsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYgewogCWJvb2wJCQlwNV9zZ21paTsKIAl1OAkJCW1pcnJvcl9yeDsKIAl1OAkJCW1pcnJvcl90eDsKJiM0MzsJYm9vbAkJCWlzX3Bhc3N0aHJvdWdoOwogCXN0cnVjdCBtdDc1MzBfcG9ydAlwb3J0c1tNVDc1MzBfTlVNX1BPUlRTXTsKIAlzdHJ1Y3QgbXQ3NTN4X3BjcwlwY3NbTVQ3NTMwX05VTV9QT1JUU107CiAJLyogcHJvdGVjdCBhbW9uZyBwcm9jZXNzZXMgZm9yIHJlZ2lzdGVycyBhY2Nlc3MqLwpAQCAtOTYxLDYgJiM0Mzs5OTMsMTYgQEAgc3RydWN0IG10NzUzMF9od19zdGF0cyB7CiBpbnQgbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpOwogdm9pZCBtdDc1MzBfcmVtb3ZlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpOwogCiYjNDM7LyoKJiM0MzsgKiBXaGVuIGFuIE1NSU8gYmFzZWQgc3dpdGNoIGhhcyBhbiBNRElPIGJ1cyB3aGljaCBjb250YWlucyBhIGRvd25zdHJlYW0gTURJTwomIzQzOyAqIHN3aXRjaCwgdGhlIE1ESU8gYnVzIGlzIG5vdCBub3JtYWxseSBzZXR1cCB1bnRpbCBtdDc1M3hfc2V0dXAoKSBoYXMgYmVlbgomIzQzOyAqIGNhbGxlZC4gQnV0IG10NzUzeF9zZXR1cCgpIGlzIG5vdCBjYWxsZWQgdW50aWwgRFNBIHNlZXMgdGhhdCBldmVyeSBzd2l0Y2ggaW4KJiM0MzsgKiB0aGUgdHJlZSBoYXMgYmVlbiBwcm9iZWQuIENhbGxpbmcgbXQ3NTMwX3NldHVwX21kaW8oKSBhZnRlciBhdCB0aGUgZW5kIG9mCiYjNDM7ICogdGhlIE1NSU8gcHJvYmUgZnVuY3Rpb24gYWxsb3dzIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB0byByZWdpc3RlciwgY29tcGxldGluZwomIzQzOyAqIHRoZSB0cmVlLgomIzQzOyAqLwomIzQzO2ludCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpOwomIzQzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXTsKIAogI2VuZGlmIC8qIF9fTVQ3NTMwX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBMaW51eCBLZXJuZWwgUGF0Y2gqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBpdC4gRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBMb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIHRoZXNlIGZpbGVzOiBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxgLCBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNgLCBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmNgLCBgZHJpdmVycy9uZXQvZHNhL210NzUzMC5jYCwgYW5kIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhgLgoKUmlnaHQsIE1UNzUzMC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gTGV0JiMzOTtzIGNvbmZpcm06IGl0JiMzOTtzIHRoZSBNZWRpYVRlayAvIEVjb05ldCBNVDc1MzAgRFNBIGV0aGVybmV0IHN3aXRjaCBkcml2ZXIuIE5vdyBjb21lcyB0aGUgY3JpdGljYWwgcGFydDogY2FuIHdlICphY3R1YWxseSogZ2V0IGF0IHRoaXMgdGhpbmcgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyBJIG5lZWQgdG8ga25vdyB0aGUgdGFyZ2V0IGhhcmR3YXJlLiBJcyBpdCBzb21ldGhpbmcgdGhhdCYjMzk7cyBsaWtlbHkgdG8gYmUgc3VwcG9ydGVkIGJ5IFFFTVUgb24gYW1kNjQsIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXA/IFRoaXMgaXMgd2hlcmUgSSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgcHJvYmluZyBtZXRob2RzLgoKSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgZ2l0IHJlcG8sIHByb2JhYmx5IHVzaW5nIGBnaXQgZ3JlcGAgYW5kIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiB0aGUgTVQ3NTMwIGlzIGhvb2tlZCB1cC4gSXMgaXQgTURJTywgTU1JTywgUGxhdGZvcm0sIFNQSSwgSTJDLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgYnVzIGl0IHJlbGllcyBvbiBpcyBlc3NlbnRpYWwuIFRoZW4sIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB3ZSBjYW4gc2ltdWxhdGUgaXQsIGVtdWxhdGUgaXQsIG9yIG90aGVyd2lzZSByZWFjaCBpdCB3aXRoaW4gdGhlIGZ1enppbmcgZnJhbWV3b3JrLiBJZiBpdCByZXF1aXJlcyBzb21lIG9ic2N1cmUgaGFyZHdhcmUgSSBjYW4mIzM5O3QgZWFzaWx5IGVtdWxhdGUsIHRoZW4gd2UmIzM5O2xsIGhhdmUgYSB0b3VnaCB0aW1lLiBUaW1lIHRvIHJ1biBncmVwcGVyIG9yIHJlYWQgdGhlIEtjb25maWcgZmlsZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfRFNBX01UNzUzMCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvS2NvbmZpZz0yOT1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjMxOmNvbmZpZyBORVRfRFNBX01UNzUzMFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc1MzAgYW5kIE1UNzUzMSBFdGhlcm5ldCBzd2l0Y2ggc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTM0LVx0c2VsZWN0IFJFR01BUF9JUlFcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjM1Olx0aW1wbHkgTkVUX0RTQV9NVDc1MzBfTURJT1xuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6MzY6XHRpbXBseSBORVRfRFNBX01UNzUzMF9NTUlPXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy0zNy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy00Mi1cbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjQzOmNvbmZpZyBORVRfRFNBX01UNzUzMF9NRElPXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIE1UNzUzMCBNRElPIGludGVyZmFjZSBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjQ1Olx0ZGVwZW5kcyBvbiBORVRfRFNBX01UNzUzMFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNDYtXHRzZWxlY3QgTUVESUFURUtfR0VfUEhZXG4tLVxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNTMtXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzo1NDpjb25maWcgTkVUX0RTQV9NVDc1MzBfTU1JT1xuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNTUtXHR0cmlzdGF0ZSBcJiMzNDtNZWRpYVRlayBNVDc1MzAgTU1JTyBpbnRlcmZhY2UgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzo1NjpcdGRlcGVuZHMgb24gTkVUX0RTQV9NVDc1MzBcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTU3LVx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbi0tXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTkVUX0RTQV9LUzg5OTUpIFx0JiM0Mzs9IGtzODk5NS5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXHQmIzQzOz0gbXQ3NTMwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NRElPKSAmIzQzOz0gbXQ3NTMwLW1kaW8ub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICYjNDM7PSBtdDc1MzAtbW1pby5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICYjNDM7PSBtdDc2Mjgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTk0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1UNzUzMCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNVDc1MzAgc3dpdGNoIGlzIGJlaW5nIHByb2JlZCBhbmQgaW5pdGlhbGl6ZWQgaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RlcCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBkcml2ZXIgY29kZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYXJjaGl0ZWN0dXJlIHN1Z2dlc3RzIHRoYXQgdGhlIE1ESU8gYW5kIE1NSU8gdmFyaWFudHMgYXJlIGxpa2VseSB0aGUga2V5IGRyaXZlcnMuIFNvLCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNgIGFuZCBgbXQ3NTMwLW1taW8uY2AuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZHJpdmVycyBhcmUgc3RydWN0dXJlZC4KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIHBhdHRlcm5zIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBNRElPIGRyaXZlciAoYG1kaW9fZHJpdmVyYCkgZm9yIHRoZSBNRElPLWNvbm5lY3RlZCB2YXJpYW50LCBhIHBsYXRmb3JtIGRyaXZlciAoYHBsYXRmb3JtX2RyaXZlcmApIGZvciB0aGUgTU1JTyB2YXJpYW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gQXJlIHRoZXJlIGRldmljZSB0cmVlIChPRikgbWF0Y2ggdGFibGVzIGludm9sdmVkPyBUaGF0JiMzOTtzIGFsbW9zdCBhIGdpdmVuIHRoZXNlIGRheXMsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uZmlybS4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBpZGVudGlmaWVzIHRoZXNlIGRldmljZXMgZHVyaW5nIHRoZSBib290IHByb2Nlc3MgYW5kIGhvdyB0aGUgcmVsZXZhbnQgZHJpdmVyIGlzIGF0dGFjaGVkIHRvIHRoZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgYW5kIGFueSBwb3RlbnRpYWwgcXVpcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFx0XHRcdGJyZWFrO1xuIDEzMTpcdFx0XHR9XG4gMTMyOlx0XHRcdHByaXYtXHUwMDNlcG9ydHNbNSAmIzQzOyBpXS5zZ21paV9wY3MgPSBwY3M7XG4gMTMzOlx0XHR9XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAocmV0IFx1MDAyNlx1MDAyNiBpKVxuIDEzNjpcdFx0XHRtdGtfcGNzX2x5bnhpX2Rlc3Ryb3kocHJpdi1cdTAwM2Vwb3J0c1s1XS5zZ21paV9wY3MpO1xuIDEzNzpcdFxuIDEzODpcdFx0cmV0dXJuIHJldDtcbiAxMzk6XHR9XG4gMTQwOlx0XG4gMTQxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7XG4gMTQyOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7ZWNvbmV0LGVuNzUxMjIxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV9FWFRdLCB9LFxuIDE0MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzYyMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSxcbiAxNDQ6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc1MzBcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMF0sIH0sXG4gMTQ1Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMxXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzFdLCB9LFxuIDE0NjpcdFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gMTQ3Olx0fTtcbiAxNDg6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xuIDE0OTpcdFxuIDE1MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyByZWdtYXBfY29uZmlnID0ge1xuIDE1MTpcdFx0LnJlZ19iaXRzID0gMTYsXG4gMTUyOlx0XHQudmFsX2JpdHMgPSAzMixcbiAxNTM6XHRcdC5yZWdfc3RyaWRlID0gNCxcbiAxNTQ6XHRcdC5tYXhfcmVnaXN0ZXIgPSBNVDc1MzBfQ1JFVixcbiAxNTU6XHRcdC5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX2xvY2ssXG4gMTU2Olx0XHQudW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayxcbiAxNTc6XHR9O1xuIDE1ODpcdFxuIDE1OTpcdHN0YXRpYyBpbnRcbiAxNjA6XHRtdDc1MzBfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIDE2MTpcdHtcbiAxNjI6XHRcdHN0cnVjdCByZWdtYXBfY29uZmlnIHJjID0gcmVnbWFwX2NvbmZpZztcbiAxNjM6XHRcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcbiAxNjQ6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47XG4gMTY1Olx0XHRpbnQgcmV0O1xuIDE2NjpcdFxuIDE2NzpcdFx0ZG4gPSBtZGlvZGV2LVx1MDAzZWRldi5vZl9ub2RlO1xuIDE2ODpcdFxuIDE2OTpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNjgKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgdGhlIEhhcmR3YXJlIEFic3RyYWN0aW9uKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBzZWVpbmcgc29tZXRoaW5nIHBlY3VsaWFyLCBhbmQgSSBuZWVkIHRvIG1ldGhvZGljYWxseSB0cmFjayBkb3duIHRoZSBzb3VyY2UuIEdpdmVuIHRoZSBsaWtlbHkgYXJlYSBvZiB0aGUgcHJvYmxlbSwgSSBrbm93IEkgc2hvdWxkIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuIEkmIzM5O3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgdGhlIG1vcmUgb2J2aW91cyBzdXNwZWN0cywgYnV0IGl0JiMzOTtzIHRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBtdDc1MzAtbW1pby5jYC4gVGhpcyBmaWxlIGFsbW9zdCBjZXJ0YWlubHkgY29udGFpbnMgdGhlIGxvdy1sZXZlbCBtZW1vcnktbWFwcGVkIEkvTyBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zIGZvciB0aGUgTVQ3NTMwIGhhcmR3YXJlLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHdoZXJlIHRoZSByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIGFyZSBkZWZpbmVkLCBhbmQgdGhlIGNyaXRpY2FsIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIGl0c2VsZiBpcyBoYW5kbGVkLiBUaGlzIGlzIGxpa2VseSB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxNjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFwmIzM0O210NzUzMC5oXCYjMzQ7XG4gIDExOlx0XG4gIDEyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OTg4X29mX21hdGNoW10gPSB7XG4gIDEzOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGFuNzU4My1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXG4gIDE0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG4gIDE1Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7ZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFdLCB9LFxuICAxNjpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1Mjgtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxuICAxNzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sXG4gIDE4Olx0XHR7IC8qIHNlbnRpbmVsICovIH1cbiAgMTk6XHR9O1xuICAyMDpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10Nzk4OF9vZl9tYXRjaCk7XG4gIDIxOlx0XG4gIDIyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHN3X3JlZ21hcF9jb25maWcgPSB7XG4gIDIzOlx0XHQubmFtZSA9IFwmIzM0O3N3aXRjaFwmIzM0OyxcbiAgMjQ6XHRcdC5yZWdfYml0cyA9IDE2LFxuICAyNTpcdFx0LnZhbF9iaXRzID0gMzIsXG4gIDI2Olx0XHQucmVnX3N0cmlkZSA9IDQsXG4gIDI3Olx0XHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXG4gIDI4Olx0fTtcbiAgMjk6XHRcbiAgMzA6XHRzdGF0aWMgaW50XG4gIDMxOlx0bXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gIDMyOlx0e1xuICAzMzpcdFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuICAzNDpcdFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XG4gIDM1Olx0XHRpbnQgcmV0O1xuICAzNjpcdFxuICAzNzpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4gIDM4Olx0XHRpZiAoIXByaXYpXG4gIDM5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuICA0MDpcdFxuICA0MTpcdFx0cHJpdi1cdTAwM2VidXMgPSBOVUxMO1xuICA0MjpcdFx0cHJpdi1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAgNDM6XHRcbiAgNDQ6XHRcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XG4gIDQ1Olx0XHRpZiAocmV0KVxuICA0NjpcdFx0XHRyZXR1cm4gcmV0O1xuICA0NzpcdFxuICA0ODpcdFx0cHJpdi1cdTAwM2Vyc3RjID0gZGV2bV9yZXNldF9jb250cm9sX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4gIDQ5Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcnN0YykpIHtcbiAgNTA6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q291bGRuJiMzOTt0IGdldCBvdXIgcmVzZXQgbGluZVxcblwmIzM0Oyk7XG4gIDUxOlx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcnN0Yyk7XG4gIDUyOlx0XHR9XG4gIDUzOlx0XG4gIDU0Olx0XHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7XG4gIDU1Olx0XHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcbiAgNTY6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSBzcGFjZVxcblwmIzM0Oyk7XG4gIDU3Olx0XHRcdHJldHVybiAtRU5YSU87XG4gIDU4Olx0XHR9XG4gIDU5Olx0XG4gIDYwOlx0XHRwcml2LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgYmFzZV9hZGRyLFxuICA2MTpcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnN3X3JlZ21hcF9jb25maWcpO1xuICA2MjpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gIDYzOlx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiAgNjQ6XHRcbiAgNjU6XHRcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4gIDY2Olx0XG4gIDY3Olx0XHRpZiAocmV0KVxuICA2ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA2OTpcdFxuICA3MDpcdFx0cmV0dXJuIG10NzUzMF9zZXR1cF9tZGlvKHByaXYpO1xuICA3MTpcdH1cbiAgNzI6XHRcbiAgNzM6XHRzdGF0aWMgdm9pZCBtdDc5ODhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gIDc0Olx0e1xuICA3NTpcdFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4gIDc2Olx0XG4gIDc3Olx0XHRpZiAocHJpdilcbiAgNzg6XHRcdFx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XG4gIDc5Olx0fVxuICA4MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzU2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgTVQ3NTMwIERyaXZlciBSZWFjaGFiaWxpdHkgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYG10NzUzMGAuLi4gcmlnaHQsIHRoYXQmIzM5O3MgYSBEU0EgZHJpdmVyIGZvciBNZWRpYVRlay9FY29OZXQgZXRoZXJuZXQgc3dpdGNoZXMuIEFuZCBpdCYjMzk7cyBub3QganVzdCB0aGUgTVQ3NTMwOyBpdCBjb3ZlcnMgYSBmYW1pbHkgb2YgdGhlbSwgaW5jbHVkaW5nIE1UNzUzMSwgTVQ3NjIxLCBhbmQgc28gb24uIFRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgU29DLWludGVybmFsIEV0aGVybmV0IHN3aXRjaGVzLCBvciBNRElPL09GLXByb2JlZCBleHRlcm5hbCBzd2l0Y2hlcywgZm91bmQgb24gc3BlY2lmaWMgQVJNL01JUFMgTWVkaWFUZWsvRWNvTmV0L0Fpcm9oYSBTb0NzLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB4ODYvYW1kNjQgUUVNVSBlbnZpcm9ubWVudD8gIENhbiB3ZSBwcm9iZSBvciBlbXVsYXRlIHRoZXNlIERTQSBzd2l0Y2hlcyB3aXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYSBwcm9wZXJseSBjb25zdHJ1Y3RlZCBkZXZpY2UgdHJlZT8KCkxldCBtZSByZXZpZXcgdGhlIHJlYWNoYWJpbGl0eSBjcml0ZXJpYS4gVGhlIHByaW1hcnkgZ2F0ZSBpcyByZWFjaGFiaWxpdHkuIFRoZSBwcm9tcHQgZW1waGFzaXplcyB0aGF0IGZ1enppbmcgc2hvdWxkIG9ubHkgdGFyZ2V0IGNvZGUgdGhhdCAqY2FuKiBhY3R1YWxseSBydW4gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgbWVhbmluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgb3IgdHVuL3RhcC4gIElmIHRoZSBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgaXQmIzM5O3MgYSBuby1nbyBmb3IgZnV6emluZywgbm8gbWF0dGVyIGhvdyBjb21wbGV4IHRoZSBsb2dpYy4KClRoZSBleGFtcGxlcyBvZiAqdW5yZWFjaGFibGUqIGhhcmR3YXJlIGFyZSBpbGx1bWluYXRpbmc6IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDcy9QQ0llIGNhcmRzIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlLiAgQWxzbywgY29kZSBwYXRocyBzcGVjaWZpYyB0byBub24tdGFyZ2V0IGFyY2hpdGVjdHVyZXMuCgpTbywgaG93IGFyZSB0aGVzZSBNRElPIGFuZCBNTUlPIERTQSBkcml2ZXJzIHByb2JlZD8gQ2FuIHN5emthbGxlciBwcm9iZSB0aGVtPyBUaGUga2V5IGlzIHdoZXRoZXIgb3Igbm90IHN5emthbGxlciBvciB1c2Vyc3BhY2UgY2FuIHByb2JlIE9GIHBsYXRmb3JtIGRldmljZXMgb3IgTURJTyBkZXZpY2VzIG9uIGFtZDY0LCBvdXIgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCkFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBPbiBhbWQ2NCwgaXMgdGhlcmUgZXZlbiBhIERUL09GIG9yIHZpcnR1YWwgTURJTyBidXMgb3IgQUNQSSB0YWJsZSBpbnN0YW50aWF0aW5nIGFuIGBlY29uZXQsZW43NTEyMjFgIG9yIGBtZWRpYXRlayxtdDc1MzBgPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRldmljZSBtYXRjaGluZy4gYG10NzUzMC1tZGlvYCBhbmQgYG10NzUzMC1tbWlvYCBzZWVtIHRvIG1hdGNoIG9ubHkgdGhyb3VnaCBgb2ZfZGV2aWNlX2lkYCBlbnRyaWVzLCBzcGVjaWZpY2FsbHkgYG10NzUzMF9vZl9tYXRjaFtdYCBhbmQgYG10Nzk4OF9vZl9tYXRjaFtdYC4gIFRoYXQmIzM5O3MgRGV2aWNlIFRyZWUgdGVycml0b3J5LiBObyBwbGF0Zm9ybSBkZXZpY2UgSURzLCBubyBBQ1BJIGRldmljZSBJRHMsIG5vIFBDSSBkZXZpY2UgSURzIOKAkyBzdHJpY3RseSBPRiBkZXZpY2VzLiBBbmQgdGhlc2UgZGV2aWNlcyBhcmUgZm9yIHNwZWNpZmljIE1lZGlhVGVrL0Vjb05ldCBTb0NzLCB0aGUgbGlrZXMgb2YgRU43NTEyMjEgYW5kIE1UNzYyMSwgd2hpY2ggYXJlIE1JUFMvQVJNLgoKVGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IEluIG91ciB4ODZfNjQvYW1kNjQgUUVNVS9HQ0Ugc2V0dXAsIHRoZXJlJiMzOTtzIG5vIERldmljZSBUcmVlIG5vZGVzIGZvciB0aGVzZSBNZWRpYVRlay9FY29uZXQgc3dpdGNoZXMsIGFuZCB0aGVyZSYjMzk7cyBubyBwaHlzaWNhbCBoYXJkd2FyZSBlaXRoZXIuIFRoZXkmIzM5O3JlIGp1c3Qgbm90IHByZXNlbnQuCgpOb3csIGEgZmluYWwsIGhvcGVmdWwgdGhvdWdodDogQ291bGQgdGhlc2UgRFNBIHN3aXRjaGVzIGJlICptb2NrYWJsZSo/IENvdWxkIHdlIHJlYWNoIHRoZW0gdmlhIHNvbWUgdmlydHVhbCBpbnRlcmZhY2UgbGlrZSBuZXRkZXZzaW0gb3IgZHNhX2xvb3A/IEkgbmVlZCB0byBrbm93IGlmIGBkc2FfbG9vcGAgb3IgbW9jayBkcml2ZXJzIHVzZSBgbXQ3NTMwYC4gIExldCYjMzk7cyBzZWU6IGBkc2FfbG9vcGAgaXMgYSBmaXhlZCwgZHVtbXkgZHJpdmVyIGZvciB0ZXN0aW5nIERTQSwgdXNpbmcgaXRzIG93biBzd2l0Y2ggZHJpdmVyIChgZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNgKS4gSXQgZG9lcyAqbm90KiB1dGlsaXplIGBtdDc1MzAuY2AuIFNvIHRoYXQmIzM5O3Mgb3V0LiBJJiMzOTtsbCB2ZXJpZnkgdGhpcyB3aXRoIGdyZXBwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzUzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNjUzIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTkVUX0RTQV9LUzg5OTUpIFx0JiM0Mzs9IGtzODk5NS5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXHQmIzQzOz0gbXQ3NTMwLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NRElPKSAmIzQzOz0gbXQ3NTMwLW1kaW8ub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01NSU8pICYjNDM7PSBtdDc1MzAtbW1pby5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc2MjgpICYjNDM7PSBtdDc2Mjgub1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE1LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTY6I2luY2x1ZGUgXCYjMzQ7bXQ3NTMwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9MTg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTk6bXQ3NTMwX3JlZ21hcF93cml0ZSh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjAte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBjb250ZXh0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjItXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9NDM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6NDQ6bXQ3NTMwX3JlZ21hcF9yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCAqdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6NDY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBjb250ZXh0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDctXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9NzY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjc3Om10NzUzMF9tZGlvX3JlZ21hcF9sb2NrKHZvaWQgKm1kaW9fbG9jaylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTc4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz04Mj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODM6bXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayh2b2lkICptZGlvX2xvY2spXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy04NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODctXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo4ODpzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgbXQ3NTMwX3JlZ21hcF9idXMgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo4OTpcdC5yZWdfd3JpdGUgPSBtdDc1MzBfcmVnbWFwX3dyaXRlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6OTA6XHQucmVnX3JlYWQgPSBtdDc1MzBfcmVnbWFwX3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05MS19O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTkzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjk0Om10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtOTUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6OTY6XHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqbXQ3NTMxX3Bjc19jb25maWdbMl0gPSB7fTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk3LVx0c3RydWN0IHBoeWxpbmtfcGNzICpwY3M7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTAxLVx0Zm9yIChpID0gcHJpdi1cdTAwM2VwNV9zZ21paSA/IDAgOiAxOyBpIFx1MDAzYyAyOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTAyOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXSA9IGRldm1fa3phbGxvYyhwcml2LVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwMy1cdFx0XHRcdFx0XHQgICAgc2l6ZW9mKHN0cnVjdCByZWdtYXBfY29uZmlnKSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwNC1cdFx0XHRcdFx0XHQgICAgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMDU6XHRcdGlmICghbXQ3NTMxX3Bjc19jb25maWdbaV0pIHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwNi1cdFx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwOS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExMDpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlbmFtZSA9IGkgPyBcJiMzNDtwb3J0NlwmIzM0OyA6IFwmIzM0O3BvcnQ1XCYjMzQ7O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTExOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2VyZWdfYml0cyA9IDE2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTEyOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2V2YWxfYml0cyA9IDMyO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTEzOlx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2VyZWdfc3RyaWRlID0gNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExNDpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlcmVnX2Jhc2UgPSBNVDc1MzFfU0dNSUlfUkVHX0JBU0UoNSAmIzQzOyBpKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExNTpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlbWF4X3JlZ2lzdGVyID0gMHgxN2M7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTY6XHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZWxvY2sgPSBtdDc1MzBfbWRpb19yZWdtYXBfbG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExNzpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNldW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExODpcdFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXHUwMDNlbG9ja19hcmcgPSBcdTAwMjZwcml2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2s7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMjA6XHRcdHJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cdTAwM2VkZXYsIFx1MDAyNm10NzUzMF9yZWdtYXBfYnVzLCBwcml2LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIxOlx0XHRcdFx0XHQgIG10NzUzMV9wY3NfY29uZmlnW2ldKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMi1cdFx0aWYgKElTX0VSUihyZWdtYXApKSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQwLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1MTIyMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFfRVhUXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0MzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc2MjFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMxXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ni1cdHsgLyogc2VudGluZWwgKi8gfVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ3LX07XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDg6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NTMwX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNTU6XHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTU2Olx0LnVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2ssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjEte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYyLVx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVx0c3RydWN0IGRldmljZV9ub2RlICpkbjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNzc6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXHRyYy5sb2NrX2FyZyA9IFx1MDAyNnByaXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxNzpcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdChwcml2LVx1MDAzZWRldiwgXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTgtXHRcdFx0XHRcdHByaXYsIFx1MDAyNnJjKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMjItXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9NVDc1MzEpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjM6XHRcdHByaXYtXHUwMDNlY3JlYXRlX3NnbWlpID0gbXQ3NTMxX2NyZWF0ZV9zZ21paTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIyNC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIyOTptdDc1MzBfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMyLVx0aW50IHJldCA9IDAsIGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjQ3Olx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNDgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjUzOnN0YXRpYyB2b2lkIG10NzUzMF9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1Olx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjU6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBtdDc1MzBfbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjY6XHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY3Olx0LnJlbW92ZSA9IG10NzUzMF9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XHQuc2h1dGRvd24gPSBtdDc1MzBfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjktXHQubWRpb2Rydi5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzA6XHRcdC5uYW1lID0gXCYjMzQ7bXQ3NTMwLW1kaW9cJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XHRcdC5vZl9tYXRjaF90YWJsZSA9IG10NzUzMF9vZl9tYXRjaCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Mjc1Om1kaW9fbW9kdWxlX2RyaXZlcihtdDc1MzBfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMDojaW5jbHVkZSBcJiMzNDttdDc1MzAuaFwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMTEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEzOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxhbjc1ODMtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTEyMjEtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNjpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xOC1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTMxPW10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MzM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cdHZvaWQgX19pb21lbSAqYmFzZV9hZGRyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NDQ6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzA6XHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9NzM9c3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzU6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzctXHRpZiAocHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4Olx0XHRtdDc1MzBfcmVtb3ZlX2NvbW1vbihwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz04MT1zdGF0aWMgdm9pZCBtdDc5ODhfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjgzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz05Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc5ODhfcGxhdGZvcm1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTk3LVx0LmRyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4Olx0XHQubmFtZSA9IFwmIzM0O210NzUzMC1tbWlvXCYjMzQ7LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtOTktXHRcdC5vZl9tYXRjaF90YWJsZSA9IG10Nzk4OF9vZl9tYXRjaCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjY6I2luY2x1ZGUgXCYjMzQ7bXQ3NTMwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE6c3RhdGljIHN0cnVjdCBtdDc1M3hfcGNzICpwY3NfdG9fbXQ3NTN4X3BjcyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMi17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XHRyZXR1cm4gY29udGFpbmVyX29mKHBjcywgc3RydWN0IG10NzUzeF9wY3MsIHBjcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNi0vKiBTdHJpbmcsIG9mZnNldCwgYW5kIHJlZ2lzdGVyIHNpemUgaW4gYnl0ZXMgaWYgZGlmZmVyZW50IGZyb20gNCBieXRlcyAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3NTMwX21pYl9kZXNjIG10NzUzMF9taWJbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cdE1JQl9ERVNDKDEsIE1UNzUzMF9QT1JUX01JQl9UWF9EUk9QLCBcJiMzNDtUeERyb3BcJiMzNDspLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTUxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2MzptdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcwOm10NzUzMF9tdXRleF91bmxvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03OC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Nzk6XHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04OC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcdG10NzUzMF9tdXRleF9sb2NrKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEzOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTc6Y29yZV9ybXcoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHNldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTIwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTMwOlx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNjU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNjY6Y29yZV9zZXQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTE3MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3ODptdDc1MzBfZmRiX2NtZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGVudW0gbXQ3NTMwX2ZkYl9jbWQgY21kLCB1MzIgKnJzcClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjExOnN0YXRpYyB2b2lkIG10NzUzMF9wb3J0X2Zhc3RfYWdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxNC1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIzMT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIzMjptdDc1MzBfZmRiX3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBzdHJ1Y3QgbXQ3NTMwX2ZkYiAqZmRiKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI1OD1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNjAtXHRcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI4OC0vKiBTZXQgdXAgc3dpdGNoIGNvcmUgY2xvY2sgZm9yIE1UNzUzMCAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yOTAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE4Om10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzE5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzI5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMwOm10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzI6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMzMy1cdHUzMiBuY3BvMSwgc3NjX2RlbHRhLCB4dGFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zOTE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozOTI6bXQ3NTMxX3BsbF9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozOTQ6XHRlbnVtIG10NzUzMV94dGFsX2ZzZWwgeHRhbDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOTUtXHR1MzIgdG9wX3NpZztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NDc5PXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDgwOmVuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ4MS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5Mz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NDplbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnR4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NTpcdFx0XHRcdCAgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ5Ni1cdFx0XHRcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01NzM9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NzQ6ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTc1LVx0XHQgICAgICB1OCBjbGtfZHJ2bilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTg5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkwOmVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkxOlx0XHRcdCAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU5Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTY3NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY3NjptdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY3Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4MC1cdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnBlZXI7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My1cdHN0cnVjdCBkc2FfbGluayAqZGw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTcyND1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNTptdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjYte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNzpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzI4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzMzOnN0YXRpYyBpbnQgbXQ3NTMwX3BoeV9yZWFkX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mzg6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczOS1cdFx0XHRcdHUxNiB2YWwpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0My1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NDQ6c3RhdGljIGludCBtdDc1MzBfcGh5X3JlYWRfYzQ1KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ1LVx0XHRcdCAgICAgICBpbnQgZGV2YWQsIGludCByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTA6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzUxLVx0XHRcdFx0aW50IHJlZ251bSwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzU2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTc6bXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1OC1cdFx0XHRpbnQgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz04MDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjgwODptdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwOS1cdFx0XHQgaW50IHJlZ251bSwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg1Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODU4Om10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODU5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTU6bXQ3NTMxX2luZF9jMjJfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODk2LVx0XHRcdCB1MTYgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTMxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzI6bXQ3NTN4X3BoeV9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzMte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjkzNDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkzNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTM5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NDA6bXQ3NTN4X3BoeV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldmFkLCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0MS17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0ODptdDc1M3hfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NDkte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1MDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk1MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTY6bXQ3NTN4X3BoeV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTctXHRcdCAgICAgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1OTpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTY0PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTY1Om10NzUzMF9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2Ni1cdFx0ICAgdWludDhfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTcyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3MzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3NDpcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG10NzUzMF9taWJbaV0ubmFtZSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTc3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc4Om10NzUzMF9yZWFkX3BvcnRfc3RhdHMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NzktXHRcdCAgICAgICB1MzIgb2Zmc2V0LCB1OCBzaXplLCB1aW50NjRfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTkyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTkzOm10NzUzMF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5NC1cdFx0XHQgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5NzpcdGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgKm1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTgtXHRpbnQgaTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMTpcdFx0bWliID0gXHUwMDI2bXQ3NTMwX21pYltpXTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDAyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDM6XHRcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgbWliLVx1MDAzZW9mZnNldCwgbWliLVx1MDAzZXNpemUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAwNC1cdFx0XHRcdCAgICAgICBkYXRhICYjNDM7IGkpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMDA4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDA5Om10NzUzMF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxMy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE0Olx0cmV0dXJuIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNS19XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE3OnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTgtXHRcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDIwOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDIxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI2LVx0ICovXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyNzpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1VOSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyOC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAzMDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1NJTkdMRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMzOlx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElQTEVfQ09MTElTSU9OLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzQtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM2Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfVU5JQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM3LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzOC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM5Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfQllURVMsIDIsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0MC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0MjpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FMSUdOX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQzLVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDU6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9ERUZFUlJFRCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ2LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDg6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9MQVRFX0NPTExJU0lPTiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ5LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTGF0ZUNvbGxpc2lvbnMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1MTpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1Mi1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0JZVEVTLCAyLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTUtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNTc6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9NVUxUSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OS1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNjA6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9CUk9BRENBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2MS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX01VTFRJQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY1LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2Ni1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDY3Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfQlJPQURDQVNULCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjgtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXQ3NTMwX3Jtb25fcmFuZ2VzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3My1cdHsgMCwgNjQgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDgyOnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODMtXHRcdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODctXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA4ODpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1VOREVSX1NJWkVfRVJSLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODktXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTA6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9PVkVSX1NaX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDkxLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZW92ZXJzaXplX3BrdHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTI6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9GUkFHX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDkzLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA5NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0pBQkJFUl9FUlIsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA5NS1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDk2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTc6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNjQsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA5OC1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzBdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDk5Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfUEtUX1NaXzY1X1RPXzEyNywgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTAwLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RbMV0pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDE6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfMTI4X1RPXzI1NSwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTAyLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl0pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDM6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTA0LVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RbM10pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDU6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNTEyX1RPXzEwMjMsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwNi1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzRdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTA3Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfUEtUX1NaXzEwMjRfVE9fTUFYLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMDgtXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNlaGlzdFs1XSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwOS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTEwOlx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzY0LCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMTEtXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFswXSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTExMjpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl82NV9UT18xMjcsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExMy1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzFdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE0Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzEyOF9UT18yNTUsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExNS1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE2Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzI1Nl9UT181MTEsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExNy1cdFx0XHQgICAgICAgXHUwMDI2cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE4Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzUxMl9UT18xMDIzLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMTktXHRcdFx0ICAgICAgIFx1MDAyNnJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs0XSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEyMDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl8xMDI0X1RPX01BWCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTIxLVx0XHRcdCAgICAgICBcdTAwMjZybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNV0pO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEyMzpcdCpyYW5nZXMgPSBtdDc1MzBfcm1vbl9yYW5nZXM7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyNC19XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTI2OnN0YXRpYyB2b2lkIG10NzUzMF9yZWFkX3BvcnRfc3RhdHM2NChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjctXHRcdFx0XHQgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RvcmFnZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEzNS1cdCAqL1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODkzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBtdDc1MzBgIERyaXZlcioqCgpBbHJpZ2h0LCBzbyBgbXQ3NTMwYC4uLiByaWdodCwgdGhhdCYjMzk7cyBhIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZHJpdmVyLiBTcGVjaWZpY2FsbHkgZm9yIHRoYXQgTWVkaWFUZWsgb3IgRWNvTmV0IHN3aXRjaCBoYXJkd2FyZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSB0cmlnZ2VyIG9yIHByb2JlIHRoYXQgdGhpbmcgd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIGluIHRoZSBzeXN0ZW0/IFlvdSBrbm93LCB0aGUga2luZCBvZiBzaXR1YXRpb24gd2hlcmUgeW91IG1pZ2h0IGdldCBhIGZhbHNlIHBvc2l0aXZlIG9yIGFuIHVuZXhwZWN0ZWQgbG9hZGluZy4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRvIGEgdGhvcm91Z2ggaW52ZXN0aWdhdGlvbi4gQSBkZWVwIGRpdmUgaXMgbmVlZGVkIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGlzIHNvbWVob3cgYmVpbmcgcmVmZXJlbmNlZCBvciBjYWxsZWQgd2l0aG91dCB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgY29uZGl0aW9ucyBiZWluZyBtZXQuIEkgbmVlZCB0byBjb21iIHRocm91Z2ggdGhlIGVudGlyZSBrZXJuZWwgc291cmNlIHRyZWUsIGxvb2tpbmcgZm9yIGFueSBpbnN0YW5jZXMgb2YgZWl0aGVyIGBtdDc1MzBgIG9yIGBtdDc1M3hgIGJlaW5nIG1lbnRpb25lZCBvciB1c2VkLiBBbnkgY2x1ZXMgd2lsbCBiZSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O210NzUzMHxtdDc1M3gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE2MzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTMtLS0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbCNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9ODk9cHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC05My0gICAgICAgICAgU3RhbmRhbG9uZSBNVDc1MzAgYW5kIG11bHRpLWNoaXAgbW9kdWxlIE1UNzUzMCBpbiBNVDc2MjNBSSBTb0NcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjk0OiAgICAgICAgY29uc3Q6IG1lZGlhdGVrLG10NzUzMFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtOTUtXG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MjI3PSRkZWZzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTIzOS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjI0MDogIG10NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydDpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTI0MS0gICAgcGF0dGVyblByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjUzLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MjU0OiAgbXQ3NTMwLWRzYS1wb3J0OlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjU1LSAgICBwYXR0ZXJuUHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbD0zMDg9YWxsT2Y6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzI2LSAgICAgICAgY29tcGF0aWJsZTpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjMyNzogICAgICAgICAgY29uc3Q6IG1lZGlhdGVrLG10NzUzMFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzI4LSAgICB0aGVuOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzI5OiAgICAgICRyZWY6IFwmIzM0OyMvJGRlZnMvbXQ3NTMwLWRzYS1wb3J0XCYjMzQ7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zMzAtICAgICAgcmVxdWlyZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzQ4LSAgICB0aGVuOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzQ5OiAgICAgICRyZWY6IFwmIzM0OyMvJGRlZnMvbXQ3NTMwLWRzYS1wb3J0XCYjMzQ7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNTAtICAgICAgcmVxdWlyZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzc0LSAgICB0aGVuOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6Mzc1OiAgICAgICRyZWY6IFwmIzM0OyMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0XCYjMzQ7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNzYtICAgICAgcmVxdWlyZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MzgxPWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTM5MC0gICAgICAgIHN3aXRjaEAxZiB7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDozOTE6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMFwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTM5Mi0gICAgICAgICAgICByZWcgPSBcdTAwM2MweDFmXHUwMDNlO1xuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTQ1MS0gICAgICAgIHN3aXRjaEAxZiB7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDo0NTI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMFwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTQ1My0gICAgICAgICAgICByZWcgPSBcdTAwM2MweDFmXHUwMDNlO1xuLS1cbk1BSU5UQUlORVJTPTE2ODIxPVM6XHRNYWludGFpbmVkXG5NQUlOVEFJTkVSUzoxNjgyMjpGOlx0ZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcbk1BSU5UQUlORVJTOjE2ODIzOkY6XHRkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuTUFJTlRBSU5FUlM6MTY4MjQ6RjpcdGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuKlxuTUFJTlRBSU5FUlMtMTY4MjUtRjpcdG5ldC9kc2EvdGFnX210ay5jXG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzYS5kdHNpPTUwPVx0XHRzd2l0Y2gwOiBzd2l0Y2hAMWYge1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzYS5kdHNpOjUxOlx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc1MzBcJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNhLmR0c2ktNTItXHRcdFx0cmVnID0gXHUwMDNjMHgxZlx1MDAzZTtcbi0tXG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNuLWJhbmFuYXBpLWJwaS1yMi5kdHM9MjAzPVx0XHRzd2l0Y2hAMWYge1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1iYW5hbmFwaS1icGktcjIuZHRzOjIwNDpcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1iYW5hbmFwaS1icGktcjIuZHRzLTIwNS1cdFx0XHRyZWcgPSBcdTAwM2MweDFmXHUwMDNlO1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzPTE4OD1cdFx0c3dpdGNoQDFmIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzOjE4OTpcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1yZmItZW1tYy5kdHMtMTkwLVx0XHRcdHJlZyA9IFx1MDAzYzB4MWZcdTAwM2U7XG4tLVxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX05FVF9EU0FfS1M4OTk1KSBcdCYjNDM7PSBrczg5OTUub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwKVx0JiM0Mzs9IG10NzUzMC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTURJTykgJiM0Mzs9IG10NzUzMC1tZGlvLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NTUlPKSAmIzQzOz0gbXQ3NTMwLW1taW8ub1xuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NjI4KSAmIzQzOz0gbXQ3NjI4Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE2OiNpbmNsdWRlIFwmIzM0O210NzUzMC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE5Om10NzUzMF9yZWdtYXBfd3JpdGUodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIwLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIyLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTQzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ0Om10NzUzMF9yZWdtYXBfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgKnZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTQ1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ2Olx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gY29udGV4dDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTQ3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTc2PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo3NzptdDc1MzBfbWRpb19yZWdtYXBfbG9jayh2b2lkICptZGlvX2xvY2spXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy03OC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9ODI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjgzOm10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2sodm9pZCAqbWRpb19sb2NrKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTg3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzIG10NzUzMF9yZWdtYXBfYnVzID0ge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODk6XHQucmVnX3dyaXRlID0gbXQ3NTMwX3JlZ21hcF93cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjkwOlx0LnJlZ19yZWFkID0gbXQ3NTMwX3JlZ21hcF9yZWFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtOTEtfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz05Mz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo5NDptdDc1MzFfY3JlYXRlX3NnbWlpKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTUtXHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZW1heF9yZWdpc3RlciA9IDB4MTdjO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE2Olx0XHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cdTAwM2Vsb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX2xvY2s7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTc6XHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZXVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2s7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTgtXHRcdG10NzUzMV9wY3NfY29uZmlnW2ldLVx1MDAzZWxvY2tfYXJnID0gXHUwMDI2cHJpdi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTE5LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIwOlx0XHRyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KHByaXYtXHUwMDNlZGV2LCBcdTAwMjZtdDc1MzBfcmVnbWFwX2J1cywgcHJpdixcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMS1cdFx0XHRcdFx0ICBtdDc1MzFfcGNzX2NvbmZpZ1tpXSk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQwLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQxOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Vjb25ldCxlbjc1MTIyMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFfRVhUXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0MzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttZWRpYXRlayxtdDc2MjFcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWVkaWF0ZWssbXQ3NTMwXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10NzUzMVwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMxXSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ni1cdHsgLyogc2VudGluZWwgKi8gfVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ3LX07XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDg6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NTMwX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1MD1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNTU6XHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTU2Olx0LnVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2ssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjEte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYyLVx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVx0c3RydWN0IGRldmljZV9ub2RlICpkbjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNzc6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXHRyYy5sb2NrX2FyZyA9IFx1MDAyNnByaXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxNzpcdHByaXYtXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdChwcml2LVx1MDAzZWRldiwgXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTgtXHRcdFx0XHRcdHByaXYsIFx1MDAyNnJjKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIyOTptdDc1MzBfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMyLVx0aW50IHJldCA9IDAsIGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjQ3Olx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNDgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjUzOnN0YXRpYyB2b2lkIG10NzUzMF9zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1Olx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjU6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBtdDc1MzBfbWRpb19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjY6XHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY3Olx0LnJlbW92ZSA9IG10NzUzMF9yZW1vdmUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XHQuc2h1dGRvd24gPSBtdDc1MzBfc2h1dGRvd24sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjktXHQubWRpb2Rydi5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzA6XHRcdC5uYW1lID0gXCYjMzQ7bXQ3NTMwLW1kaW9cJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XHRcdC5vZl9tYXRjaF90YWJsZSA9IG10NzUzMF9vZl9tYXRjaCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cdH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Mjc1Om1kaW9fbW9kdWxlX2RyaXZlcihtdDc1MzBfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMDojaW5jbHVkZSBcJiMzNDttdDc1MzAuaFwmIzM0O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMTEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEzOlx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O2Fpcm9oYSxhbjc1ODMtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzU4MV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTEyMjEtc3dpdGNoXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxNjpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtlY29uZXQsZW43NTI4LXN3aXRjaFwmIzM0OywgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3Olx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcJiMzNDssIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzk4OF0sIH0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xOC1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTMxPW10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MzM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cdHZvaWQgX19pb21lbSAqYmFzZV9hZGRyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NDQ6XHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzA6XHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9NzM9c3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6NzU6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzctXHRpZiAocHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4Olx0XHRtdDc1MzBfcmVtb3ZlX2NvbW1vbihwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz04MT1zdGF0aWMgdm9pZCBtdDc5ODhfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjgzOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz05Mz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc5ODhfcGxhdGZvcm1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTk3LVx0LmRyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4Olx0XHQubmFtZSA9IFwmIzM0O210NzUzMC1tbWlvXCYjMzQ7LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtOTktXHRcdC5vZl9tYXRjaF90YWJsZSA9IG10Nzk4OF9vZl9tYXRjaCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjY6I2luY2x1ZGUgXCYjMzQ7bXQ3NTMwLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE6c3RhdGljIHN0cnVjdCBtdDc1M3hfcGNzICpwY3NfdG9fbXQ3NTN4X3BjcyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMi17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XHRyZXR1cm4gY29udGFpbmVyX29mKHBjcywgc3RydWN0IG10NzUzeF9wY3MsIHBjcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNi0vKiBTdHJpbmcsIG9mZnNldCwgYW5kIHJlZ2lzdGVyIHNpemUgaW4gYnl0ZXMgaWYgZGlmZmVyZW50IGZyb20gNCBieXRlcyAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3NTMwX21pYl9kZXNjIG10NzUzMF9taWJbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cdE1JQl9ERVNDKDEsIE1UNzUzMF9QT1JUX01JQl9UWF9EUk9QLCBcJiMzNDtUeERyb3BcJiMzNDspLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTUxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2MzptdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02OT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcwOm10NzUzMF9tdXRleF91bmxvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03OC17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Nzk6XHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04OC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcdG10NzUzMF9tdXRleF9sb2NrKHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEzOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTQtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTc6Y29yZV9ybXcoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHNldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTIwLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTMwOlx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNjMtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNjU9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNjY6Y29yZV9zZXQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTE3MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3ODptdDc1MzBfZmRiX2NtZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGVudW0gbXQ3NTMwX2ZkYl9jbWQgY21kLCB1MzIgKnJzcClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xNzkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjExOnN0YXRpYyB2b2lkIG10NzUzMF9wb3J0X2Zhc3RfYWdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTM6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxNC1cdHUzMiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIzMT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIzMjptdDc1MzBfZmRiX3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBzdHJ1Y3QgbXQ3NTMwX2ZkYiAqZmRiKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTI1OD1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yNjAtXHRcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTI4OC0vKiBTZXQgdXAgc3dpdGNoIGNvcmUgY2xvY2sgZm9yIE1UNzUzMCAqL1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yOTAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzE4Om10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzE5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzI5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMwOm10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzI6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMzMy1cdHUzMiBuY3BvMSwgc3NjX2RlbHRhLCB4dGFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zOTE9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozOTI6bXQ3NTMxX3BsbF9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NDc5PXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDgwOmVuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ4MS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5Mz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NDplbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnR4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NTpcdFx0XHRcdCAgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTQ5Ni1cdFx0XHRcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01NzM9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NzQ6ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTc1LVx0XHQgICAgICB1OCBjbGtfZHJ2bilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTg5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkwOmVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkxOlx0XHRcdCAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU5Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTY3NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjY3NjptdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY3Ny17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4MC1cdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODE6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnBlZXI7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY4My1cdHN0cnVjdCBkc2FfbGluayAqZGw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTcyND1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNTptdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjYte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNzpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzI4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzItXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzMzOnN0YXRpYyBpbnQgbXQ3NTMwX3BoeV9yZWFkX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mzg6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczOS1cdFx0XHRcdHUxNiB2YWwpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0My1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NDQ6c3RhdGljIGludCBtdDc1MzBfcGh5X3JlYWRfYzQ1KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ1LVx0XHRcdCAgICAgICBpbnQgZGV2YWQsIGludCByZWdudW0pXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0OS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTA6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzUxLVx0XHRcdFx0aW50IHJlZ251bSwgdTE2IHZhbClcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzU2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTc6bXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1OC1cdFx0XHRpbnQgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz04MDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjgwODptdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwOS1cdFx0XHQgaW50IHJlZ251bSwgdTE2IGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg1Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODU4Om10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODU5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODk0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTU6bXQ3NTMxX2luZF9jMjJfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODk2LVx0XHRcdCB1MTYgZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTMxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzI6bXQ3NTN4X3BoeV9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzMte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjkzNDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTkzNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTM5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NDA6bXQ3NTN4X3BoeV9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldmFkLCBpbnQgcmVnbnVtKVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0MS17XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQyOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NDc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0ODptdDc1M3hfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NDkte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1MDpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk1MS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTY6bXQ3NTN4X3BoeV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTctXHRcdCAgICAgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTgte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1OTpcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2MC1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTY0PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTY1Om10NzUzMF9nZXRfc3RyaW5ncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1MzIgc3RyaW5nc2V0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2Ni1cdFx0ICAgdWludDhfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTcyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3MzpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3NDpcdFx0ZXRodG9vbF9wdXRzKFx1MDAyNmRhdGEsIG10NzUzMF9taWJbaV0ubmFtZSk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc1LX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTc3PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc4Om10NzUzMF9yZWFkX3BvcnRfc3RhdHMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NzktXHRcdCAgICAgICB1MzIgb2Zmc2V0LCB1OCBzaXplLCB1aW50NjRfdCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTkyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTkzOm10NzUzMF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5NC1cdFx0XHQgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk1LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5NzpcdGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgKm1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTgtXHRpbnQgaTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMDpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMTpcdFx0bWliID0gXHUwMDI2bXQ3NTMwX21pYltpXTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDAyLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDM6XHRcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgbWliLVx1MDAzZW9mZnNldCwgbWliLVx1MDAzZXNpemUsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAwNC1cdFx0XHRcdCAgICAgICBkYXRhICYjNDM7IGkpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMDA4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDA5Om10NzUzMF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxMy1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE0Olx0cmV0dXJuIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNS19XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE3OnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTgtXHRcdFx0XHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE5LXtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDIwOlx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDIxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI2LVx0ICovXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyNzpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1VOSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyOC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjktXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAzMDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1NJTkdMRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzMi1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMzOlx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElQTEVfQ09MTElTSU9OLCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzQtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM2Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfVU5JQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM3LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzOC1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM5Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfQllURVMsIDIsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0MC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0spO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDEtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0MjpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FMSUdOX0VSUiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQzLVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlQWxpZ25tZW50RXJyb3JzKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ0LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDU6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9ERUZFUlJFRCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ2LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ3LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDg6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9MQVRFX0NPTExJU0lPTiwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQ5LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTGF0ZUNvbGxpc2lvbnMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTAtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1MTpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1Mi1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMpO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0JZVEVTLCAyLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTUtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LKTtcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU2LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNTc6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9NVUxUSUNBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OC1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1OS1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LO1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNjA6XHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9CUk9BRENBU1QsIDEsXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2MS1cdFx0XHQgICAgICAgXHUwMDI2bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjMtXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NDpcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX01VTFRJQ0FTVCwgMSxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY1LVx0XHRcdCAgICAgICBcdTAwMjZtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyk7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2Ni1cdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNSZWNlaXZlZE9LICYjNDM7PSBtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSztcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDY3Olx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfQlJPQURDQVNULCAxLFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjgtXHRcdFx0ICAgICAgIFx1MDAyNm1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXQ3NTMwX3Jtb25fcmFuZ2VzW10gPSB7XG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3My1cdHsgMCwgNjQgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4MS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDgyOnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODMtXHRcdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODUte1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODY6XHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODctXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQwMzEKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogTVQ3NTMwIEV0aGVybmV0IFN3aXRjaCBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sYCBhbmQgdGhlIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKmAgZHJpdmVyLiBUaGlzIGlzIHRoZSBNZWRpYVRlay9FY29OZXQvQWlyb2hhIGV0aGVybmV0IHN3aXRjaCBkcml2ZXIgZm9yIHRoZWlyIGVtYmVkZGVkIFNvQ3MsIHNwZWNpZmljYWxseSB0aGUgTVQ3NTMwL01UNzUzMS9NVDc2MjEvTVQ3OTg4L0VONzUxMjIxIGFuZCBzaW1pbGFyIGRldmljZXMuIE15IHRhcmdldCBhcmNoaXRlY3R1cmUgaGVyZSBpcyBhbWQ2NC4KClRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbGlrZSBRRU1VIGFuZCBHQ0Ugb24gYW1kNjQsIHNpbXBseSAqZG9uJiMzOTt0KiBoYXZlIHRoaXMgc3BlY2lmaWMgTWVkaWFUZWsgU29DIHN3aXRjaCBoYXJkd2FyZSBwcmVzZW50LiBUaGVyZSBhcmVuJiMzOTt0IGFueSByZWFkaWx5IGF2YWlsYWJsZSBtb2NrIGRldmljZXMgb3IgdmlydHVhbCBidXNlcyB0byBpbnN0YW50aWF0ZSBhbmQgYmluZCB0aGlzIGRyaXZlciBvbiBhbWQ2NC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYS4gTXkgcmV2aWV3IG9mIHNlY3Rpb24gMiBjbGVhcmx5IHNob3dzIGEgc3RydWN0dXJhbCBwcm9ibGVtOiB0aGUgTVQ3NTMwIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgQVNJQy9Tb0MtaW50ZWdyYXRlZCBzd2l0Y2gsIGFuZCB0aGUgY2hhbmdlcyBpbnZvbHZlIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCB0aGUgZHJpdmVyIGZvciB0aGlzIGRldmljZS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgSSBoYXZlIG5vIHJlYXNvbiB0byB0aGluayB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuCgpUaGVyZWZvcmUsIGdpdmVuIHRoZSBzdHJ1Y3R1cmFsIHVucmVhY2hhYmlsaXR5IG9mIHRoZSBoYXJkd2FyZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuIEkmIzM5O2xsIG5lZWQgdG8gY2xlYXJseSBzdGF0ZSB0aGF0IHRoZSBtb2RpZmljYXRpb25zIHRvdWNoIGRldmljZSB0cmVlIGJpbmRpbmdzIGFuZCB0aGUgTVQ3NTMwL01UNzUzMS9FTjc1MTIyMSBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciwgYW5kIHRoYXQgdGhpcyBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIE15IGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AgYXJlIGVtcHR5LgoKT2theSwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIGFuZCBhZGRzIHN1cHBvcnQgZm9yIEVjb05ldCBFTjc1MTIyMSBTb0NzIGFuZCBwYXNzdGhyb3VnaCBtb2RlIHRvIHRoZSBNZWRpYVRlayBNVDc1MzAgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAqKS4gVGhpcyBkcml2ZXIgY29udHJvbHMgc3BlY2lmaWMgcGh5c2ljYWwgTWVkaWFUZWsvRWNvTmV0IFNvQyBldGhlcm5ldCBzd2l0Y2hlcyBhbmQgTURJTy9NTUlPIGRldmljZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIERldmljZSBUcmVlIGJpbmRpbmdzIGRvY3VtZW50YXRpb24gYW5kIGFkZHMgc3VwcG9ydCBmb3IgRWNvTmV0IEVONzUxMjIxIFNvQ3MgYW5kIHBhc3N0aHJvdWdoIG1vZGUgdG8gdGhlIE1lZGlhVGVrIE1UNzUzMCBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzUzMCopLiBUaGlzIGRyaXZlciBjb250cm9scyBzcGVjaWZpYyBwaHlzaWNhbCBNZWRpYVRlay9FY29OZXQgU29DIGV0aGVybmV0IHN3aXRjaGVzIGFuZCBNRElPL01NSU8gZGV2aWNlcyB0aGF0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTY6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjQ0LjY2ODM2ODcwOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1ODY3ODUxNDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgRGV2aWNlIFRyZWUgYmluZGluZ3MgZG9jdW1lbnRhdGlvbiBhbmQgYWRkcyBzdXBwb3J0IGZvciBFY29OZXQgRU43NTEyMjEgU29DcyBhbmQgcGFzc3Rocm91Z2ggbW9kZSB0byB0aGUgTWVkaWFUZWsgTVQ3NTMwIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKikuIFRoaXMgZHJpdmVyIGNvbnRyb2xzIHNwZWNpZmljIHBoeXNpY2FsIE1lZGlhVGVrL0Vjb05ldCBTb0MgZXRoZXJuZXQgc3dpdGNoZXMgYW5kIE1ESU8vTU1JTyBkZXZpY2VzIHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNDo0NC42NjgzNzQ2MzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTI0OTAzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzOGE3MjZlOTY2YWRkOWMzMDNmMzhjY2ZiMTkxNjc1ZTgxNDAyNmU2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDkgMTY6MDQ6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxcbmluZGV4IDkwYjM1ODJiNzYxOTAuLjEwNmM0MDg3NTI4ZDcgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxcbkBAIC0yOSw2ICsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfFxcbiAgIGFuZCB0aGUgc3dpdGNoIHJlZ2lzdGVycyBhcmUgZGlyZWN0bHkgbWFwcGVkIGludG8gU29DJ3MgbWVtb3J5IG1hcCByYXRoZXIgdGhhblxcbiAgIHVzaW5nIE1ESU8uIFRoZSBEU0EgZHJpdmVyIGN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgTVQ3NjIwIHZhcmlhbnRzLlxcbiBcXG4rICBFY29OZXQgRU43NTEyMjEgU29DcyBoYXZlIGEgbWVtb3J5IG1hcHBlZCBNVDc1MzAgd2l0aCAzeCAxMC8xMDAgUEhZcyBhbmQgMXhcXG4rICBnaWdhYml0IFBIWS4gU29tZSBFTjc1MTIyMSBjaGlwcyBzdWNoIGFzIEVONzUxM0cgYW5kIEVONzUyNkcgaGF2ZSBhIG11bHRpLWNoaXBcXG4rICBtb2R1bGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1UNzUzMCBhcyB3ZWxsIGFzIHRoZSBvbi1kaWUgc3dpdGNoLiBJbiB0aGVzZVxcbisgIHBhY2thZ2VzLCB0aGUgbXVsdGktY2hpcCBtb2R1bGUgaXMgY29ubmVjdGVkIHRvIHBvcnQgNSBvZiB0aGUgb24tZGllIHN3aXRjaFxcbisgIHZpYSBhIFRSR01JSSBsaW5rLlxcbitcXG4gICBUaGVyZSBpcyBvbmx5IHRoZSBzdGFuZGFsb25lIHZlcnNpb24gb2YgTVQ3NTMxLlxcbiBcXG4gICBQb3J0IDUgb24gTVQ3NTMwIHN1cHBvcnRzIHZhcmlvdXMgY29uZmlndXJhdGlvbnM6XFxuQEAgLTczLDYgKzc5LDEzIEBAIGRlc2NyaXB0aW9uOiB8XFxuIFxcbiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LlxcbiBcXG4rICBUaGUgTVQ3NTMwIGFuZCBNVDc1MzEgc3dpdGNoZXMgYXJlIGNhcGFibGUgb2YgYmVpbmcgb3BlcmF0ZWQgaW4gXFxcInBhc3N0aHJvdWdoXFxcIlxcbisgIG1vZGUuIEluIHRoaXMgbW9kZSwgdHJhZmZpYyBpcyB1bmNvbmRpdGlvbmFsbHkgcGFzc2VkIGJldHdlZW4gdGhlIENQVSBwb3J0XFxuKyAgYW5kIHRoZSBEU0EgcG9ydCB3aGljaCBsaW5rcyB0byBhIHNlY29uZCBzd2l0Y2guIFRvIHVzZSBwYXNzdGhyb3VnaCBtb2RlLCB0aGVcXG4rICB1cHN0cmVhbSBzd2l0Y2ggaXMgY29uZmlndXJlZCB3aXRoIGEgRFNBIGxpbmsgdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLiBJblxcbisgIHBhc3N0aHJvdWdoIG1vZGUgdGhlIHVwc3RyZWFtIHN3aXRjaCBpcyByZXN0cmljdGVkLCB3aXRoIG5vIG90aGVyIHBvcnRzIG9yXFxuKyAgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYWxsb3dlZC5cXG4rXFxuIHByb3BlcnRpZXM6XFxuICAgY29tcGF0aWJsZTpcXG4gICAgIG9uZU9mOlxcbkBAIC0xMDQsNiArMTE3LDE0IEBAIHByb3BlcnRpZXM6XFxuICAgICAgICAgICBCdWlsdC1pbiBzd2l0Y2ggb2YgdGhlIEVjb05ldCBFTjc1MjggU29DXFxuICAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1Mjgtc3dpdGNoXFxuIFxcbisgICAgICAtIGRlc2NyaXB0aW9uOlxcbisgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIEVjb05ldCBFTjc1MTIyMSBTb0NcXG4rICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcbitcXG4rICAgICAgLSBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgIE11bHRpLWNoaXAgbW9kdWxlIE1UNzUzMCBpbiBFTjc1MTIyMSBTb0NcXG4rICAgICAgICBjb25zdDogZWNvbmV0LGVuNzUxMjIxXFxuK1xcbiAgIHJlZzpcXG4gICAgIG1heEl0ZW1zOiAxXFxuIFxcbkBAIC0xNTMsOCArMTc0LDggQEAgcHJvcGVydGllczpcXG4gICBtZWRpYXRlayxtY206XFxuICAgICB0eXBlOiBib29sZWFuXFxuICAgICBkZXNjcmlwdGlvbjpcXG4tICAgICAgVXNlZCBmb3IgTVQ3NjIxQVQsIE1UNzYyMURBVCwgTVQ3NjIxU1QgYW5kIE1UNzYyM0FJIFNvQ3Mgd2hpY2ggdGhlIE1UNzUzMFxcbi0gICAgICBzd2l0Y2ggaXMgYSBwYXJ0IG9mIHRoZSBtdWx0aS1jaGlwIG1vZHVsZS5cXG4rICAgICAgVXNlZCBmb3IgTVQ3NjIxQVQsIE1UNzYyMURBVCwgTVQ3NjIxU1QsIE1UNzYyM0FJIGFuZCBFTjc1MTIyMSBTb0NzIHdoaWNoXFxuKyAgICAgIHRoZSBNVDc1MzAgc3dpdGNoIGlzIGEgcGFydCBvZiB0aGUgbXVsdGktY2hpcCBtb2R1bGUuXFxuIFxcbiAgIHJlc2V0LWdwaW9zOlxcbiAgICAgZGVzY3JpcHRpb246IHxcXG5AQCAtMjE2LDYgKzIzNywyMCBAQCAkZGVmczpcXG4gICAgICAgICAgICAgICAgIHBoeS1tb2RlOlxcbiAgICAgICAgICAgICAgICAgICBjb25zdDogaW50ZXJuYWxcXG4gXFxuKyAgbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0OlxcbisgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuKyAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydHMkXFxcIjpcXG4rICAgICAgICBwYXR0ZXJuUHJvcGVydGllczpcXG4rICAgICAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydEBbMC02XSRcXFwiOlxcbisgICAgICAgICAgICBpZjpcXG4rICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF1cXG4rICAgICAgICAgICAgdGhlbjpcXG4rICAgICAgICAgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgICAgICAgICAgcmVnOlxcbisgICAgICAgICAgICAgICAgICBjb25zdDogNlxcbisgICAgICAgICAgICAgICAgcGh5LW1vZGU6XFxuKyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWlcXG4rXFxuICAgbXQ3NTMwLWRzYS1wb3J0OlxcbiAgICAgcGF0dGVyblByb3BlcnRpZXM6XFxuICAgICAgIFxcXCJeKGV0aGVybmV0LSk/cG9ydHMkXFxcIjpcXG5AQCAtMzIzLDYgKzM1OCw3IEBAIGFsbE9mOlxcbiAgICAgICAgICAgICAtIGFpcm9oYSxlbjc1ODEtc3dpdGNoXFxuICAgICAgICAgICAgIC0gYWlyb2hhLGFuNzU4My1zd2l0Y2hcXG4gICAgICAgICAgICAgLSBlY29uZXQsZW43NTI4LXN3aXRjaFxcbisgICAgICAgICAgICAtIGVjb25ldCxlbjc1MTIyMS1zd2l0Y2hcXG4gICAgIHRoZW46XFxuICAgICAgICRyZWY6IFxcXCIjLyRkZWZzL2J1aWx0aW4tZHNhLXBvcnRcXFwiXFxuICAgICAgIHByb3BlcnRpZXM6XFxuQEAgLTMzMCw2ICszNjYsMTYgQEAgYWxsT2Y6XFxuICAgICAgICAgbWVkaWF0ZWssbWNtOiBmYWxzZVxcbiAgICAgICAgIHJlc2V0LW5hbWVzOiBmYWxzZVxcbiBcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBlbnVtOlxcbisgICAgICAgICAgICAtIGVjb25ldCxlbjc1MTIyMVxcbisgICAgdGhlbjpcXG4rICAgICAgJHJlZjogXFxcIiMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0XFxcIlxcbisgICAgICByZXF1aXJlZDpcXG4rICAgICAgICAtIG1lZGlhdGVrLG1jbVxcbitcXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbiBcXG4gZXhhbXBsZXM6XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcXG5pbmRleCAyNGVmNTRmM2RiMmE2Li4yZmQ5ODdmZjg1MTA3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcXG5AQCAtMTM5LDYgKzEzOSw3IEBAIG10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc1MzBfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTEyMjFcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTEyMjFfRVhUXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc2MjFcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc1MzBcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMwXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc1MzFcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMxXSwgfSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xcbmluZGV4IGNmM2JkYjIzYTJkNTQuLjFhMjliMWVlZmIyYzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xcbkBAIC0xMiw2ICsxMiw3IEBAXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10Nzk4OF9vZl9tYXRjaFtdID0ge1xcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXFxuIFxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuNzU4MS1zd2l0Y2hcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTgxXSwgfSxcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTEyMjEtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTI4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10Nzk4OC1zd2l0Y2hcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3OTg4XSwgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuQEAgLTYxLDcgKzYyLDEyIEBAIG10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZXJlZ21hcCk7XFxuIFxcbi1cXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChwcml2LVxcdTAwM2Vkcyk7XFxuK1xcdHJldCA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cXHUwMDNlZHMpO1xcbitcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNcXG5pbmRleCAyOGY5NGNkMjViOTU1Li42ZmQ0NzE5YWFiODliIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xcbkBAIC00Niw2ICs0NiwxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyBtdDc1MzBfbWliW10gPSB7XFxuIFxcdE1JQl9ERVNDKDEsIE1UNzUzMF9QT1JUX01JQl9SWF9BUkxfRFJPUCwgXFxcIlJ4QXJsRHJvcFxcXCIpLFxcbiB9O1xcbiBcXG4rc3RhdGljIGludFxcbittdDc1M3hfY3RybF9waHlfYWRkcihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX0VONzUxMjIxKVxcbitcXHRcXHRyZXR1cm4gMTI7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFwcml2LVxcdTAwM2VtZGlvZGV2KSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHQvKiBEZWZhdWx0IGlzIDFzdCBQSFkgKi9cXG4rXFx0cmV0dXJuIChwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyICsgMSkgXFx1MDAyNiAoUEhZX01BWF9BRERSIC0gMSk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIG10NzUzMF9tdXRleF9sb2NrKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4ge1xcbkBAIC02MywzMiArNzYsMzYgQEAgbXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuIHN0YXRpYyB2b2lkXFxuIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbiB7XFxuK1xcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVxcdTAwM2VidXM7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRpZiAoIWJ1cylcXG4rXFx0XFx0YnVzID0gcHJpdi1cXHUwMDNlY2hpbGRfYnVzO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XFxuIFxcbiBcXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XFxuK1xcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9EQVRBLCByZWcpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCByZWcpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHQvKiBTZWxlY3QgdGhlIEZ1bmN0aW9uIDogREFUQSB3aXRoIG5vIHBvc3QgaW5jcmVtZW50ICovXFxuLVxcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKSxcXG4rXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIGN0bF9waHksXFxuIFxcdFxcdFxcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdC8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJ3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9EQVRBLCB2YWwpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCB2YWwpO1xcbiBlcnI6XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRkZXZfZXJyKFxcdTAwMjZidXMtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcXFxcblxcXCIpO1xcbkBAIC05OSwzMyArMTE2LDM3IEBAIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxcbiBzdGF0aWMgdm9pZFxcbiBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KVxcbiB7XFxuK1xcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVxcdTAwM2VidXM7XFxuIFxcdHUzMiB2YWw7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRpZiAoIWJ1cylcXG4rXFx0XFx0YnVzID0gcHJpdi1cXHUwMDNlY2hpbGRfYnVzO1xcbitcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XFxuIFxcbiBcXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XFxuK1xcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cXG4tXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHQgTUlJX01NRF9EQVRBLCByZWcpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCByZWcpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHQvKiBTZWxlY3QgdGhlIEZ1bmN0aW9uIDogREFUQSB3aXRoIG5vIHBvc3QgaW5jcmVtZW50ICovXFxuLVxcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKSxcXG4rXFx0cmV0ID0gYnVzLVxcdTAwM2V3cml0ZShidXMsIGN0bF9waHksXFxuIFxcdFxcdFxcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycjtcXG4gXFxuIFxcdC8qIFJlYWQgdGhlIGNvbnRlbnQgb2YgdGhlIE1NRCdzIHNlbGVjdGVkIHJlZ2lzdGVyICovXFxuLVxcdHJldCA9IGJ1cy1cXHUwMDNlcmVhZChidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHRNSUlfTU1EX0RBVEEpO1xcbitcXHRyZXQgPSBidXMtXFx1MDAzZXJlYWQoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnI7XFxuIFxcdHZhbCA9IHJldDtcXG5AQCAtMTMzLDggKzE1NCw3IEBAIGNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuIFxcdHZhbCBcXHUwMDI2PSB+bWFzaztcXG4gXFx0dmFsIHw9IHNldDtcXG4gXFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xcbi1cXHRyZXQgPSBidXMtXFx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkciksXFxuLVxcdFxcdFxcdCBNSUlfTU1EX0RBVEEsIHZhbCk7XFxuK1xcdHJldCA9IGJ1cy1cXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHZhbCk7XFxuIGVycjpcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNmJ1cy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHdyaXRlIG1tZCByZWdpc3RlclxcXFxuXFxcIik7XFxuQEAgLTMyNywxMiArMzQ3LDE5IEBAIG10NzUzMF9zZXR1cF9wb3J0NihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXFxuIFxcdHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLCBcXHUwMDI2eHRhbCk7XFxuIFxcdHh0YWwgXFx1MDAyNj0gTVQ3NTMwX1hUQUxfTUFTSztcXG4gXFxuK1xcdC8qIEVONzUxMjIxIG9uLWRpZSBkb2VzIG5vdCByZXBvcnQgY2xvY2sgc3BlZWQgaW4gTVRSQVAgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX0VONzUxMjIxKVxcbitcXHRcXHR4dGFsID0gTVQ3NTMwX1hUQUxfMjVNSFo7XFxuK1xcbiBcXHRpZiAoeHRhbCA9PSBNVDc1MzBfWFRBTF8yNU1IWilcXG4gXFx0XFx0c3NjX2RlbHRhID0gMHg1NztcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzc2NfZGVsdGEgPSAweDg3O1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX01UNzYyMSkge1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaWQgPT0gSURfRU43NTEyMjFfRVhUIHx8IHByaXYtXFx1MDAzZWlkID09IElEX0VONzUxMjIxKSB7XFxuK1xcdFxcdC8qIFBMTCBmcmVxdWVuY3k6IDM2Mi41TWh6ICovXFxuK1xcdFxcdG5jcG8xID0gMHgxZDAwO1xcbitcXHR9IGVsc2UgaWYgKHByaXYtXFx1MDAzZWlkID09IElEX01UNzYyMSkge1xcbiBcXHRcXHQvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi9cXG4gXFx0XFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXFxuIFxcdFxcdFxcdG5jcG8xID0gMHgwNjQwO1xcbkBAIC00NDksNiArNDc2LDI1MSBAQCBtdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0dXNsZWVwX3JhbmdlKDI1LCAzNSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sXFxuK2VuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxcbit7XFxuK1xcdHUzMiB2YWwgPSAwO1xcbitcXG4rXFx0cmVnbWFwX3JlYWQocngtXFx1MDAzZXJlZ21hcCwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0cmVnbWFwX3dyaXRlKHJ4LVxcdTAwM2VyZWdtYXAsIHJlZywgdmFsIHwgRURHRV9DSEspO1xcbitcXHRyZWdtYXBfd3JpdGUocngtXFx1MDAzZXJlZ21hcCwgcmVnLCB2YWwgXFx1MDAyNiB+RURHRV9DSEspO1xcbitcXHRyZWdtYXBfcmVhZChyeC1cXHUwMDNlcmVnbWFwLCByZWcsIFxcdTAwMjZ2YWwpO1xcbitcXG4rXFx0cmV0dXJuIEZJRUxEX0dFVChSRF9WQUxVRV9NQVNLLCB2YWwpID09IFRHTUlJX1REX1BBVCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgIUZJRUxEX0dFVChSRF9FUlJfTUFTSywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsXFxuK1xcdFxcdFxcdFxcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxcbit7XFxuK1xcdGludCBjaGFubmVsO1xcbitcXG4rXFx0cmVnbWFwX3NldF9iaXRzKHR4LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUUkFJTl9UWEVOKTtcXG4rXFxuK1xcdC8qIFB1dCBmYWlsIHBhdHRlcm4gb24gZXZlcnkgY2hhbm5lbCAqL1xcbitcXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFxcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyh0eC1cXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgIFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBUR01JSV9URF9GQUlMX1BBVCkpO1xcbitcXG4rXFx0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKSB7XFxuK1xcdFxcdHUzMiByeF9yZWcgPSBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpO1xcbitcXHRcXHRpbnQgYmVzdF90YXAgPSAtMSwgYmVzdF9yYW5nZSA9IC0xO1xcbitcXHRcXHRpbnQgZmlyc3QgPSAtMTtcXG4rXFx0XFx0dTggZGFjO1xcbitcXHRcXHRjaGFyIGxvZ1tURF9UQVBfTUFYICsgMV07XFxuK1xcbitcXHRcXHQvKiBQdXQgdGVzdCBwYXR0ZXJuIG9uIGNvcnJlY3QgY2hhbm5lbCAqL1xcbitcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXFx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxcbitcXHRcXHRcXHRcXHQgICBUR01JSV9URF9QQVRfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgRklFTERfUFJFUChUR01JSV9URF9QQVRfTUFTSywgVEdNSUlfVERfUEFUKSk7XFxuK1xcbitcXHRcXHRmb3IgKGRhYyA9IDA7IGRhYyBcXHUwMDNjIFREX1RBUF9NQVg7IGRhYysrKSB7XFxuK1xcdFxcdFxcdC8qIFNldCBUQVAgKi9cXG4rXFx0XFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVxcdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFJEX1RBUChkYWMpKTtcXG4rXFxuK1xcdFxcdFxcdC8qIENoZWNrIGlmIHdlIGNhbiBnZXQgYSBnb29kIHJlYWQgKi9cXG4rXFx0XFx0XFx0aWYgKGVuNzUxMjIxX3RyZ21paV9jYWxfb2socngsIHJ4X3JlZywgY2hhbm5lbCwgZGFjKSkge1xcbitcXHRcXHRcXHRcXHRsb2dbZGFjXSA9ICcrJztcXG4rXFxuK1xcdFxcdFxcdFxcdGlmIChmaXJzdCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdFxcdGZpcnN0ID0gZGFjO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKChkYWMgLSBmaXJzdCkgXFx1MDAzZSBiZXN0X3JhbmdlKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGJlc3RfdGFwID0gKGZpcnN0ICsgZGFjKSAvIDI7XFxuK1xcdFxcdFxcdFxcdFxcdGJlc3RfcmFuZ2UgPSBkYWMgLSBmaXJzdDtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRsb2dbZGFjXSA9ICcuJztcXG4rXFx0XFx0XFx0XFx0Zmlyc3QgPSAtMTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRsb2dbVERfVEFQX01BWF0gPSAnXFxcXDAnO1xcbitcXG4rXFx0XFx0aWYgKGJlc3RfdGFwIFxcdTAwM2UgLTEpIHtcXG4rXFx0XFx0XFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVxcdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFJEX1RBUChiZXN0X3RhcCkpO1xcbitcXG4rXFx0XFx0XFx0bG9nW2Jlc3RfdGFwXSA9ICdYJztcXG4rXFxuK1xcdFxcdFxcdGRldl9pbmZvKHJ4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiVFJHTUlJIGxhbmUgJWQ6ICVzIHRhcCAlZCBvbGQgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCBjaGFubmVsLCBsb2csIGJlc3RfdGFwLCBkZWZhdWx0X3RhcHNbY2hhbm5lbF0pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMocngtXFx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgUkRfVEFQKGRlZmF1bHRfdGFwc1tjaGFubmVsXSkpO1xcbitcXG4rXFx0XFx0XFx0ZGV2X3dhcm4ocngtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCJUUkdNSUkgbGFuZSAlZDogJXMgY2FsaWJyYXRpb24gZmFpbGVkLCBwcmVzZXJ2aW5nIHRhcCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0IGNoYW5uZWwsIGxvZywgZGVmYXVsdF90YXBzW2NoYW5uZWxdKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogUmV0dXJuIGNoYW5uZWwgdG8gZmFpbHVyZSBwYXR0ZXJuICovXFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyh0eC1cXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgIFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBUR01JSV9URF9GQUlMX1BBVCkpO1xcbitcXHR9XFxuK1xcbitcXHRyZWdtYXBfY2xlYXJfYml0cyh0eC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFJBSU5fVFhFTik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK2VuNzUxMjIxX3NldF90eF9kcml2ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHU4IGRydnAsIHU4IGRydm4sIHU4IGNsa19kcnZwLFxcbitcXHRcXHQgICAgICB1OCBjbGtfZHJ2bilcXG4re1xcbitcXHRpbnQgY2hhbm5lbDtcXG4rXFxuK1xcdC8qIFR4IGRyaXZpbmcgZm9yIFRSR01JSSBwYXRoIG9uIFNvQyAqL1xcbitcXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFxcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXFxuK1xcdFxcdHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVERfT0RUKGNoYW5uZWwpLFxcbitcXHRcXHRcXHQgICAgIFREX0RNX0RSVlAoZHJ2cCkgfCBURF9ETV9EUlZOKGRydm4pKTtcXG4rXFxuK1xcdC8qIFVuZG9jdW1lbnRlZCA2dGggY2hhbm5lbCwgcHJvYmFibHkgZHJpdmUgc3RyZW5ndGggZm9yIGNsb2NrIGxpbmUuICovXFxuK1xcdHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVERfT0RUKDUpLCBURF9ETV9EUlZQKGRydnApIHxcXG4rXFx0XFx0ICAgICBURF9ETV9EUlZOKGRydm4pKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rZW43NTEyMjFfdHJnbWlpX3BhaXJfc2V0dXAoc3RydWN0IG10NzUzMF9wcml2ICpleHQsIGludCBleHRfcG9ydCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG10NzUzMF9wcml2ICpvbmRpZSwgaW50IG9uZGllX3BvcnQpXFxuK3tcXG4rXFx0dTggZGVmYXVsdF90YXBzX29uZGllW05VTV9UUkdNSUlfQ1RSTF07XFxuK1xcdHU4IGRlZmF1bHRfdGFwc19leHRbTlVNX1RSR01JSV9DVFJMXTtcXG4rXFx0dTMyIG1jcl9kb3duLCBtY3JfdXA7XFxuK1xcdGludCBjaGFubmVsO1xcbitcXHRpbnQgcmVnX3ZhbDtcXG4rXFxuK1xcdC8qIEJPVEg6IFB1dCBpbnRlcmZhY2VzIGluIGEgZG93bmVkIHN0YXRlICovXFxuK1xcdG1jcl9kb3duID0gUE1DUl9JRkdfWE1JVChQTUNSX0lGR19YTUlUXzY0KSB8IFBNQ1JfTUFDX01PREUgfFxcbitcXHRcXHQgICBNVDc1MzBfRk9SQ0VfTU9ERSB8IFBNQ1JfTUFDX1JYX0VOIHwgUE1DUl9CQUNLT0ZGX0VOIHxcXG4rXFx0XFx0ICAgUE1DUl9CQUNLUFJfRU4gfCBQTUNSX0ZPUkNFX1NQRUVEXzEwMDAgfCBQTUNSX0ZPUkNFX0ZEWDtcXG4rXFx0cmVnbWFwX3dyaXRlKG9uZGllLVxcdTAwM2VyZWdtYXAsICBNVDc1M1hfUE1DUl9QKG9uZGllX3BvcnQpLCBtY3JfZG93bik7XFxuK1xcdHJlZ21hcF93cml0ZShleHQtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChleHRfcG9ydCksIG1jcl9kb3duKTtcXG4rXFx0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xcbitcXG4rXFx0LyogQk9USDogUmVzZXQgVFggKi9cXG4rXFx0cmVnbWFwX3NldF9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTtcXG4rXFx0cmVnbWFwX3NldF9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xcbitcXHR1c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7XFxuK1xcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTtcXG4rXFx0cmVnbWFwX2NsZWFyX2JpdHMob25kaWUtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XFxuK1xcbitcXHQvKiBCT1RIOiBSZXNldCBSWCBjb250cm9sbGVycyBkb3duICovXFxuK1xcdHJlZ21hcF9zZXRfYml0cyhleHQtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCwgUlhfUlNUKTtcXG4rXFx0cmVnbWFwX3NldF9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XFxuK1xcbitcXHQvKiBCT1RIOiBTZXQgVFggZHJpdmUgc3RyZW5ndGgsIE1DTSB1c2VzIG1vcmUgKi9cXG4rXFx0ZW43NTEyMjFfc2V0X3R4X2RyaXZlKG9uZGllLCA4LCA4LCA3LCA3KTtcXG4rXFx0ZW43NTEyMjFfc2V0X3R4X2RyaXZlKGV4dCwgMTEsIDExLCAxNiwgMTYpO1xcbitcXG4rXFx0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi9cXG4rXFx0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XFxuK1xcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XFxuK1xcbitcXHQvKiBCT1RIOiBQb3J0cyB1cCAqL1xcbitcXHRtY3JfdXAgPSBtY3JfZG93biB8IFBNQ1JfTUFDX1RYX0VOIHwgUE1DUl9GT1JDRV9MTks7XFxuK1xcdHJlZ21hcF93cml0ZShvbmRpZS1cXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKG9uZGllX3BvcnQpLCBtY3JfdXApO1xcbitcXHRyZWdtYXBfd3JpdGUoZXh0LVxcdTAwM2VyZWdtYXAsIE1UNzUzWF9QTUNSX1AoZXh0X3BvcnQpLCBtY3JfdXApO1xcbitcXG4rXFx0LyogTUNNOiBTZXQgRXh0LVxcdTAwM2VTb0MgVFggZGVsYXkgdG8gMCAqL1xcbitcXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFxcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXFxuK1xcdFxcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgVEdNSUlfVERfVEFQX01BU0spO1xcbitcXG4rXFx0LyogU09DOiBPRFQgKi9cXG4rXFx0cmVnbWFwX3NldF9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX1JUVCxcXG4rXFx0XFx0XFx0RFFTMV9HQVRFIHwgRFFTMF9HQVRFIHwgRU43NTEyMjFfQjE3KTtcXG4rXFxuK1xcdC8qIFNPQzogVW5kb2N1bWVudGVkICovXFxuK1xcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwrKylcXG4rXFx0XFx0cmVnbWFwX3dyaXRlKG9uZGllLVxcdTAwM2VyZWdtYXAsICAoMHg3YTE0ICsgY2hhbm5lbCAqIDgpLFxcbitcXHRcXHRcXHQgICAgIDB4MzIyNzcwMCk7XFxuK1xcbitcXHQvKiBNQ006IFNwcmVhZCBzcGVjdHJ1bSBjbG9jayovXFxuK1xcdGNvcmVfY2xlYXIoZXh0LCBDT1JFX1BMTF9HUk9VUDgsIFJHX0xDRERTX1NTQ19FTik7XFxuK1xcbitcXHQvKiBCT1RIOiBaZXJvIGNsb2NrIGRlbGF5ICovXFxuK1xcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLFxcbitcXHRcXHRcXHQgIERRU0kwX1RBUF9NQVNLKTtcXG4rXFx0cmVnbWFwX2NsZWFyX2JpdHMob25kaWUtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCxcXG4rXFx0XFx0XFx0ICBEUVNJMF9UQVBfTUFTSyk7XFxuK1xcbitcXHQvKiBCT1RIOiBDb2xsZWN0IGFuZCB0aGVuIHplcm8gZXZlcnkgUlggVEFQICovXFxuK1xcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwrKykge1xcbitcXHRcXHRyZWdfdmFsID0gMDtcXG4rXFx0XFx0cmVnbWFwX3JlYWQoZXh0LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksIFxcdTAwMjZyZWdfdmFsKTtcXG4rXFx0XFx0ZGVmYXVsdF90YXBzX2V4dFtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XFxuK1xcdFxcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLFxcbitcXHRcXHRcXHRcXHQgIFJEX1RBUF9NQVNLKTtcXG4rXFxuK1xcdFxcdHJlZ192YWwgPSAwO1xcbitcXHRcXHRyZWdtYXBfcmVhZChvbmRpZS1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLCBcXHUwMDI2cmVnX3ZhbCk7XFxuK1xcdFxcdGRlZmF1bHRfdGFwc19vbmRpZVtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XFxuK1xcdFxcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksXFxuK1xcdFxcdFxcdFxcdCAgUkRfVEFQX01BU0spO1xcbitcXHR9XFxuK1xcbitcXHRlbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihvbmRpZSwgZXh0LCBkZWZhdWx0X3RhcHNfZXh0KTtcXG4rXFx0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oZXh0LCBvbmRpZSwgZGVmYXVsdF90YXBzX2V4dCk7XFxuK1xcbitcXHRkZXZfaW5mbyhvbmRpZS1cXHUwMDNlZGV2LCBcXFwiVFJHTUlJIGludGVyLXN3aXRjaCBsaW5rIGluaXRpYWxpemVkXFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWRcXG4rbXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpwZWVyX2RzO1xcbitcXHRzdHJ1Y3QgZHNhX3BvcnQgKnBlZXJfZHA7XFxuK1xcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcGVlcjtcXG4rXFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbitcXHRzdHJ1Y3QgZHNhX2xpbmsgKmRsO1xcbitcXHR1MzIgcG1zciA9IDA7XFxuK1xcbitcXHRwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoZHAtXFx1MDAzZXR5cGUgIT0gRFNBX1BPUlRfVFlQRV9EU0EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJlZ21hcF9yZWFkKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BNU1JfUChkcC1cXHUwMDNlaW5kZXgpLCBcXHUwMDI2cG1zcik7XFxuK1xcbitcXHRpZiAoIShwbXNyIFxcdTAwMjYgUE1TUl9MSU5LKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkbCwgXFx1MDAyNmRzLVxcdTAwM2Vkc3QtXFx1MDAzZXJ0YWJsZSwgbGlzdCkge1xcbitcXHRcXHRpZiAoZGwtXFx1MDAzZWRwICE9IGRwKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHBlZXJfZHAgPSBkbC1cXHUwMDNlbGlua19kcDtcXG4rXFxuK1xcdFxcdGlmIChwZWVyX2RwLVxcdTAwM2V0eXBlICE9IERTQV9QT1JUX1RZUEVfRFNBKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHBlZXJfZHMgPSBkbC1cXHUwMDNlbGlua19kcC1cXHUwMDNlZHM7XFxuK1xcbitcXHRcXHRpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBlZXJfZHMtXFx1MDAzZWRldi1cXHUwMDNlb2Zfbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcXCIpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHBlZXIgPSBwZWVyX2RzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0XFx0aWYgKHBlZXItXFx1MDAzZWlkICE9IElEX0VONzUxMjIxKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHByaXYsIGRwLVxcdTAwM2VpbmRleCwgcGVlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgcGVlcl9kcC1cXHUwMDNlaW5kZXgpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkXFxuIG10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuQEAgLTEyODEsMTMgKzE1NTMsNDEgQEAgbXQ3NTN4X3RyYXBfZnJhbWVzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0XFx0XFx0XFx0ICAgVE9fQ1BVX0ZXX0NQVV9PTkxZKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludFxcbittdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KTtcXG4rXFxuKy8qIElmIHRoaXMgc3dpdGNoIGlzIGRvd25zdHJlYW0gb2YgYW5vdGhlciBzd2l0Y2ggdGhhdCBpcyBpbiBwYXNzdGhyb3VnaCBtb2RlLFxcbisgKiB0aGUgXFxcIkNQVVxcXCIgcG9ydCBpcyBhY3R1YWxseSBhIERTQSBwb3J0LlxcbisgKi9cXG4gc3RhdGljIHZvaWRcXG4gbXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiB7XFxuIFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0LyogRW5hYmxlIE1lZGlhdGVrIGhlYWRlciBtb2RlIG9uIHRoZSBjcHUgcG9ydCAqL1xcbi1cXHRyZWdtYXBfd3JpdGUocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfUFZDX1AocG9ydCksIFBPUlRfU1BFQ19UQUcpO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaXNfcGFzc3Rocm91Z2gpIHtcXG4rXFx0XFx0LyogRGlzYWJsZSBwYXJzaW5nIG9mIHRoZSBEU0EgdGFnLCBpdCB3aWxsIGJlIGZvcndhcmRlZCBibGluZGx5XFxuK1xcdFxcdCAqIHRvIHRoZSBkb3duc3RyZWFtIHN3aXRjaC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSxcXG4rXFx0XFx0XFx0ICAgICBWTEFOX0FUVFIoTVQ3NTMwX1ZMQU5fVFJBTlNQQVJFTlQpIHxcXG4rXFx0XFx0XFx0ICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7XFxuK1xcbitcXHRcXHQvKiBUaGUgcG9ydCBpcyBub3QgY29uZmlndXJlZCB0byBwYXJzZSBEU0EgdGFncywgc28gdGhleSBhcmVcXG4rXFx0XFx0ICogbGlhYmxlIHRvIGJlIGNvbmZ1c2VkIGZvciBsZW5ndGggZmllbGRzLCBzbyBsZW5ndGggY2hlY2sgaXNcXG4rXFx0XFx0ICogZGlzYWJsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZWdtYXBfY2xlYXJfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzWF9BR0MsIEFHQ19MMkxFTl9DSEspO1xcbitcXG4rXFx0XFx0LyogSW4gcGFzc3Rocm91Z2ggbW9kZSwgTVRVIGlzIG9ubHkgZW5mb3JjZWQgZG93bnN0cmVhbSAqL1xcbitcXHRcXHRtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KGRzLCBwb3J0LCBNVDc1MzBfTUFYX01UVSk7XFxuK1xcbitcXHRcXHQvKiBMb29wIGRldGVjdGlvbiBoYXMgbm8gdmFsdWUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xcbitcXHRcXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1M1hfTVRSQVAsXFxuK1xcdFxcdFxcdFxcdE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogTm90IHBhc3N0aHJvdWdoLCBlbmFibGUgRFNBIHRhZyBoYW5kbGluZyBvbiBDUFUgcG9ydC4gKi9cXG4rXFx0XFx0cmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogRW5hYmxlIGZsb29kaW5nIG9uIHRoZSBDUFUgcG9ydCAqL1xcbiBcXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1M1hfTUZDLFxcbkBAIC0xMzE3LDYgKzE2MTcsNyBAQCBzdGF0aWMgaW50XFxuIG10NzUzMF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiBcXHRcXHQgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbiB7XFxuK1xcdGludCB1cHN0cmVhbV9wdCA9IGRzYV9zd2l0Y2hfdXBzdHJlYW1fcG9ydChkcyk7XFxuIFxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuIFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXG5AQCAtMTMyNywxNyArMTYyOCw0MyBAQCBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0ICogYnJpZGdlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGRzYV9wb3J0X2lzX3VzZXIoZHApKSB7XFxuLVxcdFxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwID0gZHAtXFx1MDAzZWNwdV9kcDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTtcXG4rXFxuK1xcdH0gZWxzZSBpZiAoZHNhX3BvcnRfaXNfZHNhKGRwKSBcXHUwMDI2XFx1MDAyNiBkcC1cXHUwMDNlaW5kZXggIT0gdXBzdHJlYW1fcHQpIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQodXBzdHJlYW1fcHQpKTtcXG4rXFxuK1xcdFxcdC8qIFNob3VsZCBub3QgaGFwcGVuICovXFxuK1xcdFxcdFdBUk5fT05fT05DRSghcHJpdi1cXHUwMDNlaXNfcGFzc3Rocm91Z2gpO1xcbitcXG4rXFx0XFx0LyogV2UgYXJlIHBhc3NpbmcgdGhyb3VnaCB0byBhIGRvd25zdHJlYW0gc3dpdGNoIHNvIHdlIHNldCBib3RoXFxuK1xcdFxcdCAqIENQVSBhbmQgZG93bnN0cmVhbSBsaW5rIHRvIHBhc3MgdHJhZmZpYyB1bnRvdWNoZWQgc28gdGhhdFxcbitcXHRcXHQgKiB0aGUgU1RBRyBmcm9tIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB3aWxsIHBhc3MgdG8gdGhlIHVwc3RyZWFtLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmVnbWFwX3dyaXRlKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLFxcbitcXHRcXHRcXHQgICAgIFZMQU5fQVRUUihNVDc1MzBfVkxBTl9UUkFOU1BBUkVOVCkgfFxcbitcXHRcXHRcXHQgICAgIFBWQ19FR19UQUcoTVQ3NTMwX1ZMQU5fRUdfRElTQUJMRUQpKTtcXG4rXFxuK1xcdFxcdC8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi9cXG4rXFx0XFx0cmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX01GQywgQkNfRkZQKEJJVChwb3J0KSkgfFxcbitcXHRcXHRcXHRcXHRVTk1fRkZQKEJJVChwb3J0KSkgfCBVTlVfRkZQKEJJVChwb3J0KSkpO1xcbiBcXG4tXFx0XFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0gfD0gUENSX01BVFJJWChCSVQoY3B1X2RwLVxcdTAwM2VpbmRleCkpO1xcbitcXHRcXHQvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuXFxuK1xcdFxcdCAqIFRoaXMgbXVzdCBiZSBleHBsaWNpdCBiZWNhdXNlIFBPUlRfU1BFQ19UQUcgaXMgdW5zZXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZWdtYXBfd3JpdGUocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfUENSX1AodXBzdHJlYW1fcHQpLFxcbitcXHRcXHRcXHQgICAgIFBDUl9NQVRSSVgoQklUKHBvcnQpKSk7XFxuIFxcdH1cXG4gXFx0cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0uZW5hYmxlID0gdHJ1ZTtcXG4tXFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BDUl9QKHBvcnQpLCBQQ1JfTUFUUklYX01BU0ssXFxuLVxcdFxcdFxcdCAgIHByaXYtXFx1MDAzZXBvcnRzW3BvcnRdLnBtKTtcXG4rXFxuK1xcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIENQVSBwb3J0IG1hc2sgaXMgc2V0IGFib3ZlLiAqL1xcbitcXHRpZiAoIShwcml2LVxcdTAwM2Vpc19wYXNzdGhyb3VnaCBcXHUwMDI2XFx1MDAyNiBkcC1cXHUwMDNlaW5kZXggPT0gdXBzdHJlYW1fcHQpKVxcbitcXHRcXHRyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfUENSX1AocG9ydCksXFxuK1xcdFxcdFxcdFxcdCAgIFBDUl9NQVRSSVhfTUFTSywgcHJpdi1cXHUwMDNlcG9ydHNbcG9ydF0ucG0pO1xcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbXV0ZXgpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWlkICE9IElEX01UNzUzMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc2MjEpXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc1MzAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0aWYgKHBvcnQgPT0gNSlcXG5AQCAtMTM2NCw3ICsxNjkxLDggQEAgbXQ3NTMwX3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbXV0ZXgpO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZWlkICE9IElEX01UNzUzMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc2MjEpXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc1MzAgXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdC8qIERvIG5vdCBzZXQgTVQ3NTMwX1A1X0RJUyB3aGVuIHBvcnQgNSBpcyBiZWluZyB1c2VkIGZvciBQSFkgbXV4aW5nLiAqL1xcbkBAIC0xMzg1LDcgKzE3MTMsNyBAQCBtdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KVxcbiBcXHQgKiBsYXJnZXN0IE1UVSBvZiB0aGUgdXNlciBwb3J0cy4gQmVjYXVzZSB0aGUgc3dpdGNoIG9ubHkgaGFzIGEgZ2xvYmFsXFxuIFxcdCAqIFJYIGxlbmd0aCByZWdpc3Rlciwgb25seSBhbGxvd2luZyBDUFUgcG9ydCBoZXJlIGlzIGVub3VnaC5cXG4gXFx0ICovXFxuLVxcdGlmICghZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSlcXG4rXFx0aWYgKCFkc2FfaXNfdXBzdHJlYW1fcG9ydChkcywgcG9ydCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0cmVnbWFwX3JlYWQocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzBfR01BQ0NSLCBcXHUwMDI2dmFsKTtcXG5AQCAtMjMzMyw3ICsyNjYxLDcgQEAgbXQ3NTMwX2ZyZWVfbWRpb19pcnEoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnRcXG4raW50XFxuIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucCwgKm5wID0gcHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VvZl9ub2RlO1xcbkBAIC0yMzQzLDYgKzI2NzEsMTAgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiBcXHRzdGF0aWMgaW50IGlkeDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHQvKiBBbHJlYWR5IGRvbmUgKi9cXG4rXFx0aWYgKHByaXYtXFx1MDAzZWNoaWxkX2J1cylcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRtbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW9cXFwiKTtcXG4gXFxuIFxcdGlmIChtbnAgXFx1MDAyNlxcdTAwMjYgIW9mX2RldmljZV9pc19hdmFpbGFibGUobW5wKSlcXG5AQCAtMjM3MCw4ICsyNzAyLDExIEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0aWYgKHByaXYtXFx1MDAzZWlycV9kb21haW4gXFx1MDAyNlxcdTAwMjYgIW1ucClcXG4gXFx0XFx0bXQ3NTMwX3NldHVwX21kaW9faXJxKHByaXYpO1xcbiBcXG4rXFx0cHJpdi1cXHUwMDNlY2hpbGRfYnVzID0gYnVzO1xcbitcXG4gXFx0cmV0ID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgYnVzLCBtbnApO1xcbiBcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWNoaWxkX2J1cyA9IE5VTEw7XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIE1ESU8gYnVzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gXFx0XFx0aWYgKHByaXYtXFx1MDAzZWlycV9kb21haW4gXFx1MDAyNlxcdTAwMjYgIW1ucClcXG4gXFx0XFx0XFx0bXQ3NTMwX2ZyZWVfbWRpb19pcnEocHJpdik7XFxuQEAgLTIzODEsNiArMjcxNiw3IEBAIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG4gXFx0b2Zfbm9kZV9wdXQobW5wKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChtdDc1MzBfc2V0dXBfbWRpbyk7XFxuIFxcbiBzdGF0aWMgaW50XFxuIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuQEAgLTI0MDYsMTEgKzI3NDIsNiBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFkbikge1xcbi1cXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsIFxcXCJwYXJlbnQgT0Ygbm9kZSBvZiBEU0EgY29uZHVpdCBub3QgZm91bmRcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdH1cXG4tXFxuIFxcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuIFxcdGRzLVxcdTAwM2V1bnRhZ192bGFuX2F3YXJlX2JyaWRnZV9wdmlkID0gdHJ1ZTtcXG4gXFx0ZHMtXFx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcXG5AQCAtMjQ4OSw2ICsyODIwLDEyIEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdFxcdFxcdCAgIE1UNzUzMF9DSEdfVFJBUCB8IE1UNzUzMF9QSFlfSU5ESVJFQ1RfQUNDRVNTLFxcbiBcXHRcXHRcXHQgICBNVDc1MzBfQ0hHX1RSQVApO1xcbiBcXG4rXFx0LyogRU43NTEyMjEgTUNNIHN0YXJ0cyBvbiB0aGUgd3JvbmcgZnJlcXVlbmN5ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpZCA9PSBJRF9FTjc1MTIyMV9FWFQpXFxuK1xcdFxcdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzWF9NVFJBUCxcXG4rXFx0XFx0XFx0XFx0ICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX0NLX1NFTCxcXG4rXFx0XFx0XFx0XFx0ICAgTVQ3NTMwX0NIR19UUkFQKTtcXG4rXFxuIFxcdGlmICgodmFsIFxcdTAwMjYgTVQ3NTMwX1hUQUxfTUFTSykgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXFxuIFxcdFxcdG10NzUzMF9wbGxfc2V0dXAocHJpdik7XFxuIFxcbkBAIC0yNTEyLDcgKzI4NDksNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHQvKiBEaXNhYmxlIGxlYXJuaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovXFxuIFxcdFxcdHJlZ21hcF9zZXRfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIE1UNzUzMF9QU0NfUChpKSwgU0FfRElTKTtcXG4gXFxuLVxcdFxcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKSB7XFxuK1xcdFxcdGlmIChkc2FfaXNfdXBzdHJlYW1fcG9ydChkcywgaSkpIHtcXG4gXFx0XFx0XFx0bXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShkcywgaSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xcbkBAIC0yNTM2LDcgKzI4NzMsNyBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIFBIWSBtdXhpbmcgb24gcG9ydCA1ICovXFxuLVxcdGlmIChkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7XFxuK1xcdGlmIChkbiBcXHUwMDI2XFx1MDAyNiBkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7XFxuIFxcdFxcdC8qIFNjYW4gdGhlIGV0aGVybmV0IG5vZGVzLiBMb29rIGZvciBHTUFDMSwgbG9va3VwIHRoZSB1c2VkIFBIWS5cXG4gXFx0XFx0ICogU2V0IHByaXYtXFx1MDAzZXA1X21vZGUgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGlmIFBIWSBtdXhpbmcgaXNcXG4gXFx0XFx0ICogZGV0ZWN0ZWQuXFxuQEAgLTI2MzYsNyArMjk3Myw3IEBAIG10NzUzMV9zZXR1cF9jb21tb24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRcXHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cXHUwMDNlcmVnbWFwLCBNVDc1MzFfREJHX0NOVChpKSxcXG4gXFx0XFx0XFx0XFx0TVQ3NTMxX0RJU19DTFIpO1xcbiBcXG4tXFx0XFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgaSkpIHtcXG4rXFx0XFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xcbiBcXHRcXHRcXHRtdDc1M3hfY3B1X3BvcnRfZW5hYmxlKGRzLCBpKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0bXQ3NTMwX3BvcnRfZGlzYWJsZShkcywgaSk7XFxuQEAgLTI2NzQsOCArMzAxMSwxMSBAQCBtdDc1MzFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiB7XFxuIFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHR1MzIgdmFsLCBpZDtcXG4rXFx0aW50IGN0bF9waHk7XFxuIFxcdGludCByZXQsIGk7XFxuIFxcbitcXHRjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XFxuK1xcbiBcXHQvKiBSZXNldCB3aG9sZSBjaGlwIHRocm91Z2ggZ3BpbyBwaW4gb3IgbWVtb3J5LW1hcHBlZCByZWdpc3RlcnMgZm9yXFxuIFxcdCAqIGRpZmZlcmVudCB0eXBlIG9mIGhhcmR3YXJlXFxuIFxcdCAqL1xcbkBAIC0yNzQzLDI1ICszMDgzLDIxIEBAIG10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdCAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duXFxuIFxcdCAqIG10NzUzMV9pbmRfbW1kX3BoeV9bcmVhZCx3cml0ZV0gdG8gY29tcGxldGUgdGhpcyBmdW5jdGlvbi5cXG4gXFx0ICovXFxuLVxcdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHRcXHQgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0KTtcXG4rXFx0cmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdCAgICAgIENPUkVfUExMX0dST1VQNCk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0dmFsID0gcmV0O1xcbiBcXHR2YWwgfD0gTVQ3NTMxX1JHX1NZU1BMTF9ETVkyIHwgTVQ3NTMxX1BIWV9QTExfQllQQVNTX01PREU7XFxuIFxcdHZhbCBcXHUwMDI2PSB+TVQ3NTMxX1BIWV9QTExfT0ZGO1xcbi1cXHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWFkZHIpLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgTURJT19NTURfVkVORDIsIENPUkVfUExMX0dST1VQNCwgdmFsKTtcXG4rXFx0cmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsIGN0bF9waHksIE1ESU9fTU1EX1ZFTkQyLFxcbitcXHRcXHRcXHRcXHQgICAgICAgQ09SRV9QTExfR1JPVVA0LCB2YWwpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdC8qIERpc2FibGUgRUVFIGFkdmVydGlzZW1lbnQgb24gdGhlIHN3aXRjaCBQSFlzLiAqL1xcbi1cXHRmb3IgKGkgPSBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyKTtcXG4tXFx0ICAgICBpIFxcdTAwM2MgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcikgKyBNVDc1MzBfTlVNX1BIWVM7XFxuLVxcdCAgICAgaSsrKSB7XFxuK1xcdGZvciAoaSA9IGN0bF9waHk7IGkgXFx1MDAzYyBjdGxfcGh5ICsgTVQ3NTMwX05VTV9QSFlTOyBpKyspIHtcXG4gXFx0XFx0bXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsIGksIE1ESU9fTU1EX0FOLCBNRElPX0FOX0VFRV9BRFYsXFxuIFxcdFxcdFxcdFxcdFxcdCAwKTtcXG4gXFx0fVxcbkBAIC0yOTEwLDYgKzMyNDYsNDQgQEAgc3RhdGljIHZvaWQgZW43NTI4X21hY19wb3J0X2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZW43NTEyMjFfbWFjX3BvcnRfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxcbit7XFxuK1xcdHN3aXRjaCAocG9ydCkge1xcbitcXHQvKiBFTjc1MTIyMSBwb3J0cyAwLi4zIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVncmF0ZWQgRkUgUEhZcy4gKi9cXG4rXFx0Y2FzZSAwIC4uLiAzOlxcbitcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxcbitcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXG4rXFx0XFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rXFx0LyogUG9ydCA0IGlzIGNvbm5lY3RlZCB0byB0aGUgc3RhbmRhbG9uZSBFTjc1MTIvRU43NTIxIEdQSFkuICovXFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4rXFx0XFx0XFx0ICBjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHQvKiBQb3J0IDUgaXMgdGhlIDEgR2JpdC9zIFRSR01JSSBjYXNjYWRlIHRvIHRoZSBleHRlcm5hbCBNVDc1MzAuICovXFxuK1xcdGNhc2UgNTpcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUksXFxuK1xcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRcXHRjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHQvKiBQb3J0IDYgaXMgdGhlIDEgR2JpdC9zIENQVSBsaW5rIHRvIEdETTEuICovXFxuK1xcdGNhc2UgNjpcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcXG4rXFx0XFx0XFx0ICBjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFxuK1xcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBtdDc1MzBfbWFjX2NvbmZpZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4gXFx0XFx0ICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbkBAIC0zMDU5LDYgKzM0MzMsOSBAQCBzdGF0aWMgdm9pZCBtdDc1M3hfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0fVxcbiBcXG4gXFx0cmVnbWFwX3NldF9iaXRzKHByaXYtXFx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC1cXHUwMDNlaW5kZXgpLCBtY3IpO1xcbitcXG4rXFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJKVxcbitcXHRcXHRtdDc1MzBfY2FsX2ludGVyc3dpdGNoX3RyZ21paShkcCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG10NzUzeF9waHlsaW5rX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcXG5AQCAtMzI5OCwxMCArMzY3NSwxMSBAQCBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiBcXG4gXFx0LyogU2V0IHRoZSBDUFUgcG9ydCB0byB0cmFwIGZyYW1lcyB0byBmb3IgTVQ3NTMwLiBUcmFwcGVkIGZyYW1lcyB3aWxsIGJlXFxuIFxcdCAqIGZvcndhcmRlZCB0byB0aGUgbnVtZXJpY2FsbHkgc21hbGxlc3QgQ1BVIHBvcnQgd2hvc2UgY29uZHVpdFxcbi1cXHQgKiBpbnRlcmZhY2UgaXMgdXAuXFxuK1xcdCAqIGludGVyZmFjZSBpcyB1cC4gTk9URTogXFxcIkNQVSBwb3J0XFxcIiBjYW4gYWxzbyBtZWFuIGFuIHVwc3RyZWFtIERTQSBsaW5rLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHByaXYtXFx1MDAzZWlkICE9IElEX01UNzUzMCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9NVDc2MjEgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHByaXYtXFx1MDAzZWlkICE9IElEX0VONzUyOClcXG4rXFx0ICAgIHByaXYtXFx1MDAzZWlkICE9IElEX0VONzUyOCBcXHUwMDI2XFx1MDAyNiBwcml2LVxcdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcHJpdi1cXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRtYXNrID0gQklUKGNwdV9kcC1cXHUwMDNlaW5kZXgpO1xcbkBAIC0zMzkzLDYgKzM3NzEsNzYgQEAgc3RhdGljIGludCBtdDc5ODhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRyZXR1cm4gbXQ3NTMxX3NldHVwX2NvbW1vbihkcyk7XFxuIH1cXG4gXFxuKy8qIDEgaWYgcGFzc3Rocm91Z2gsIG5lZ2F0aXZlIGlmIGVycm9yLiAqL1xcbitzdGF0aWMgaW50IG10NzUzeF9jaGVja19wYXNzdGhyb3VnaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZV9ub2RlICpwb3J0cywgKnBvcnQ7XFxuK1xcdGludCBwYXNzdGhyb3VnaF9wb3J0cyA9IDA7XFxuK1xcdGludCBlbmFibGVkX3BvcnRzID0gMDtcXG4rXFxuK1xcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicG9ydHNcXFwiKTtcXG4rXFx0aWYgKCFwb3J0cylcXG4rXFx0XFx0cG9ydHMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZW9mX25vZGUsIFxcXCJldGhlcm5ldC1wb3J0c1xcXCIpO1xcbitcXG4rXFx0aWYgKCFwb3J0cykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIm5vIHBvcnRzIGNoaWxkIG5vZGUgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUocG9ydHMsIHBvcnQpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsaW5rO1xcbitcXG4rXFx0XFx0ZW5hYmxlZF9wb3J0cysrO1xcbitcXG4rXFx0XFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXFxcImV0aGVybmV0XFxcIiwgMCk7XFxuK1xcdFxcdGlmICghbGluaylcXG4rXFx0XFx0XFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXFxcImxpbmtcXFwiLCAwKTtcXG4rXFxuK1xcdFxcdGlmICghbGluaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsaW5rKTtcXG4rXFxuK1xcdFxcdHBhc3N0aHJvdWdoX3BvcnRzKys7XFxuK1xcdH1cXG4rXFxuK1xcdG9mX25vZGVfcHV0KHBvcnRzKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEEgc3dpdGNoIGlzIGNvbnNpZGVyZWQgcGFzc3Rocm91Z2ggaWYgZXhhY3RseSB0d28gYXZhaWxhYmxlXFxuK1xcdCAqIHBvcnRzIGhhdmUgYW4gXFxcImV0aGVybmV0XFxcIiBvciBcXFwibGlua1xcXCIgcGhhbmRsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChwYXNzdGhyb3VnaF9wb3J0cyBcXHUwMDNlIDIgfHxcXG4rXFx0ICAgIChwYXNzdGhyb3VnaF9wb3J0cyA9PSAyIFxcdTAwMjZcXHUwMDI2IGVuYWJsZWRfcG9ydHMgIT0gMilcXG4rXFx0KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiT25seSB0d28gcG9ydHMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYXNzdGhyb3VnaF9wb3J0cyA9PSAyO1xcbit9XFxuK1xcbisvKiBObyBtYW5pcHVsYXRpb24gb2YgZm9yd2FyZGluZyBydWxlcyBhbGxvd2VkIGluIHBhc3N0aHJvdWdoIG1vZGUgKi9cXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHtcXG4rXFx0LmdldF90YWdfcHJvdG9jb2xcXHQ9IG10a19nZXRfdGFnX3Byb3RvY29sLFxcbitcXHQuc2V0dXBcXHRcXHRcXHQ9IG10NzUzeF9zZXR1cCxcXG4rXFx0LnRlYXJkb3duXFx0XFx0PSBtdDc1M3hfdGVhcmRvd24sXFxuK1xcdC5wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCA9IG10NzUzeF9wcmVmZXJyZWRfZGVmYXVsdF9sb2NhbF9jcHVfcG9ydCxcXG4rXFx0LmdldF9zdHJpbmdzXFx0XFx0PSBtdDc1MzBfZ2V0X3N0cmluZ3MsXFxuK1xcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLFxcbitcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IG10NzUzMF9nZXRfc3NldF9jb3VudCxcXG4rXFx0LmdldF9ldGhfbWFjX3N0YXRzXFx0PSBtdDc1MzBfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfcm1vbl9zdGF0c1xcdFxcdD0gbXQ3NTMwX2dldF9ybW9uX3N0YXRzLFxcbitcXHQuZ2V0X2V0aF9jdHJsX3N0YXRzXFx0PSBtdDc1MzBfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbitcXHQuZ2V0X3N0YXRzNjRcXHRcXHQ9IG10NzUzMF9nZXRfc3RhdHM2NCxcXG4rXFx0LnBvcnRfZW5hYmxlXFx0XFx0PSBtdDc1MzBfcG9ydF9lbmFibGUsXFxuK1xcdC5wb3J0X2Rpc2FibGVcXHRcXHQ9IG10NzUzMF9wb3J0X2Rpc2FibGUsXFxuK1xcdC5waHlsaW5rX2dldF9jYXBzXFx0PSBtdDc1M3hfcGh5bGlua19nZXRfY2FwcyxcXG4rXFx0LnN1cHBvcnRfZWVlXFx0XFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxcbitcXHQuc2V0X21hY19lZWVcXHRcXHQ9IG10NzUzeF9zZXRfbWFjX2VlZSxcXG4rXFx0LmNvbmR1aXRfc3RhdGVfY2hhbmdlXFx0PSBtdDc1M3hfY29uZHVpdF9zdGF0ZV9jaGFuZ2UsXFxuK307XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzUzMF9zd2l0Y2hfb3BzID0ge1xcbiBcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXRrX2dldF90YWdfcHJvdG9jb2wsXFxuIFxcdC5zZXR1cFxcdFxcdFxcdD0gbXQ3NTN4X3NldHVwLFxcbkBAIC0zNTE5LDE0ICszOTY3LDQwIEBAIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXSA9IHtcXG4gXFx0XFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsXFxuIFxcdFxcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcyxcXG4gXFx0fSxcXG4rXFx0W0lEX0VONzUxMjIxXSA9IHtcXG4rXFx0XFx0LmlkID0gSURfRU43NTEyMjEsXFxuK1xcdFxcdC5wY3Nfb3BzID0gXFx1MDAyNm10NzUzMF9wY3Nfb3BzLFxcbitcXHRcXHQuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsXFxuK1xcdFxcdC5waHlfcmVhZF9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfcmVhZCxcXG4rXFx0XFx0LnBoeV93cml0ZV9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfd3JpdGUsXFxuK1xcdFxcdC5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCxcXG4rXFx0XFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsXFxuK1xcdFxcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUxMjIxX21hY19wb3J0X2dldF9jYXBzLFxcbitcXHRcXHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXFxuK1xcdH0sXFxuK1xcdFtJRF9FTjc1MTIyMV9FWFRdID0ge1xcbitcXHRcXHQuaWQgPSBJRF9FTjc1MTIyMV9FWFQsXFxuK1xcdFxcdC5wY3Nfb3BzID0gXFx1MDAyNm10NzUzMF9wY3Nfb3BzLFxcbitcXHRcXHQuc3dfc2V0dXAgPSBtdDc1MzBfc2V0dXAsXFxuK1xcdFxcdC5waHlfcmVhZF9jMjIgPSBtdDc1MzBfcGh5X3JlYWRfYzIyLFxcbitcXHRcXHQucGh5X3dyaXRlX2MyMiA9IG10NzUzMF9waHlfd3JpdGVfYzIyLFxcbitcXHRcXHQucGh5X3JlYWRfYzQ1ID0gbXQ3NTMwX3BoeV9yZWFkX2M0NSxcXG4rXFx0XFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzBfcGh5X3dyaXRlX2M0NSxcXG4rXFx0XFx0Lm1hY19wb3J0X2dldF9jYXBzID0gbXQ3NTMwX21hY19wb3J0X2dldF9jYXBzLFxcbitcXHRcXHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXFxuK1xcdH0sXFxuIH07XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7XFxuIFxcbiBpbnRcXG4gbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuIHtcXG4rXFx0aW50IHBhc3N0aHJvdWdoID0gbXQ3NTN4X2NoZWNrX3Bhc3N0aHJvdWdoKHByaXYtXFx1MDAzZWRldik7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtXFx1MDAzZWRldjtcXG4gXFxuK1xcdGlmIChwYXNzdGhyb3VnaCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBwYXNzdGhyb3VnaDtcXG4rXFxuIFxcdHByaXYtXFx1MDAzZWRzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2LVxcdTAwM2VkcyksIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZWRzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMzU0NCw3ICs0MDE4LDE0IEBAIG10NzUzMF9wcm9iZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbiBcXHRwcml2LVxcdTAwM2VpZCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWlkO1xcbiBcXHRwcml2LVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG4tXFx0cHJpdi1cXHUwMDNlZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZtdDc1MzBfc3dpdGNoX29wcztcXG4rXFxuK1xcdGlmIChwYXNzdGhyb3VnaCkge1xcbitcXHRcXHRwcml2LVxcdTAwM2Vkcy1cXHUwMDNlb3BzID0gXFx1MDAyNm10NzUzMF9wYXNzdGhyb3VnaF9zd2l0Y2hfb3BzO1xcbitcXHRcXHRwcml2LVxcdTAwM2Vpc19wYXNzdGhyb3VnaCA9IHRydWU7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2bXQ3NTMwX3N3aXRjaF9vcHM7XFxuK1xcdH1cXG4rXFxuIFxcdHByaXYtXFx1MDAzZWRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2bXQ3NTN4X3BoeWxpbmtfbWFjX29wcztcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX211dGV4KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRzX2xvY2spO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmggYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcXG5pbmRleCAyYmJiZTYxN2I1MmVlLi4xYTQzMjk3NDljMGYxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaFxcbkBAIC0yNCw2ICsyNCw4IEBAIGVudW0gbXQ3NTN4X2lkIHtcXG4gXFx0SURfRU43NTgxID0gNCxcXG4gXFx0SURfQU43NTgzID0gNSxcXG4gXFx0SURfRU43NTI4ID0gNixcXG4rXFx0SURfRU43NTEyMjEgPSA3LFxcbitcXHRJRF9FTjc1MTIyMV9FWFQgPSA4LFxcbiB9O1xcbiBcXG4gI2RlZmluZVxcdE5VTV9UUkdNSUlfQ1RSTFxcdFxcdFxcdDVcXG5AQCAtNDAsNiArNDIsNyBAQCBlbnVtIG10NzUzeF9pZCB7XFxuIC8qIFJlZ2lzdGVyIGZvciBBUkwgZ2xvYmFsIGNvbnRyb2wgKi9cXG4gI2RlZmluZSBNVDc1M1hfQUdDXFx0XFx0XFx0MHhjXFxuICNkZWZpbmUgIExPQ0FMX0VOXFx0XFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgIEFHQ19MMkxFTl9DSEtcXHRcXHRcXHRCSVQoNClcXG4gXFxuIC8qIFJlZ2lzdGVyIGZvciBNQUMgZm9yd2FyZCBjb250cm9sICovXFxuICNkZWZpbmUgTVQ3NTNYX01GQ1xcdFxcdFxcdDB4MTBcXG5AQCAtMzU1LDYgKzM1OCw5IEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hY2NfZnJtIHtcXG4gI2RlZmluZSBNVDc1M1hfUE1DUl9QKHgpXFx0XFx0KDB4MzAwMCArICgoeCkgKiAweDEwMCkpXFxuICNkZWZpbmUgIFBNQ1JfSUZHX1hNSVRfTUFTS1xcdFxcdEdFTk1BU0soMTksIDE4KVxcbiAjZGVmaW5lICBQTUNSX0lGR19YTUlUKHgpXFx0XFx0RklFTERfUFJFUChQTUNSX0lGR19YTUlUX01BU0ssIHgpXFxuKyNkZWZpbmUgICAgUE1DUl9JRkdfWE1JVF85NlxcdFxcdDBcXG4rI2RlZmluZSAgICBQTUNSX0lGR19YTUlUX1JBTkRcXHRcXHQxXFxuKyNkZWZpbmUgICAgUE1DUl9JRkdfWE1JVF82NFxcdFxcdDJcXG4gI2RlZmluZSAgUE1DUl9FWFRfUEhZXFx0XFx0XFx0QklUKDE3KVxcbiAjZGVmaW5lICBQTUNSX01BQ19NT0RFXFx0XFx0XFx0QklUKDE2KVxcbiAjZGVmaW5lICBNVDc1MzBfRk9SQ0VfTU9ERVxcdFxcdEJJVCgxNSlcXG5AQCAtNTgzLDYgKzU4OSw4IEBAIGVudW0gbXQ3NTMxX2Nsa19za2V3IHtcXG4gI2RlZmluZSBNVDc1M1hfTVRSQVBcXHRcXHRcXHQweDc4MDRcXG4gI2RlZmluZSAgTVQ3NTMwX1A1X1BIWTBfU0VMXFx0XFx0QklUKDIwKVxcbiAjZGVmaW5lICBNVDc1MzBfQ0hHX1RSQVBcXHRcXHRCSVQoMTYpXFxuKyNkZWZpbmUgIE1UNzUzMF9DS19TRUxcXHRcXHRcXHRCSVQoMTUpXFxuKyNkZWZpbmUgIE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFXFx0QklUKDE0KVxcbiAjZGVmaW5lICBNVDc1MzBfUDVfTUFDX1NFTFxcdFxcdEJJVCgxMylcXG4gI2RlZmluZSAgTVQ3NTMwX1A2X0RJU1xcdFxcdFxcdEJJVCg4KVxcbiAjZGVmaW5lICBNVDc1MzBfUDVfUkdNSUlfTU9ERVxcdFxcdEJJVCg3KVxcbkBAIC01OTksNiArNjA3LDggQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcXG4gLyogUmVnaXN0ZXIgZm9yIFRPUCBzaWduYWwgY29udHJvbCAqL1xcbiAjZGVmaW5lIE1UNzUzMF9UT1BfU0lHX0NUUkxcXHRcXHQweDc4MDhcXG4gI2RlZmluZSAgVE9QX1NJR19DVFJMX05PUk1BTFxcdFxcdChCSVQoMTcpIHwgQklUKDE2KSlcXG4rLyogVW5kb2N1bWVudGVkICovXFxuKyNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9CMFxcdFxcdEJJVCgwKVxcbiBcXG4gI2RlZmluZSBNVDc1MzFfVE9QX1NJR19TUlxcdFxcdDB4NzgwY1xcbiAjZGVmaW5lICBQQURfRFVBTF9TR01JSV9FTlxcdFxcdEJJVCgxKVxcbkBAIC02NDUsMTggKzY1NSwzMSBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkNLX1JUVFxcdFxcdDB4N2EwNFxcbiAjZGVmaW5lICBEUVMxX0dBVEVcXHRcXHRcXHRCSVQoMzEpXFxuICNkZWZpbmUgIERRUzBfR0FURVxcdFxcdFxcdEJJVCgzMClcXG4rLyogVW5kb2N1bWVudGVkICovXFxuKyNkZWZpbmUgIEVONzUxMjIxX0IxN1xcdFxcdFxcdEJJVCgxNylcXG4gXFxuICNkZWZpbmUgTVQ3NTMwX1RSR01JSV9SRCh4KVxcdFxcdCgweDdhMTAgKyAoeCkgKiA4KVxcbiAjZGVmaW5lICBCU0xJUF9FTlxcdFxcdFxcdEJJVCgzMSlcXG4gI2RlZmluZSAgRURHRV9DSEtcXHRcXHRcXHRCSVQoMzApXFxuKyNkZWZpbmUgIFJEX1ZBTFVFX01BU0tcXHRcXHRcXHRHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSAgUkRfRVJSX01BU0tcXHRcXHRcXHRHRU5NQVNLKDExLCA4KVxcbiAjZGVmaW5lICBSRF9UQVBfTUFTS1xcdFxcdFxcdEdFTk1BU0soNiwgMClcXG4gI2RlZmluZSAgUkRfVEFQKHgpXFx0XFx0XFx0RklFTERfUFJFUChSRF9UQVBfTUFTSywgeClcXG4rLyogVHJhaW5pbmcgZG9lcyBub3QgdHJ5IGFueXRoaW5nIGJleW9uZCB0aGlzICovXFxuKyNkZWZpbmUgIFREX1RBUF9NQVhcXHRcXHRcXHQ2NFxcbiBcXG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1RYQ1RSTFxcdFxcdDB4N2E0MFxcbiAjZGVmaW5lICBUUkFJTl9UWEVOXFx0XFx0XFx0QklUKDMxKVxcbiAjZGVmaW5lICBUWENfSU5WXFx0XFx0XFx0QklUKDMwKVxcbiAjZGVmaW5lICBUWF9SU1RcXHRcXHRcXHRcXHRCSVQoMjgpXFxuIFxcbisjZGVmaW5lIEVONzUzMF9UUkdNSUlfVERfQ1RSTCh4KVxcdCgweDdhNTAgKyAoeCkgKiA4KVxcbisjZGVmaW5lICAgVEdNSUlfVERfVEFQX01BU0tcXHRcXHRHRU5NQVNLKDExLCA4KVxcbisjZGVmaW5lICAgVEdNSUlfVERfUEFUX01BU0tcXHRcXHRHRU5NQVNLKDcsIDApXFxuKy8qIFVzZSBhIDAxMDEwMTAxIGJpdCBwYXR0ZXJuICovXFxuKyNkZWZpbmUgICBUR01JSV9URF9QQVRcXHRcXHRcXHQweDU1XFxuKyNkZWZpbmUgICBUR01JSV9URF9GQUlMX1BBVFxcdFxcdDB4YWFcXG4rXFxuICNkZWZpbmUgTVQ3NTMwX1RSR01JSV9URF9PRFQoaSlcXHRcXHQoMHg3YTU0ICsgOCAqIChpKSlcXG4gI2RlZmluZSAgVERfRE1fRFJWUF9NQVNLXFx0XFx0R0VOTUFTSygzLCAwKVxcbiAjZGVmaW5lICBURF9ETV9EUlZQKHgpXFx0XFx0XFx0RklFTERfUFJFUChURF9ETV9EUlZQX01BU0ssIHgpXFxuQEAgLTc0Nyw4ICs3NzAsNiBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xcbiAjZGVmaW5lICBNVDc1MzFfUEhZX1BMTF9PRkZcXHRcXHRCSVQoNSlcXG4gI2RlZmluZSAgTVQ3NTMxX1BIWV9QTExfQllQQVNTX01PREVcXHRCSVQoNClcXG4gXFxuLSNkZWZpbmUgTVQ3NTNYX0NUUkxfUEhZX0FERFIoYWRkcilcXHQoKChhZGRyKSArIDEpIFxcdTAwMjYgKFBIWV9NQVhfQUREUiAtIDEpKVxcbi1cXG4gI2RlZmluZSBDT1JFX1BMTF9HUk9VUDVcXHRcXHRcXHQweDQwNFxcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzFfTUFTS1xcdEdFTk1BU0soMTUsIDApXFxuICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPMSh4KVxcdFxcdEZJRUxEX1BSRVAoUkdfTENERFNfUENXX05DUE8xX01BU0ssIHgpXFxuQEAgLTc2NCw2ICs3ODUsOSBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xcbiAjZGVmaW5lICBSR19MQ0NEU19DKHgpXFx0XFx0XFx0RklFTERfUFJFUChSR19MQ0NEU19DX01BU0ssIHgpXFxuICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPX0NIR1xcdFxcdEJJVCgzKVxcbiBcXG4rI2RlZmluZSBDT1JFX1BMTF9HUk9VUDhcXHRcXHRcXHQweDQwN1xcbisjZGVmaW5lICBSR19MQ0REU19TU0NfRU5cXHRcXHRCSVQoMTApXFxuK1xcbiAjZGVmaW5lIENPUkVfUExMX0dST1VQMTBcXHRcXHQweDQwOVxcbiAjZGVmaW5lICBSR19MQ0REU19TU0NfREVMVEFfTUFTS1xcdEdFTk1BU0soMTEsIDApXFxuICNkZWZpbmUgIFJHX0xDRERTX1NTQ19ERUxUQSh4KVxcdFxcdEZJRUxEX1BSRVAoUkdfTENERFNfU1NDX0RFTFRBX01BU0ssIHgpXFxuQEAgLTg4Niw2ICs5MTAsOSBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8ge1xcbiAgKiBAZGV2OlxcdFxcdFRoZSBkZXZpY2UgcG9pbnRlclxcbiAgKiBAZHM6XFx0XFx0XFx0VGhlIHBvaW50ZXIgdG8gdGhlIGRzYSBjb3JlIHN0cnVjdHVyZVxcbiAgKiBAYnVzOlxcdFxcdFRoZSBidXMgdXNlZCBmb3IgdGhlIGRldmljZSBhbmQgYnVpbHQtaW4gUEhZXFxuKyAqIEBjaGlsZF9idXM6XFx0XFx0VGhlIGJ1cyBjcmVhdGVkIGJ5IHRoZSBkZXZpY2UsIG9uIE1ESU8gaW1wbGVtZW50YXRpb25zXFxuKyAqXFx0XFx0XFx0dGhpcyBpcyBidXMgaW5kaXJlY3RseSBhY2Nlc3NlcyBgYnVzYCwgb24gTU1JT1xcbisgKlxcdFxcdFxcdGltcGxlbWVudGF0aW9ucyB0aGlzIGJ1cyBpcyBwYXJ0IG9mIHRoZSBzd2l0Y2guXFxuICAqIEByZWdtYXA6XFx0XFx0VGhlIHJlZ21hcCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYWxsIHN3aXRjaCByZWdpc3RlcnNcXG4gICogQHJzdGM6XFx0XFx0VGhlIHBvaW50ZXIgdG8gcmVzZXQgY29udHJvbCB1c2VkIGJ5IE1DTVxcbiAgKiBAY29yZV9wd3I6XFx0XFx0VGhlIHBvd2VyIHN1cHBsaWVkIGludG8gdGhlIGNvcmVcXG5AQCAtODk5LDYgKzkyNiw5IEBAIHN0cnVjdCBtdDc1M3hfaW5mbyB7XFxuICAqIEBwNV9tb2RlOlxcdFxcdEhvbGRpbmcgdGhlIGN1cnJlbnQgbW9kZSBvZiBwb3J0IDUgb2YgdGhlIE1UNzUzMCBzd2l0Y2hcXG4gICogQHA1X3NnbWlpOlxcdFxcdEZsYWcgZm9yIGRpc3Rpbmd1aXNoaW5nIGlmIHBvcnQgNSBvZiB0aGUgTVQ3NTMxIHN3aXRjaFxcbiAgKlxcdFxcdFxcdGhhcyBnb3QgU0dNSUlcXG4rICogQGlzX3Bhc3N0aHJvdWdoOlxcdElmIHRoaXMgc3dpdGNoIGlzIHRvIHBhc3MgdHJhZmZpYyBiZXR3ZWVuIHRoZSB1cHN0cmVhbVxcbisgKlxcdFxcdFxcdChDUFUpIHBvcnQgYW5kIGEgc2Vjb25kIGRvd25zdHJlYW0gc3dpdGNoLCB3aXRob3V0XFxuKyAqXFx0XFx0XFx0YWx0ZXJpbmcgdGhlIERTQSB0YWcuXFxuICAqIEBpcnFfZG9tYWluOlxcdFxcdElSUSBkb21haW4gb2YgdGhlIHN3aXRjaCBpcnFfY2hpcFxcbiAgKiBAY3JlYXRlX3NnbWlpOlxcdFBvaW50ZXIgdG8gZnVuY3Rpb24gY3JlYXRpbmcgU0dNSUkgUENTIGluc3RhbmNlKHMpXFxuICAqIEBhY3RpdmVfY3B1X3BvcnRzOlxcdEhvbGRpbmcgdGhlIGFjdGl2ZSBDUFUgcG9ydHNcXG5AQCAtOTExLDYgKzk0MSw3IEBAIHN0cnVjdCBtdDc1MzBfcHJpdiB7XFxuIFxcdHN0cnVjdCBkZXZpY2VcXHRcXHQqZGV2O1xcbiBcXHRzdHJ1Y3QgZHNhX3N3aXRjaFxcdCpkcztcXG4gXFx0c3RydWN0IG1paV9idXNcXHRcXHQqYnVzO1xcbitcXHRzdHJ1Y3QgbWlpX2J1c1xcdFxcdCpjaGlsZF9idXM7XFxuIFxcdHN0cnVjdCByZWdtYXBcXHRcXHQqcmVnbWFwO1xcbiBcXHRzdHJ1Y3QgcmVzZXRfY29udHJvbFxcdCpyc3RjO1xcbiBcXHRzdHJ1Y3QgcmVndWxhdG9yXFx0KmNvcmVfcHdyO1xcbkBAIC05MjMsNiArOTU0LDcgQEAgc3RydWN0IG10NzUzMF9wcml2IHtcXG4gXFx0Ym9vbFxcdFxcdFxcdHA1X3NnbWlpO1xcbiBcXHR1OFxcdFxcdFxcdG1pcnJvcl9yeDtcXG4gXFx0dThcXHRcXHRcXHRtaXJyb3JfdHg7XFxuK1xcdGJvb2xcXHRcXHRcXHRpc19wYXNzdGhyb3VnaDtcXG4gXFx0c3RydWN0IG10NzUzMF9wb3J0XFx0cG9ydHNbTVQ3NTMwX05VTV9QT1JUU107XFxuIFxcdHN0cnVjdCBtdDc1M3hfcGNzXFx0cGNzW01UNzUzMF9OVU1fUE9SVFNdO1xcbiBcXHQvKiBwcm90ZWN0IGFtb25nIHByb2Nlc3NlcyBmb3IgcmVnaXN0ZXJzIGFjY2VzcyovXFxuQEAgLTk2MSw2ICs5OTMsMTYgQEAgc3RydWN0IG10NzUzMF9od19zdGF0cyB7XFxuIGludCBtdDc1MzBfcHJvYmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdik7XFxuIHZvaWQgbXQ3NTMwX3JlbW92ZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KTtcXG4gXFxuKy8qXFxuKyAqIFdoZW4gYW4gTU1JTyBiYXNlZCBzd2l0Y2ggaGFzIGFuIE1ESU8gYnVzIHdoaWNoIGNvbnRhaW5zIGEgZG93bnN0cmVhbSBNRElPXFxuKyAqIHN3aXRjaCwgdGhlIE1ESU8gYnVzIGlzIG5vdCBub3JtYWxseSBzZXR1cCB1bnRpbCBtdDc1M3hfc2V0dXAoKSBoYXMgYmVlblxcbisgKiBjYWxsZWQuIEJ1dCBtdDc1M3hfc2V0dXAoKSBpcyBub3QgY2FsbGVkIHVudGlsIERTQSBzZWVzIHRoYXQgZXZlcnkgc3dpdGNoIGluXFxuKyAqIHRoZSB0cmVlIGhhcyBiZWVuIHByb2JlZC4gQ2FsbGluZyBtdDc1MzBfc2V0dXBfbWRpbygpIGFmdGVyIGF0IHRoZSBlbmQgb2ZcXG4rICogdGhlIE1NSU8gcHJvYmUgZnVuY3Rpb24gYWxsb3dzIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB0byByZWdpc3RlciwgY29tcGxldGluZ1xcbisgKiB0aGUgdHJlZS5cXG4rICovXFxuK2ludCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpO1xcbitcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXTtcXG4gXFxuICNlbmRpZiAvKiBfX01UNzUzMF9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjQ2LjE2MTUyMzg0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQzNzQ2ODUyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyB1cGRhdGVzIERldmljZSBUcmVlIGJpbmRpbmdzIGRvY3VtZW50YXRpb24gYW5kIGFkZHMgc3VwcG9ydCBmb3IgRWNvTmV0IEVONzUxMjIxIFNvQ3MgYW5kIHBhc3N0aHJvdWdoIG1vZGUgdG8gdGhlIE1lZGlhVGVrIE1UNzUzMCBEU0EgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciAoZHJpdmVycy9uZXQvZHNhL210NzUzMCopLiBUaGlzIGRyaXZlciBjb250cm9scyBzcGVjaWZpYyBwaHlzaWNhbCBNZWRpYVRlay9FY29OZXQgU29DIGV0aGVybmV0IHN3aXRjaGVzIGFuZCBNRElPL01NSU8gZGV2aWNlcyB0aGF0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCkuIEJlY2F1c2UgdGhlIG1vZGlmaWVkIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgcGF0aHMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSwgZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOGE3MjZlOTY2YWRkOWMzMDNmMzhjY2ZiMTkxNjc1ZTgxNDAyNmU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxNjowNDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxcbmluZGV4IDkwYjM1ODJiNzYxOTAuLjEwNmM0MDg3NTI4ZDcgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWxcbkBAIC0yOSw2ICsyOSwxMiBAQCBkZXNjcmlwdGlvbjogfFxuICAgYW5kIHRoZSBzd2l0Y2ggcmVnaXN0ZXJzIGFyZSBkaXJlY3RseSBtYXBwZWQgaW50byBTb0MncyBtZW1vcnkgbWFwIHJhdGhlciB0aGFuXG4gICB1c2luZyBNRElPLiBUaGUgRFNBIGRyaXZlciBjdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0IE1UNzYyMCB2YXJpYW50cy5cbiBcbisgIEVjb05ldCBFTjc1MTIyMSBTb0NzIGhhdmUgYSBtZW1vcnkgbWFwcGVkIE1UNzUzMCB3aXRoIDN4IDEwLzEwMCBQSFlzIGFuZCAxeFxuKyAgZ2lnYWJpdCBQSFkuIFNvbWUgRU43NTEyMjEgY2hpcHMgc3VjaCBhcyBFTjc1MTNHIGFuZCBFTjc1MjZHIGhhdmUgYSBtdWx0aS1jaGlwXG4rICBtb2R1bGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1UNzUzMCBhcyB3ZWxsIGFzIHRoZSBvbi1kaWUgc3dpdGNoLiBJbiB0aGVzZVxuKyAgcGFja2FnZXMsIHRoZSBtdWx0aS1jaGlwIG1vZHVsZSBpcyBjb25uZWN0ZWQgdG8gcG9ydCA1IG9mIHRoZSBvbi1kaWUgc3dpdGNoXG4rICB2aWEgYSBUUkdNSUkgbGluay5cbitcbiAgIFRoZXJlIGlzIG9ubHkgdGhlIHN0YW5kYWxvbmUgdmVyc2lvbiBvZiBNVDc1MzEuXG4gXG4gICBQb3J0IDUgb24gTVQ3NTMwIHN1cHBvcnRzIHZhcmlvdXMgY29uZmlndXJhdGlvbnM6XG5AQCAtNzMsNiArNzksMTMgQEAgZGVzY3JpcHRpb246IHxcbiBcbiAgICAgICBDaGVjayBvdXQgZXhhbXBsZSA3LlxuIFxuKyAgVGhlIE1UNzUzMCBhbmQgTVQ3NTMxIHN3aXRjaGVzIGFyZSBjYXBhYmxlIG9mIGJlaW5nIG9wZXJhdGVkIGluIFwicGFzc3Rocm91Z2hcIlxuKyAgbW9kZS4gSW4gdGhpcyBtb2RlLCB0cmFmZmljIGlzIHVuY29uZGl0aW9uYWxseSBwYXNzZWQgYmV0d2VlbiB0aGUgQ1BVIHBvcnRcbisgIGFuZCB0aGUgRFNBIHBvcnQgd2hpY2ggbGlua3MgdG8gYSBzZWNvbmQgc3dpdGNoLiBUbyB1c2UgcGFzc3Rocm91Z2ggbW9kZSwgdGhlXG4rICB1cHN0cmVhbSBzd2l0Y2ggaXMgY29uZmlndXJlZCB3aXRoIGEgRFNBIGxpbmsgdG8gdGhlIGRvd25zdHJlYW0gc3dpdGNoLiBJblxuKyAgcGFzc3Rocm91Z2ggbW9kZSB0aGUgdXBzdHJlYW0gc3dpdGNoIGlzIHJlc3RyaWN0ZWQsIHdpdGggbm8gb3RoZXIgcG9ydHMgb3JcbisgIHN3aXRjaCBjb25maWd1cmF0aW9uIGFsbG93ZWQuXG4rXG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuQEAgLTEwNCw2ICsxMTcsMTQgQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIHRoZSBFY29OZXQgRU43NTI4IFNvQ1xuICAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1Mjgtc3dpdGNoXG4gXG4rICAgICAgLSBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgQnVpbHQtaW4gc3dpdGNoIG9mIEVjb05ldCBFTjc1MTIyMSBTb0NcbisgICAgICAgIGNvbnN0OiBlY29uZXQsZW43NTEyMjEtc3dpdGNoXG4rXG4rICAgICAgLSBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgTXVsdGktY2hpcCBtb2R1bGUgTVQ3NTMwIGluIEVONzUxMjIxIFNvQ1xuKyAgICAgICAgY29uc3Q6IGVjb25ldCxlbjc1MTIyMVxuK1xuICAgcmVnOlxuICAgICBtYXhJdGVtczogMVxuIFxuQEAgLTE1Myw4ICsxNzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgbWVkaWF0ZWssbWNtOlxuICAgICB0eXBlOiBib29sZWFuXG4gICAgIGRlc2NyaXB0aW9uOlxuLSAgICAgIFVzZWQgZm9yIE1UNzYyMUFULCBNVDc2MjFEQVQsIE1UNzYyMVNUIGFuZCBNVDc2MjNBSSBTb0NzIHdoaWNoIHRoZSBNVDc1MzBcbi0gICAgICBzd2l0Y2ggaXMgYSBwYXJ0IG9mIHRoZSBtdWx0aS1jaGlwIG1vZHVsZS5cbisgICAgICBVc2VkIGZvciBNVDc2MjFBVCwgTVQ3NjIxREFULCBNVDc2MjFTVCwgTVQ3NjIzQUkgYW5kIEVONzUxMjIxIFNvQ3Mgd2hpY2hcbisgICAgICB0aGUgTVQ3NTMwIHN3aXRjaCBpcyBhIHBhcnQgb2YgdGhlIG11bHRpLWNoaXAgbW9kdWxlLlxuIFxuICAgcmVzZXQtZ3Bpb3M6XG4gICAgIGRlc2NyaXB0aW9uOiB8XG5AQCAtMjE2LDYgKzIzNywyMCBAQCAkZGVmczpcbiAgICAgICAgICAgICAgICAgcGh5LW1vZGU6XG4gICAgICAgICAgICAgICAgICAgY29uc3Q6IGludGVybmFsXG4gXG4rICBtdDc1MzAtcGFzc3Rocm91Z2gtZHNhLXBvcnQ6XG4rICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxuKyAgICAgIFwiXihldGhlcm5ldC0pP3BvcnRzJFwiOlxuKyAgICAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4rICAgICAgICAgIFwiXihldGhlcm5ldC0pP3BvcnRAWzAtNl0kXCI6XG4rICAgICAgICAgICAgaWY6XG4rICAgICAgICAgICAgICByZXF1aXJlZDogWyBsaW5rIF1cbisgICAgICAgICAgICB0aGVuOlxuKyAgICAgICAgICAgICAgcHJvcGVydGllczpcbisgICAgICAgICAgICAgICAgcmVnOlxuKyAgICAgICAgICAgICAgICAgIGNvbnN0OiA2XG4rICAgICAgICAgICAgICAgIHBoeS1tb2RlOlxuKyAgICAgICAgICAgICAgICAgIGNvbnN0OiB0cmdtaWlcbitcbiAgIG10NzUzMC1kc2EtcG9ydDpcbiAgICAgcGF0dGVyblByb3BlcnRpZXM6XG4gICAgICAgXCJeKGV0aGVybmV0LSk/cG9ydHMkXCI6XG5AQCAtMzIzLDYgKzM1OCw3IEBAIGFsbE9mOlxuICAgICAgICAgICAgIC0gYWlyb2hhLGVuNzU4MS1zd2l0Y2hcbiAgICAgICAgICAgICAtIGFpcm9oYSxhbjc1ODMtc3dpdGNoXG4gICAgICAgICAgICAgLSBlY29uZXQsZW43NTI4LXN3aXRjaFxuKyAgICAgICAgICAgIC0gZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxuICAgICB0aGVuOlxuICAgICAgICRyZWY6IFwiIy8kZGVmcy9idWlsdGluLWRzYS1wb3J0XCJcbiAgICAgICBwcm9wZXJ0aWVzOlxuQEAgLTMzMCw2ICszNjYsMTYgQEAgYWxsT2Y6XG4gICAgICAgICBtZWRpYXRlayxtY206IGZhbHNlXG4gICAgICAgICByZXNldC1uYW1lczogZmFsc2VcbiBcbisgIC0gaWY6XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGNvbXBhdGlibGU6XG4rICAgICAgICAgIGVudW06XG4rICAgICAgICAgICAgLSBlY29uZXQsZW43NTEyMjFcbisgICAgdGhlbjpcbisgICAgICAkcmVmOiBcIiMvJGRlZnMvbXQ3NTMwLXBhc3N0aHJvdWdoLWRzYS1wb3J0XCJcbisgICAgICByZXF1aXJlZDpcbisgICAgICAgIC0gbWVkaWF0ZWssbWNtXG4rXG4gdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuIFxuIGV4YW1wbGVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcbmluZGV4IDI0ZWY1NGYzZGIyYTYuLjJmZDk4N2ZmODUxMDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNcbkBAIC0xMzksNiArMTM5LDcgQEAgbXQ3NTMxX2NyZWF0ZV9zZ21paShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10NzUzMF9vZl9tYXRjaFtdID0ge1xuK1x0eyAuY29tcGF0aWJsZSA9IFwiZWNvbmV0LGVuNzUxMjIxXCIsIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJtZWRpYXRlayxtdDc2MjFcIiwgLmRhdGEgPSBcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NjIxXSwgfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcIm1lZGlhdGVrLG10NzUzMFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwibWVkaWF0ZWssbXQ3NTMxXCIsIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuaW5kZXggY2YzYmRiMjNhMmQ1NC4uMWEyOWIxZWVmYjJjMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcbiBcdHsgLmNvbXBhdGlibGUgPSBcImFpcm9oYSxhbjc1ODMtc3dpdGNoXCIsIC5kYXRhID0gXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJhaXJvaGEsZW43NTgxLXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxuK1x0eyAuY29tcGF0aWJsZSA9IFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJlY29uZXQsZW43NTI4LXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFwiLCAuZGF0YSA9IFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG5AQCAtNjEsNyArNjIsMTIgQEAgbXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlcmVnbWFwKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cdTAwM2VyZWdtYXApO1xuIFxuLVx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2gocHJpdi1cdTAwM2Vkcyk7XG4rXHRyZXQgPSBkc2FfcmVnaXN0ZXJfc3dpdGNoKHByaXYtXHUwMDNlZHMpO1xuK1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3OTg4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xuaW5kZXggMjhmOTRjZDI1Yjk1NS4uNmZkNDcxOWFhYjg5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jXG5AQCAtNDYsNiArNDYsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgbXQ3NTMwX21pYltdID0ge1xuIFx0TUlCX0RFU0MoMSwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FSTF9EUk9QLCBcIlJ4QXJsRHJvcFwiKSxcbiB9O1xuIFxuK3N0YXRpYyBpbnRcbittdDc1M3hfY3RybF9waHlfYWRkcihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4re1xuK1x0aWYgKHByaXYtXHUwMDNlaWQgPT0gSURfRU43NTEyMjEpXG4rXHRcdHJldHVybiAxMjtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIXByaXYtXHUwMDNlbWRpb2RldikpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogRGVmYXVsdCBpcyAxc3QgUEhZICovXG4rXHRyZXR1cm4gKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyICsgMSkgXHUwMDI2IChQSFlfTUFYX0FERFIgLSAxKTtcbit9XG4rXG4gc3RhdGljIHZvaWRcbiBtdDc1MzBfbXV0ZXhfbG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuQEAgLTYzLDMyICs3NiwzNiBAQCBtdDc1MzBfbXV0ZXhfdW5sb2NrKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBzdGF0aWMgdm9pZFxuIGNvcmVfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuIHtcbitcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKCFidXMpXG4rXHRcdGJ1cyA9IHByaXYtXHUwMDNlY2hpbGRfYnVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghYnVzKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0bXQ3NTMwX211dGV4X2xvY2socHJpdik7XG4gXG4gXHQvKiBXcml0ZSB0aGUgZGVzaXJlZCBNTUQgRGV2YWQgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4rXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIHJlZ2lzdGVyIGFkZHJlc3MgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCByZWcpO1xuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCByZWcpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnI7XG4gXG4gXHQvKiBTZWxlY3QgdGhlIEZ1bmN0aW9uIDogREFUQSB3aXRoIG5vIHBvc3QgaW5jcmVtZW50ICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4rXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LFxuIFx0XHRcdCBNSUlfTU1EX0NUUkwsIE1ESU9fTU1EX1ZFTkQyIHwgTUlJX01NRF9DVFJMX05PSU5DUik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkYXRhIGludG8gTU1EJ3Mgc2VsZWN0ZWQgcmVnaXN0ZXIgKi9cbi1cdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIE1UNzUzWF9DVFJMX1BIWV9BRERSKHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyKSxcbi1cdFx0XHQgTUlJX01NRF9EQVRBLCB2YWwpO1xuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBLCB2YWwpO1xuIGVycjpcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGRldl9lcnIoXHUwMDI2YnVzLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gd3JpdGUgbW1kIHJlZ2lzdGVyXFxuXCIpO1xuQEAgLTk5LDMzICsxMTYsMzcgQEAgY29yZV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4gc3RhdGljIHZvaWRcbiBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIHtcbitcdGludCBjdGxfcGh5ID0gbXQ3NTN4X2N0cmxfcGh5X2FkZHIocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VidXM7XG4gXHR1MzIgdmFsO1xuIFx0aW50IHJldDtcbiBcbitcdGlmICghYnVzKVxuK1x0XHRidXMgPSBwcml2LVx1MDAzZWNoaWxkX2J1cztcbitcbitcdGlmIChXQVJOX09OX09OQ0UoIWJ1cykpXG4rXHRcdHJldHVybjtcbitcbiBcdG10NzUzMF9tdXRleF9sb2NrKHByaXYpO1xuIFxuIFx0LyogV3JpdGUgdGhlIGRlc2lyZWQgTU1EIERldmFkICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0IE1JSV9NTURfQ1RSTCwgTURJT19NTURfVkVORDIpO1xuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMik7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdC8qIFdyaXRlIHRoZSBkZXNpcmVkIE1NRCByZWdpc3RlciBhZGRyZXNzICovXG4tXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0IE1JSV9NTURfREFUQSwgcmVnKTtcbitcdHJldCA9IGJ1cy1cdTAwM2V3cml0ZShidXMsIGN0bF9waHksIE1JSV9NTURfREFUQSwgcmVnKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0LyogU2VsZWN0IHRoZSBGdW5jdGlvbiA6IERBVEEgd2l0aCBubyBwb3N0IGluY3JlbWVudCAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuK1x0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgY3RsX3BoeSxcbiBcdFx0XHQgTUlJX01NRF9DVFJMLCBNRElPX01NRF9WRU5EMiB8IE1JSV9NTURfQ1RSTF9OT0lOQ1IpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnI7XG4gXG4gXHQvKiBSZWFkIHRoZSBjb250ZW50IG9mIHRoZSBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXJlYWQoYnVzLCBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0TUlJX01NRF9EQVRBKTtcbitcdHJldCA9IGJ1cy1cdTAwM2VyZWFkKGJ1cywgY3RsX3BoeSwgTUlJX01NRF9EQVRBKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyO1xuIFx0dmFsID0gcmV0O1xuQEAgLTEzMyw4ICsxNTQsNyBAQCBjb3JlX3JtdyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgc2V0KVxuIFx0dmFsIFx1MDAyNj0gfm1hc2s7XG4gXHR2YWwgfD0gc2V0O1xuIFx0LyogV3JpdGUgdGhlIGRhdGEgaW50byBNTUQncyBzZWxlY3RlZCByZWdpc3RlciAqL1xuLVx0cmV0ID0gYnVzLVx1MDAzZXdyaXRlKGJ1cywgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdCBNSUlfTU1EX0RBVEEsIHZhbCk7XG4rXHRyZXQgPSBidXMtXHUwMDNld3JpdGUoYnVzLCBjdGxfcGh5LCBNSUlfTU1EX0RBVEEsIHZhbCk7XG4gZXJyOlxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0ZGV2X2VycihcdTAwMjZidXMtXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSBtbWQgcmVnaXN0ZXJcXG5cIik7XG5AQCAtMzI3LDEyICszNDcsMTkgQEAgbXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiBcdHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1M1hfTVRSQVAsIFx1MDAyNnh0YWwpO1xuIFx0eHRhbCBcdTAwMjY9IE1UNzUzMF9YVEFMX01BU0s7XG4gXG4rXHQvKiBFTjc1MTIyMSBvbi1kaWUgZG9lcyBub3QgcmVwb3J0IGNsb2NrIHNwZWVkIGluIE1UUkFQICovXG4rXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMSlcbitcdFx0eHRhbCA9IE1UNzUzMF9YVEFMXzI1TUhaO1xuK1xuIFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfMjVNSFopXG4gXHRcdHNzY19kZWx0YSA9IDB4NTc7XG4gXHRlbHNlXG4gXHRcdHNzY19kZWx0YSA9IDB4ODc7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9NVDc2MjEpIHtcbitcdGlmIChwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxX0VYVCB8fCBwcml2LVx1MDAzZWlkID09IElEX0VONzUxMjIxKSB7XG4rXHRcdC8qIFBMTCBmcmVxdWVuY3k6IDM2Mi41TWh6ICovXG4rXHRcdG5jcG8xID0gMHgxZDAwO1xuK1x0fSBlbHNlIGlmIChwcml2LVx1MDAzZWlkID09IElEX01UNzYyMSkge1xuIFx0XHQvKiBQTEwgZnJlcXVlbmN5OiAxMjVNSHo6IDEuMEdCaXQgKi9cbiBcdFx0aWYgKHh0YWwgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXG4gXHRcdFx0bmNwbzEgPSAweDA2NDA7XG5AQCAtNDQ5LDYgKzQ3NiwyNTEgQEAgbXQ3NTMxX3BsbF9zZXR1cChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gXHR1c2xlZXBfcmFuZ2UoMjUsIDM1KTtcbiB9XG4gXG4rc3RhdGljIGJvb2xcbitlbjc1MTIyMV90cmdtaWlfY2FsX29rKHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsIHUzMiByZWcsIGludCBjaGFuLCBpbnQgaSlcbit7XG4rXHR1MzIgdmFsID0gMDtcbitcbitcdHJlZ21hcF9yZWFkKHJ4LVx1MDAzZXJlZ21hcCwgcmVnLCBcdTAwMjZ2YWwpO1xuK1x0cmVnbWFwX3dyaXRlKHJ4LVx1MDAzZXJlZ21hcCwgcmVnLCB2YWwgfCBFREdFX0NISyk7XG4rXHRyZWdtYXBfd3JpdGUocngtXHUwMDNlcmVnbWFwLCByZWcsIHZhbCBcdTAwMjYgfkVER0VfQ0hLKTtcbitcdHJlZ21hcF9yZWFkKHJ4LVx1MDAzZXJlZ21hcCwgcmVnLCBcdTAwMjZ2YWwpO1xuK1xuK1x0cmV0dXJuIEZJRUxEX0dFVChSRF9WQUxVRV9NQVNLLCB2YWwpID09IFRHTUlJX1REX1BBVCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICAhRklFTERfR0VUKFJEX0VSUl9NQVNLLCB2YWwpO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2VuNzUxMjIxX3RyZ21paV9jYWxpYnJhdGVfZGlyZWN0aW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqdHgsXG4rXHRcdFx0XHQgICAgc3RydWN0IG10NzUzMF9wcml2ICpyeCxcbitcdFx0XHRcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxuK3tcbitcdGludCBjaGFubmVsO1xuK1xuK1x0cmVnbWFwX3NldF9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRSQUlOX1RYRU4pO1xuK1xuK1x0LyogUHV0IGZhaWwgcGF0dGVybiBvbiBldmVyeSBjaGFubmVsICovXG4rXHRmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIFx1MDAzYyBOVU1fVFJHTUlJX0NUUkw7IGNoYW5uZWwrKylcbitcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxuK1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4rXHRcdFx0XHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBUR01JSV9URF9GQUlMX1BBVCkpO1xuK1xuK1x0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspIHtcbitcdFx0dTMyIHJ4X3JlZyA9IE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCk7XG4rXHRcdGludCBiZXN0X3RhcCA9IC0xLCBiZXN0X3JhbmdlID0gLTE7XG4rXHRcdGludCBmaXJzdCA9IC0xO1xuK1x0XHR1OCBkYWM7XG4rXHRcdGNoYXIgbG9nW1REX1RBUF9NQVggKyAxXTtcbitcbitcdFx0LyogUHV0IHRlc3QgcGF0dGVybiBvbiBjb3JyZWN0IGNoYW5uZWwgKi9cbitcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHR4LVx1MDAzZXJlZ21hcCwgRU43NTMwX1RSR01JSV9URF9DVFJMKGNoYW5uZWwpLFxuK1x0XHRcdFx0ICAgVEdNSUlfVERfUEFUX01BU0ssXG4rXHRcdFx0XHQgICBGSUVMRF9QUkVQKFRHTUlJX1REX1BBVF9NQVNLLCBUR01JSV9URF9QQVQpKTtcbitcbitcdFx0Zm9yIChkYWMgPSAwOyBkYWMgXHUwMDNjIFREX1RBUF9NQVg7IGRhYysrKSB7XG4rXHRcdFx0LyogU2V0IFRBUCAqL1xuK1x0XHRcdHJlZ21hcF91cGRhdGVfYml0cyhyeC1cdTAwM2VyZWdtYXAsIHJ4X3JlZywgUkRfVEFQX01BU0ssXG4rXHRcdFx0XHRcdCAgIFJEX1RBUChkYWMpKTtcbitcbitcdFx0XHQvKiBDaGVjayBpZiB3ZSBjYW4gZ2V0IGEgZ29vZCByZWFkICovXG4rXHRcdFx0aWYgKGVuNzUxMjIxX3RyZ21paV9jYWxfb2socngsIHJ4X3JlZywgY2hhbm5lbCwgZGFjKSkge1xuK1x0XHRcdFx0bG9nW2RhY10gPSAnKyc7XG4rXG4rXHRcdFx0XHRpZiAoZmlyc3QgXHUwMDNjIDApXG4rXHRcdFx0XHRcdGZpcnN0ID0gZGFjO1xuK1xuK1x0XHRcdFx0aWYgKChkYWMgLSBmaXJzdCkgXHUwMDNlIGJlc3RfcmFuZ2UpIHtcbitcdFx0XHRcdFx0YmVzdF90YXAgPSAoZmlyc3QgKyBkYWMpIC8gMjtcbitcdFx0XHRcdFx0YmVzdF9yYW5nZSA9IGRhYyAtIGZpcnN0O1xuK1x0XHRcdFx0fVxuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRsb2dbZGFjXSA9ICcuJztcbitcdFx0XHRcdGZpcnN0ID0gLTE7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdGxvZ1tURF9UQVBfTUFYXSA9ICdcXDAnO1xuK1xuK1x0XHRpZiAoYmVzdF90YXAgXHUwMDNlIC0xKSB7XG4rXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbitcdFx0XHRcdFx0ICAgUkRfVEFQKGJlc3RfdGFwKSk7XG4rXG4rXHRcdFx0bG9nW2Jlc3RfdGFwXSA9ICdYJztcbitcbitcdFx0XHRkZXZfaW5mbyhyeC1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJUUkdNSUkgbGFuZSAlZDogJXMgdGFwICVkIG9sZCAlZFxcblwiLFxuK1x0XHRcdFx0IGNoYW5uZWwsIGxvZywgYmVzdF90YXAsIGRlZmF1bHRfdGFwc1tjaGFubmVsXSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmVnbWFwX3VwZGF0ZV9iaXRzKHJ4LVx1MDAzZXJlZ21hcCwgcnhfcmVnLCBSRF9UQVBfTUFTSyxcbitcdFx0XHRcdFx0ICAgUkRfVEFQKGRlZmF1bHRfdGFwc1tjaGFubmVsXSkpO1xuK1xuK1x0XHRcdGRldl93YXJuKHJ4LVx1MDAzZWRldixcbitcdFx0XHRcdCBcIlRSR01JSSBsYW5lICVkOiAlcyBjYWxpYnJhdGlvbiBmYWlsZWQsIHByZXNlcnZpbmcgdGFwICV1XFxuXCIsXG4rXHRcdFx0XHQgY2hhbm5lbCwgbG9nLCBkZWZhdWx0X3RhcHNbY2hhbm5lbF0pO1xuK1x0XHR9XG4rXG4rXHRcdC8qIFJldHVybiBjaGFubmVsIHRvIGZhaWx1cmUgcGF0dGVybiAqL1xuK1x0XHRyZWdtYXBfdXBkYXRlX2JpdHModHgtXHUwMDNlcmVnbWFwLCBFTjc1MzBfVFJHTUlJX1REX0NUUkwoY2hhbm5lbCksXG4rXHRcdFx0XHQgICBUR01JSV9URF9QQVRfTUFTSyxcbitcdFx0XHRcdCAgIEZJRUxEX1BSRVAoVEdNSUlfVERfUEFUX01BU0ssXG4rXHRcdFx0XHRcdCAgICAgIFRHTUlJX1REX0ZBSUxfUEFUKSk7XG4rXHR9XG4rXG4rXHRyZWdtYXBfY2xlYXJfYml0cyh0eC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUUkFJTl9UWEVOKTtcbit9XG4rXG4rc3RhdGljIHZvaWRcbitlbjc1MTIyMV9zZXRfdHhfZHJpdmUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1OCBkcnZwLCB1OCBkcnZuLCB1OCBjbGtfZHJ2cCxcbitcdFx0ICAgICAgdTggY2xrX2Rydm4pXG4re1xuK1x0aW50IGNoYW5uZWw7XG4rXG4rXHQvKiBUeCBkcml2aW5nIGZvciBUUkdNSUkgcGF0aCBvbiBTb0MgKi9cbitcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKVxuK1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVERfT0RUKGNoYW5uZWwpLFxuK1x0XHRcdCAgICAgVERfRE1fRFJWUChkcnZwKSB8IFREX0RNX0RSVk4oZHJ2bikpO1xuK1xuK1x0LyogVW5kb2N1bWVudGVkIDZ0aCBjaGFubmVsLCBwcm9iYWJseSBkcml2ZSBzdHJlbmd0aCBmb3IgY2xvY2sgbGluZS4gKi9cbitcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9URF9PRFQoNSksIFREX0RNX0RSVlAoZHJ2cCkgfFxuK1x0XHQgICAgIFREX0RNX0RSVk4oZHJ2bikpO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK2VuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXG4rXHRcdFx0ICAgc3RydWN0IG10NzUzMF9wcml2ICpvbmRpZSwgaW50IG9uZGllX3BvcnQpXG4re1xuK1x0dTggZGVmYXVsdF90YXBzX29uZGllW05VTV9UUkdNSUlfQ1RSTF07XG4rXHR1OCBkZWZhdWx0X3RhcHNfZXh0W05VTV9UUkdNSUlfQ1RSTF07XG4rXHR1MzIgbWNyX2Rvd24sIG1jcl91cDtcbitcdGludCBjaGFubmVsO1xuK1x0aW50IHJlZ192YWw7XG4rXG4rXHQvKiBCT1RIOiBQdXQgaW50ZXJmYWNlcyBpbiBhIGRvd25lZCBzdGF0ZSAqL1xuK1x0bWNyX2Rvd24gPSBQTUNSX0lGR19YTUlUKFBNQ1JfSUZHX1hNSVRfNjQpIHwgUE1DUl9NQUNfTU9ERSB8XG4rXHRcdCAgIE1UNzUzMF9GT1JDRV9NT0RFIHwgUE1DUl9NQUNfUlhfRU4gfCBQTUNSX0JBQ0tPRkZfRU4gfFxuK1x0XHQgICBQTUNSX0JBQ0tQUl9FTiB8IFBNQ1JfRk9SQ0VfU1BFRURfMTAwMCB8IFBNQ1JfRk9SQ0VfRkRYO1xuK1x0cmVnbWFwX3dyaXRlKG9uZGllLVx1MDAzZXJlZ21hcCwgIE1UNzUzWF9QTUNSX1Aob25kaWVfcG9ydCksIG1jcl9kb3duKTtcbitcdHJlZ21hcF93cml0ZShleHQtXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKGV4dF9wb3J0KSwgbWNyX2Rvd24pO1xuK1x0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xuK1xuK1x0LyogQk9USDogUmVzZXQgVFggKi9cbitcdHJlZ21hcF9zZXRfYml0cyhleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1RYQ1RSTCwgVFhfUlNUKTtcbitcdHJlZ21hcF9zZXRfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xuK1x0dXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApO1xuK1x0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9UWENUUkwsIFRYX1JTVCk7XG4rXHRyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfVFhDVFJMLCBUWF9SU1QpO1xuK1xuK1x0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgZG93biAqL1xuK1x0cmVnbWFwX3NldF9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XG4rXHRyZWdtYXBfc2V0X2JpdHMob25kaWUtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JDS19DVFJMLCBSWF9SU1QpO1xuK1xuK1x0LyogQk9USDogU2V0IFRYIGRyaXZlIHN0cmVuZ3RoLCBNQ00gdXNlcyBtb3JlICovXG4rXHRlbjc1MTIyMV9zZXRfdHhfZHJpdmUob25kaWUsIDgsIDgsIDcsIDcpO1xuK1x0ZW43NTEyMjFfc2V0X3R4X2RyaXZlKGV4dCwgMTEsIDExLCAxNiwgMTYpO1xuK1xuK1x0LyogQk9USDogUmVzZXQgUlggY29udHJvbGxlcnMgdXAgKi9cbitcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XG4rXHRyZWdtYXBfY2xlYXJfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwsIFJYX1JTVCk7XG4rXG4rXHQvKiBCT1RIOiBQb3J0cyB1cCAqL1xuK1x0bWNyX3VwID0gbWNyX2Rvd24gfCBQTUNSX01BQ19UWF9FTiB8IFBNQ1JfRk9SQ0VfTE5LO1xuK1x0cmVnbWFwX3dyaXRlKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChvbmRpZV9wb3J0KSwgbWNyX3VwKTtcbitcdHJlZ21hcF93cml0ZShleHQtXHUwMDNlcmVnbWFwLCBNVDc1M1hfUE1DUl9QKGV4dF9wb3J0KSwgbWNyX3VwKTtcbitcbitcdC8qIE1DTTogU2V0IEV4dC1cdTAwM2VTb0MgVFggZGVsYXkgdG8gMCAqL1xuK1x0Zm9yIChjaGFubmVsID0gMDsgY2hhbm5lbCBcdTAwM2MgTlVNX1RSR01JSV9DVFJMOyBjaGFubmVsKyspXG4rXHRcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIEVONzUzMF9UUkdNSUlfVERfQ1RSTChjaGFubmVsKSxcbitcdFx0XHRcdCAgVEdNSUlfVERfVEFQX01BU0spO1xuK1xuK1x0LyogU09DOiBPRFQgKi9cbitcdHJlZ21hcF9zZXRfYml0cyhvbmRpZS1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkNLX1JUVCxcbitcdFx0XHREUVMxX0dBVEUgfCBEUVMwX0dBVEUgfCBFTjc1MTIyMV9CMTcpO1xuK1xuK1x0LyogU09DOiBVbmRvY3VtZW50ZWQgKi9cbitcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKVxuK1x0XHRyZWdtYXBfd3JpdGUob25kaWUtXHUwMDNlcmVnbWFwLCAgKDB4N2ExNCArIGNoYW5uZWwgKiA4KSxcbitcdFx0XHQgICAgIDB4MzIyNzcwMCk7XG4rXG4rXHQvKiBNQ006IFNwcmVhZCBzcGVjdHJ1bSBjbG9jayovXG4rXHRjb3JlX2NsZWFyKGV4dCwgQ09SRV9QTExfR1JPVVA4LCBSR19MQ0REU19TU0NfRU4pO1xuK1xuK1x0LyogQk9USDogWmVybyBjbG9jayBkZWxheSAqL1xuK1x0cmVnbWFwX2NsZWFyX2JpdHMoZXh0LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCxcbitcdFx0XHQgIERRU0kwX1RBUF9NQVNLKTtcbitcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SQ0tfQ1RSTCxcbitcdFx0XHQgIERRU0kwX1RBUF9NQVNLKTtcbitcbitcdC8qIEJPVEg6IENvbGxlY3QgYW5kIHRoZW4gemVybyBldmVyeSBSWCBUQVAgKi9cbitcdGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgXHUwMDNjIE5VTV9UUkdNSUlfQ1RSTDsgY2hhbm5lbCsrKSB7XG4rXHRcdHJlZ192YWwgPSAwO1xuK1x0XHRyZWdtYXBfcmVhZChleHQtXHUwMDNlcmVnbWFwLCBNVDc1MzBfVFJHTUlJX1JEKGNoYW5uZWwpLCBcdTAwMjZyZWdfdmFsKTtcbitcdFx0ZGVmYXVsdF90YXBzX2V4dFtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XG4rXHRcdHJlZ21hcF9jbGVhcl9iaXRzKGV4dC1cdTAwM2VyZWdtYXAsIE1UNzUzMF9UUkdNSUlfUkQoY2hhbm5lbCksXG4rXHRcdFx0XHQgIFJEX1RBUF9NQVNLKTtcbitcbitcdFx0cmVnX3ZhbCA9IDA7XG4rXHRcdHJlZ21hcF9yZWFkKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSwgXHUwMDI2cmVnX3ZhbCk7XG4rXHRcdGRlZmF1bHRfdGFwc19vbmRpZVtjaGFubmVsXSA9IEZJRUxEX0dFVChSRF9UQVBfTUFTSywgcmVnX3ZhbCk7XG4rXHRcdHJlZ21hcF9jbGVhcl9iaXRzKG9uZGllLVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1RSR01JSV9SRChjaGFubmVsKSxcbitcdFx0XHRcdCAgUkRfVEFQX01BU0spO1xuK1x0fVxuK1xuK1x0ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24ob25kaWUsIGV4dCwgZGVmYXVsdF90YXBzX2V4dCk7XG4rXHRlbjc1MTIyMV90cmdtaWlfY2FsaWJyYXRlX2RpcmVjdGlvbihleHQsIG9uZGllLCBkZWZhdWx0X3RhcHNfZXh0KTtcbitcbitcdGRldl9pbmZvKG9uZGllLVx1MDAzZWRldiwgXCJUUkdNSUkgaW50ZXItc3dpdGNoIGxpbmsgaW5pdGlhbGl6ZWRcXG5cIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkXG4rbXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC1cdTAwM2VkcztcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpwZWVyX2RzO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpwZWVyX2RwO1xuK1x0c3RydWN0IG10NzUzMF9wcml2ICpwZWVyO1xuK1x0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xuK1x0c3RydWN0IGRzYV9saW5rICpkbDtcbitcdHUzMiBwbXNyID0gMDtcbitcbitcdHByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoZHAtXHUwMDNldHlwZSAhPSBEU0FfUE9SVF9UWVBFX0RTQSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmVnbWFwX3JlYWQocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QTVNSX1AoZHAtXHUwMDNlaW5kZXgpLCBcdTAwMjZwbXNyKTtcbitcbitcdGlmICghKHBtc3IgXHUwMDI2IFBNU1JfTElOSykpXG4rXHRcdHJldHVybjtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGwsIFx1MDAyNmRzLVx1MDAzZWRzdC1cdTAwM2VydGFibGUsIGxpc3QpIHtcbitcdFx0aWYgKGRsLVx1MDAzZWRwICE9IGRwKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRwZWVyX2RwID0gZGwtXHUwMDNlbGlua19kcDtcbitcbitcdFx0aWYgKHBlZXJfZHAtXHUwMDNldHlwZSAhPSBEU0FfUE9SVF9UWVBFX0RTQSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cGVlcl9kcyA9IGRsLVx1MDAzZWxpbmtfZHAtXHUwMDNlZHM7XG4rXG4rXHRcdGlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGVlcl9kcy1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZSxcbitcdFx0XHRcdFx0ICAgICBcImVjb25ldCxlbjc1MTIyMS1zd2l0Y2hcIikpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHBlZXIgPSBwZWVyX2RzLVx1MDAzZXByaXY7XG4rXG4rXHRcdGlmIChwZWVyLVx1MDAzZWlkICE9IElEX0VONzUxMjIxKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlbjc1MTIyMV90cmdtaWlfcGFpcl9zZXR1cChwcml2LCBkcC1cdTAwM2VpbmRleCwgcGVlcixcbitcdFx0XHRcdFx0ICAgcGVlcl9kcC1cdTAwM2VpbmRleCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gbXQ3NTMwX21pYl9yZXNldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuQEAgLTEyODEsMTMgKzE1NTMsNDEgQEAgbXQ3NTN4X3RyYXBfZnJhbWVzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdFx0XHRcdCAgIFRPX0NQVV9GV19DUFVfT05MWSk7XG4gfVxuIFxuK3N0YXRpYyBpbnRcbittdDc1MzBfcG9ydF9jaGFuZ2VfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBuZXdfbXR1KTtcbitcbisvKiBJZiB0aGlzIHN3aXRjaCBpcyBkb3duc3RyZWFtIG9mIGFub3RoZXIgc3dpdGNoIHRoYXQgaXMgaW4gcGFzc3Rocm91Z2ggbW9kZSxcbisgKiB0aGUgXCJDUFVcIiBwb3J0IGlzIGFjdHVhbGx5IGEgRFNBIHBvcnQuXG4rICovXG4gc3RhdGljIHZvaWRcbiBtdDc1M3hfY3B1X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4ge1xuIFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcbi1cdC8qIEVuYWJsZSBNZWRpYXRlayBoZWFkZXIgbW9kZSBvbiB0aGUgY3B1IHBvcnQgKi9cbi1cdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcbitcdGlmIChwcml2LVx1MDAzZWlzX3Bhc3N0aHJvdWdoKSB7XG4rXHRcdC8qIERpc2FibGUgcGFyc2luZyBvZiB0aGUgRFNBIHRhZywgaXQgd2lsbCBiZSBmb3J3YXJkZWQgYmxpbmRseVxuK1x0XHQgKiB0byB0aGUgZG93bnN0cmVhbSBzd2l0Y2guXG4rXHRcdCAqL1xuK1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QVkNfUChwb3J0KSxcbitcdFx0XHQgICAgIFZMQU5fQVRUUihNVDc1MzBfVkxBTl9UUkFOU1BBUkVOVCkgfFxuK1x0XHRcdCAgICAgUFZDX0VHX1RBRyhNVDc1MzBfVkxBTl9FR19ESVNBQkxFRCkpO1xuK1xuK1x0XHQvKiBUaGUgcG9ydCBpcyBub3QgY29uZmlndXJlZCB0byBwYXJzZSBEU0EgdGFncywgc28gdGhleSBhcmVcbitcdFx0ICogbGlhYmxlIHRvIGJlIGNvbmZ1c2VkIGZvciBsZW5ndGggZmllbGRzLCBzbyBsZW5ndGggY2hlY2sgaXNcbitcdFx0ICogZGlzYWJsZWQuXG4rXHRcdCAqL1xuK1x0XHRyZWdtYXBfY2xlYXJfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX0FHQywgQUdDX0wyTEVOX0NISyk7XG4rXG4rXHRcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIE1UVSBpcyBvbmx5IGVuZm9yY2VkIGRvd25zdHJlYW0gKi9cbitcdFx0bXQ3NTMwX3BvcnRfY2hhbmdlX210dShkcywgcG9ydCwgTVQ3NTMwX01BWF9NVFUpO1xuK1xuK1x0XHQvKiBMb29wIGRldGVjdGlvbiBoYXMgbm8gdmFsdWUgaW4gcGFzc3Rocm91Z2ggbW9kZSAqL1xuK1x0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzWF9NVFJBUCxcbitcdFx0XHRcdE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIE5vdCBwYXNzdGhyb3VnaCwgZW5hYmxlIERTQSB0YWcgaGFuZGxpbmcgb24gQ1BVIHBvcnQuICovXG4rXHRcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLCBQT1JUX1NQRUNfVEFHKTtcbitcdH1cbiBcbiBcdC8qIEVuYWJsZSBmbG9vZGluZyBvbiB0aGUgQ1BVIHBvcnQgKi9cbiBcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01GQyxcbkBAIC0xMzE3LDYgKzE2MTcsNyBAQCBzdGF0aWMgaW50XG4gbXQ3NTMwX3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4ge1xuK1x0aW50IHVwc3RyZWFtX3B0ID0gZHNhX3N3aXRjaF91cHN0cmVhbV9wb3J0KGRzKTtcbiBcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4gXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFxuQEAgLTEzMjcsMTcgKzE2MjgsNDMgQEAgbXQ3NTMwX3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHQgKiBicmlkZ2UuXG4gXHQgKi9cbiBcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSkge1xuLVx0XHRzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcCA9IGRwLVx1MDAzZWNwdV9kcDtcbitcdFx0cHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSB8PSBQQ1JfTUFUUklYKEJJVCh1cHN0cmVhbV9wdCkpO1xuK1xuK1x0fSBlbHNlIGlmIChkc2FfcG9ydF9pc19kc2EoZHApIFx1MDAyNlx1MDAyNiBkcC1cdTAwM2VpbmRleCAhPSB1cHN0cmVhbV9wdCkge1xuK1x0XHRwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKHVwc3RyZWFtX3B0KSk7XG4rXG4rXHRcdC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4rXHRcdFdBUk5fT05fT05DRSghcHJpdi1cdTAwM2Vpc19wYXNzdGhyb3VnaCk7XG4rXG4rXHRcdC8qIFdlIGFyZSBwYXNzaW5nIHRocm91Z2ggdG8gYSBkb3duc3RyZWFtIHN3aXRjaCBzbyB3ZSBzZXQgYm90aFxuK1x0XHQgKiBDUFUgYW5kIGRvd25zdHJlYW0gbGluayB0byBwYXNzIHRyYWZmaWMgdW50b3VjaGVkIHNvIHRoYXRcbitcdFx0ICogdGhlIFNUQUcgZnJvbSB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggd2lsbCBwYXNzIHRvIHRoZSB1cHN0cmVhbS5cbitcdFx0ICovXG4rXHRcdHJlZ21hcF93cml0ZShwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTMwX1BWQ19QKHBvcnQpLFxuK1x0XHRcdCAgICAgVkxBTl9BVFRSKE1UNzUzMF9WTEFOX1RSQU5TUEFSRU5UKSB8XG4rXHRcdFx0ICAgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0RJU0FCTEVEKSk7XG4rXG4rXHRcdC8qIFdlIGxldCB0aGUgZG93bnN0cmVhbSBzd2l0Y2ggZmxvb2QgKi9cbitcdFx0cmVnbWFwX3NldF9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1M1hfTUZDLCBCQ19GRlAoQklUKHBvcnQpKSB8XG4rXHRcdFx0XHRVTk1fRkZQKEJJVChwb3J0KSkgfCBVTlVfRkZQKEJJVChwb3J0KSkpO1xuIFxuLVx0XHRwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtIHw9IFBDUl9NQVRSSVgoQklUKGNwdV9kcC1cdTAwM2VpbmRleCkpO1xuK1x0XHQvKiBNYWtlIHRoZSB1cHN0cmVhbSBwb3J0IGFibGUgdG8gY29ubmVjdCB0byB0aGUgRFNBIHBvcnQuXG4rXHRcdCAqIFRoaXMgbXVzdCBiZSBleHBsaWNpdCBiZWNhdXNlIFBPUlRfU1BFQ19UQUcgaXMgdW5zZXQuXG4rXHRcdCAqL1xuK1x0XHRyZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QQ1JfUCh1cHN0cmVhbV9wdCksXG4rXHRcdFx0ICAgICBQQ1JfTUFUUklYKEJJVChwb3J0KSkpO1xuIFx0fVxuIFx0cHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5lbmFibGUgPSB0cnVlO1xuLVx0cmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfUENSX1AocG9ydCksIFBDUl9NQVRSSVhfTUFTSyxcbi1cdFx0XHQgICBwcml2LVx1MDAzZXBvcnRzW3BvcnRdLnBtKTtcbitcbitcdC8qIEluIHBhc3N0aHJvdWdoIG1vZGUsIENQVSBwb3J0IG1hc2sgaXMgc2V0IGFib3ZlLiAqL1xuK1x0aWYgKCEocHJpdi1cdTAwM2Vpc19wYXNzdGhyb3VnaCBcdTAwMjZcdTAwMjYgZHAtXHUwMDNlaW5kZXggPT0gdXBzdHJlYW1fcHQpKVxuK1x0XHRyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QQ1JfUChwb3J0KSxcbitcdFx0XHRcdCAgIFBDUl9NQVRSSVhfTUFTSywgcHJpdi1cdTAwM2Vwb3J0c1twb3J0XS5wbSk7XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbitcdGlmIChwcml2LVx1MDAzZWlkICE9IElEX01UNzUzMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc2MjEgXHUwMDI2XHUwMDI2XG4rXHQgICAgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0aWYgKHBvcnQgPT0gNSlcbkBAIC0xMzY0LDcgKzE2OTEsOCBAQCBtdDc1MzBfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NTMwIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX01UNzYyMSlcbitcdGlmIChwcml2LVx1MDAzZWlkICE9IElEX01UNzUzMCBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc2MjEgXHUwMDI2XHUwMDI2XG4rXHQgICAgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2VpZCAhPSBJRF9FTjc1MTIyMV9FWFQpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIERvIG5vdCBzZXQgTVQ3NTMwX1A1X0RJUyB3aGVuIHBvcnQgNSBpcyBiZWluZyB1c2VkIGZvciBQSFkgbXV4aW5nLiAqL1xuQEAgLTEzODUsNyArMTcxMyw3IEBAIG10NzUzMF9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXG4gXHQgKiBsYXJnZXN0IE1UVSBvZiB0aGUgdXNlciBwb3J0cy4gQmVjYXVzZSB0aGUgc3dpdGNoIG9ubHkgaGFzIGEgZ2xvYmFsXG4gXHQgKiBSWCBsZW5ndGggcmVnaXN0ZXIsIG9ubHkgYWxsb3dpbmcgQ1BVIHBvcnQgaGVyZSBpcyBlbm91Z2guXG4gXHQgKi9cbi1cdGlmICghZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSlcbitcdGlmICghZHNhX2lzX3Vwc3RyZWFtX3BvcnQoZHMsIHBvcnQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJlZ21hcF9yZWFkKHByaXYtXHUwMDNlcmVnbWFwLCBNVDc1MzBfR01BQ0NSLCBcdTAwMjZ2YWwpO1xuQEAgLTIzMzMsNyArMjY2MSw3IEBAIG10NzUzMF9mcmVlX21kaW9faXJxKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludFxuK2ludFxuIG10NzUzMF9zZXR1cF9tZGlvKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucCwgKm5wID0gcHJpdi1cdTAwM2VkZXYtXHUwMDNlb2Zfbm9kZTtcbkBAIC0yMzQzLDYgKzI2NzEsMTAgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0c3RhdGljIGludCBpZHg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbitcdC8qIEFscmVhZHkgZG9uZSAqL1xuK1x0aWYgKHByaXYtXHUwMDNlY2hpbGRfYnVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdG1ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcIm1kaW9cIik7XG4gXG4gXHRpZiAobW5wIFx1MDAyNlx1MDAyNiAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShtbnApKVxuQEAgLTIzNzAsOCArMjcwMiwxMSBAQCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4gXHRpZiAocHJpdi1cdTAwM2VpcnFfZG9tYWluIFx1MDAyNlx1MDAyNiAhbW5wKVxuIFx0XHRtdDc1MzBfc2V0dXBfbWRpb19pcnEocHJpdik7XG4gXG4rXHRwcml2LVx1MDAzZWNoaWxkX2J1cyA9IGJ1cztcbitcbiBcdHJldCA9IGRldm1fb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYsIGJ1cywgbW5wKTtcbiBcdGlmIChyZXQpIHtcbitcdFx0cHJpdi1cdTAwM2VjaGlsZF9idXMgPSBOVUxMO1xuIFx0XHRkZXZfZXJyKGRldiwgXCJmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXM6ICVkXFxuXCIsIHJldCk7XG4gXHRcdGlmIChwcml2LVx1MDAzZWlycV9kb21haW4gXHUwMDI2XHUwMDI2ICFtbnApXG4gXHRcdFx0bXQ3NTMwX2ZyZWVfbWRpb19pcnEocHJpdik7XG5AQCAtMjM4MSw2ICsyNzE2LDcgQEAgbXQ3NTMwX3NldHVwX21kaW8oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxuIFx0b2Zfbm9kZV9wdXQobW5wKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG10NzUzMF9zZXR1cF9tZGlvKTtcbiBcbiBzdGF0aWMgaW50XG4gbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbkBAIC0yNDA2LDExICsyNzQyLDYgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4tXHRpZiAoIWRuKSB7XG4tXHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcInBhcmVudCBPRiBub2RlIG9mIERTQSBjb25kdWl0IG5vdCBmb3VuZFwiKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4gXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4gXHRkcy1cdTAwM2V1bnRhZ192bGFuX2F3YXJlX2JyaWRnZV9wdmlkID0gdHJ1ZTtcbiBcdGRzLVx1MDAzZW10dV9lbmZvcmNlbWVudF9pbmdyZXNzID0gdHJ1ZTtcbkBAIC0yNDg5LDYgKzI4MjAsMTIgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0XHQgICBNVDc1MzBfQ0hHX1RSQVAgfCBNVDc1MzBfUEhZX0lORElSRUNUX0FDQ0VTUyxcbiBcdFx0XHQgICBNVDc1MzBfQ0hHX1RSQVApO1xuIFxuK1x0LyogRU43NTEyMjEgTUNNIHN0YXJ0cyBvbiB0aGUgd3JvbmcgZnJlcXVlbmN5ICovXG4rXHRpZiAocHJpdi1cdTAwM2VpZCA9PSBJRF9FTjc1MTIyMV9FWFQpXG4rXHRcdHJlZ21hcF91cGRhdGVfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX01UUkFQLFxuK1x0XHRcdFx0ICAgTVQ3NTMwX0NIR19UUkFQIHwgTVQ3NTMwX0NLX1NFTCxcbitcdFx0XHRcdCAgIE1UNzUzMF9DSEdfVFJBUCk7XG4rXG4gXHRpZiAoKHZhbCBcdTAwMjYgTVQ3NTMwX1hUQUxfTUFTSykgPT0gTVQ3NTMwX1hUQUxfNDBNSFopXG4gXHRcdG10NzUzMF9wbGxfc2V0dXAocHJpdik7XG4gXG5AQCAtMjUxMiw3ICsyODQ5LDcgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0LyogRGlzYWJsZSBsZWFybmluZyBieSBkZWZhdWx0IG9uIGFsbCBwb3J0cyAqL1xuIFx0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMF9QU0NfUChpKSwgU0FfRElTKTtcbiBcbi1cdFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgaSkpIHtcbitcdFx0aWYgKGRzYV9pc191cHN0cmVhbV9wb3J0KGRzLCBpKSkge1xuIFx0XHRcdG10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpO1xuQEAgLTI1MzYsNyArMjg3Myw3IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKiBDaGVjayBmb3IgUEhZIG11eGluZyBvbiBwb3J0IDUgKi9cbi1cdGlmIChkc2FfaXNfdW51c2VkX3BvcnQoZHMsIDUpKSB7XG4rXHRpZiAoZG4gXHUwMDI2XHUwMDI2IGRzYV9pc191bnVzZWRfcG9ydChkcywgNSkpIHtcbiBcdFx0LyogU2NhbiB0aGUgZXRoZXJuZXQgbm9kZXMuIExvb2sgZm9yIEdNQUMxLCBsb29rdXAgdGhlIHVzZWQgUEhZLlxuIFx0XHQgKiBTZXQgcHJpdi1cdTAwM2VwNV9tb2RlIHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZSBpZiBQSFkgbXV4aW5nIGlzXG4gXHRcdCAqIGRldGVjdGVkLlxuQEAgLTI2MzYsNyArMjk3Myw3IEBAIG10NzUzMV9zZXR1cF9jb21tb24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRyZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIE1UNzUzMV9EQkdfQ05UKGkpLFxuIFx0XHRcdFx0TVQ3NTMxX0RJU19DTFIpO1xuIFxuLVx0XHRpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkge1xuK1x0XHRpZiAoZHNhX2lzX3Vwc3RyZWFtX3BvcnQoZHMsIGkpKSB7XG4gXHRcdFx0bXQ3NTN4X2NwdV9wb3J0X2VuYWJsZShkcywgaSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bXQ3NTMwX3BvcnRfZGlzYWJsZShkcywgaSk7XG5AQCAtMjY3NCw4ICszMDExLDExIEBAIG10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4ge1xuIFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdHUzMiB2YWwsIGlkO1xuK1x0aW50IGN0bF9waHk7XG4gXHRpbnQgcmV0LCBpO1xuIFxuK1x0Y3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xuK1xuIFx0LyogUmVzZXQgd2hvbGUgY2hpcCB0aHJvdWdoIGdwaW8gcGluIG9yIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzIGZvclxuIFx0ICogZGlmZmVyZW50IHR5cGUgb2YgaGFyZHdhcmVcbiBcdCAqL1xuQEAgLTI3NDMsMjUgKzMwODMsMjEgQEAgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdCAqIHBoeV9bcmVhZCx3cml0ZV1fbW1kX2luZGlyZWN0IGlzIGNhbGxlZCwgd2UgcHJvdmlkZSBvdXIgb3duXG4gXHQgKiBtdDc1MzFfaW5kX21tZF9waHlfW3JlYWQsd3JpdGVdIHRvIGNvbXBsZXRlIHRoaXMgZnVuY3Rpb24uXG4gXHQgKi9cbi1cdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsXG4tXHRcdFx0XHQgICAgICBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkciksXG4tXHRcdFx0XHQgICAgICBNRElPX01NRF9WRU5EMiwgQ09SRV9QTExfR1JPVVA0KTtcbitcdHJldCA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHByaXYsIGN0bF9waHksIE1ESU9fTU1EX1ZFTkQyLFxuK1x0XHRcdFx0ICAgICAgQ09SRV9QTExfR1JPVVA0KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHR2YWwgPSByZXQ7XG4gXHR2YWwgfD0gTVQ3NTMxX1JHX1NZU1BMTF9ETVkyIHwgTVQ3NTMxX1BIWV9QTExfQllQQVNTX01PREU7XG4gXHR2YWwgXHUwMDI2PSB+TVQ3NTMxX1BIWV9QTExfT0ZGO1xuLVx0cmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsXG4tXHRcdFx0XHQgICAgICAgTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpLFxuLVx0XHRcdFx0ICAgICAgIE1ESU9fTU1EX1ZFTkQyLCBDT1JFX1BMTF9HUk9VUDQsIHZhbCk7XG4rXHRyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdiwgY3RsX3BoeSwgTURJT19NTURfVkVORDIsXG4rXHRcdFx0XHQgICAgICAgQ09SRV9QTExfR1JPVVA0LCB2YWwpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdC8qIERpc2FibGUgRUVFIGFkdmVydGlzZW1lbnQgb24gdGhlIHN3aXRjaCBQSFlzLiAqL1xuLVx0Zm9yIChpID0gTVQ3NTNYX0NUUkxfUEhZX0FERFIocHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHIpO1xuLVx0ICAgICBpIFx1MDAzYyBNVDc1M1hfQ1RSTF9QSFlfQUREUihwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcikgKyBNVDc1MzBfTlVNX1BIWVM7XG4tXHQgICAgIGkrKykge1xuK1x0Zm9yIChpID0gY3RsX3BoeTsgaSBcdTAwM2MgY3RsX3BoeSArIE1UNzUzMF9OVU1fUEhZUzsgaSsrKSB7XG4gXHRcdG10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZShwcml2LCBpLCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLFxuIFx0XHRcdFx0XHQgMCk7XG4gXHR9XG5AQCAtMjkxMCw2ICszMjQ2LDQ0IEBAIHN0YXRpYyB2b2lkIGVuNzUyOF9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBlbjc1MTIyMV9tYWNfcG9ydF9nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdHN3aXRjaCAocG9ydCkge1xuK1x0LyogRU43NTEyMjEgcG9ydHMgMC4uMyBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlZ3JhdGVkIEZFIFBIWXMuICovXG4rXHRjYXNlIDAgLi4uIDM6XG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4rXHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1xuK1x0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xuK1x0XHRicmVhaztcbitcbitcdC8qIFBvcnQgNCBpcyBjb25uZWN0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgRU43NTEyL0VONzUyMSBHUEhZLiAqL1xuK1x0Y2FzZSA0OlxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuK1x0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcbitcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwRkQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0LyogUG9ydCA1IGlzIHRoZSAxIEdiaXQvcyBUUkdNSUkgY2FzY2FkZSB0byB0aGUgZXh0ZXJuYWwgTVQ3NTMwLiAqL1xuK1x0Y2FzZSA1OlxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSxcbitcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXG4rXHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4rXHRcdGJyZWFrO1xuK1xuK1x0LyogUG9ydCA2IGlzIHRoZSAxIEdiaXQvcyBDUFUgbGluayB0byBHRE0xLiAqL1xuK1x0Y2FzZSA2OlxuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMLFxuK1x0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcbitcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkXG4gbXQ3NTMwX21hY19jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsXG4gXHRcdCAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbkBAIC0zMDU5LDYgKzM0MzMsOSBAQCBzdGF0aWMgdm9pZCBtdDc1M3hfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdH1cbiBcbiBcdHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgTVQ3NTNYX1BNQ1JfUChkcC1cdTAwM2VpbmRleCksIG1jcik7XG4rXG4rXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpXG4rXHRcdG10NzUzMF9jYWxfaW50ZXJzd2l0Y2hfdHJnbWlpKGRwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXQ3NTN4X3BoeWxpbmtfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuQEAgLTMyOTgsMTAgKzM2NzUsMTEgQEAgbXQ3NTN4X2NvbmR1aXRfc3RhdGVfY2hhbmdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiBcbiBcdC8qIFNldCB0aGUgQ1BVIHBvcnQgdG8gdHJhcCBmcmFtZXMgdG8gZm9yIE1UNzUzMC4gVHJhcHBlZCBmcmFtZXMgd2lsbCBiZVxuIFx0ICogZm9yd2FyZGVkIHRvIHRoZSBudW1lcmljYWxseSBzbWFsbGVzdCBDUFUgcG9ydCB3aG9zZSBjb25kdWl0XG4tXHQgKiBpbnRlcmZhY2UgaXMgdXAuXG4rXHQgKiBpbnRlcmZhY2UgaXMgdXAuIE5PVEU6IFwiQ1BVIHBvcnRcIiBjYW4gYWxzbyBtZWFuIGFuIHVwc3RyZWFtIERTQSBsaW5rLlxuIFx0ICovXG4gXHRpZiAocHJpdi1cdTAwM2VpZCAhPSBJRF9NVDc1MzAgXHUwMDI2XHUwMDI2IHByaXYtXHUwMDNlaWQgIT0gSURfTVQ3NjIxIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTI4KVxuK1x0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTI4IFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZWlkICE9IElEX0VONzUxMjIxIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHByaXYtXHUwMDNlaWQgIT0gSURfRU43NTEyMjFfRVhUKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtYXNrID0gQklUKGNwdV9kcC1cdTAwM2VpbmRleCk7XG5AQCAtMzM5Myw2ICszNzcxLDc2IEBAIHN0YXRpYyBpbnQgbXQ3OTg4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdHJldHVybiBtdDc1MzFfc2V0dXBfY29tbW9uKGRzKTtcbiB9XG4gXG4rLyogMSBpZiBwYXNzdGhyb3VnaCwgbmVnYXRpdmUgaWYgZXJyb3IuICovXG4rc3RhdGljIGludCBtdDc1M3hfY2hlY2tfcGFzc3Rocm91Z2goc3RydWN0IGRldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydHMsICpwb3J0O1xuK1x0aW50IHBhc3N0aHJvdWdoX3BvcnRzID0gMDtcbitcdGludCBlbmFibGVkX3BvcnRzID0gMDtcbitcbitcdHBvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZW9mX25vZGUsIFwicG9ydHNcIik7XG4rXHRpZiAoIXBvcnRzKVxuK1x0XHRwb3J0cyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRldi1cdTAwM2VvZl9ub2RlLCBcImV0aGVybmV0LXBvcnRzXCIpO1xuK1xuK1x0aWYgKCFwb3J0cykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJubyBwb3J0cyBjaGlsZCBub2RlIGZvdW5kXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBvcnRzLCBwb3J0KSB7XG4rXHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGluaztcbitcbitcdFx0ZW5hYmxlZF9wb3J0cysrO1xuK1xuK1x0XHRsaW5rID0gb2ZfcGFyc2VfcGhhbmRsZShwb3J0LCBcImV0aGVybmV0XCIsIDApO1xuK1x0XHRpZiAoIWxpbmspXG4rXHRcdFx0bGluayA9IG9mX3BhcnNlX3BoYW5kbGUocG9ydCwgXCJsaW5rXCIsIDApO1xuK1xuK1x0XHRpZiAoIWxpbmspXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdG9mX25vZGVfcHV0KGxpbmspO1xuK1xuK1x0XHRwYXNzdGhyb3VnaF9wb3J0cysrO1xuK1x0fVxuK1xuK1x0b2Zfbm9kZV9wdXQocG9ydHMpO1xuK1xuK1x0LypcbitcdCAqIEEgc3dpdGNoIGlzIGNvbnNpZGVyZWQgcGFzc3Rocm91Z2ggaWYgZXhhY3RseSB0d28gYXZhaWxhYmxlXG4rXHQgKiBwb3J0cyBoYXZlIGFuIFwiZXRoZXJuZXRcIiBvciBcImxpbmtcIiBwaGFuZGxlLlxuK1x0ICovXG4rXHRpZiAocGFzc3Rocm91Z2hfcG9ydHMgXHUwMDNlIDIgfHxcbitcdCAgICAocGFzc3Rocm91Z2hfcG9ydHMgPT0gMiBcdTAwMjZcdTAwMjYgZW5hYmxlZF9wb3J0cyAhPSAyKVxuK1x0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIk9ubHkgdHdvIHBvcnRzIGFsbG93ZWQgaW4gcGFzc3Rocm91Z2ggbW9kZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGFzc3Rocm91Z2hfcG9ydHMgPT0gMjtcbit9XG4rXG4rLyogTm8gbWFuaXB1bGF0aW9uIG9mIGZvcndhcmRpbmcgcnVsZXMgYWxsb3dlZCBpbiBwYXNzdGhyb3VnaCBtb2RlICovXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MzBfcGFzc3Rocm91Z2hfc3dpdGNoX29wcyA9IHtcbitcdC5nZXRfdGFnX3Byb3RvY29sXHQ9IG10a19nZXRfdGFnX3Byb3RvY29sLFxuK1x0LnNldHVwXHRcdFx0PSBtdDc1M3hfc2V0dXAsXG4rXHQudGVhcmRvd25cdFx0PSBtdDc1M3hfdGVhcmRvd24sXG4rXHQucHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQgPSBtdDc1M3hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQsXG4rXHQuZ2V0X3N0cmluZ3NcdFx0PSBtdDc1MzBfZ2V0X3N0cmluZ3MsXG4rXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGh0b29sX3N0YXRzLFxuK1x0LmdldF9zc2V0X2NvdW50XHRcdD0gbXQ3NTMwX2dldF9zc2V0X2NvdW50LFxuK1x0LmdldF9ldGhfbWFjX3N0YXRzXHQ9IG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyxcbitcdC5nZXRfcm1vbl9zdGF0c1x0XHQ9IG10NzUzMF9nZXRfcm1vbl9zdGF0cyxcbitcdC5nZXRfZXRoX2N0cmxfc3RhdHNcdD0gbXQ3NTMwX2dldF9ldGhfY3RybF9zdGF0cyxcbitcdC5nZXRfc3RhdHM2NFx0XHQ9IG10NzUzMF9nZXRfc3RhdHM2NCxcbitcdC5wb3J0X2VuYWJsZVx0XHQ9IG10NzUzMF9wb3J0X2VuYWJsZSxcbitcdC5wb3J0X2Rpc2FibGVcdFx0PSBtdDc1MzBfcG9ydF9kaXNhYmxlLFxuK1x0LnBoeWxpbmtfZ2V0X2NhcHNcdD0gbXQ3NTN4X3BoeWxpbmtfZ2V0X2NhcHMsXG4rXHQuc3VwcG9ydF9lZWVcdFx0PSBkc2Ffc3VwcG9ydHNfZWVlLFxuK1x0LnNldF9tYWNfZWVlXHRcdD0gbXQ3NTN4X3NldF9tYWNfZWVlLFxuK1x0LmNvbmR1aXRfc3RhdGVfY2hhbmdlXHQ9IG10NzUzeF9jb25kdWl0X3N0YXRlX2NoYW5nZSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7XG4gXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBtdGtfZ2V0X3RhZ19wcm90b2NvbCxcbiBcdC5zZXR1cFx0XHRcdD0gbXQ3NTN4X3NldHVwLFxuQEAgLTM1MTksMTQgKzM5NjcsNDAgQEAgY29uc3Qgc3RydWN0IG10NzUzeF9pbmZvIG10NzUzeF90YWJsZVtdID0ge1xuIFx0XHQucGh5X3dyaXRlX2M0NSA9IG10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZSxcbiBcdFx0Lm1hY19wb3J0X2dldF9jYXBzID0gZW43NTI4X21hY19wb3J0X2dldF9jYXBzLFxuIFx0fSxcbitcdFtJRF9FTjc1MTIyMV0gPSB7XG4rXHRcdC5pZCA9IElEX0VONzUxMjIxLFxuK1x0XHQucGNzX29wcyA9IFx1MDAyNm10NzUzMF9wY3Nfb3BzLFxuK1x0XHQuc3dfc2V0dXAgPSBtdDc5ODhfc2V0dXAsXG4rXHRcdC5waHlfcmVhZF9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfcmVhZCxcbitcdFx0LnBoeV93cml0ZV9jMjIgPSBtdDc1MzFfaW5kX2MyMl9waHlfd3JpdGUsXG4rXHRcdC5waHlfcmVhZF9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZCxcbitcdFx0LnBoeV93cml0ZV9jNDUgPSBtdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUsXG4rXHRcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IGVuNzUxMjIxX21hY19wb3J0X2dldF9jYXBzLFxuK1x0XHQubWFjX3BvcnRfY29uZmlnID0gbXQ3NTMwX21hY19jb25maWcsXG4rXHR9LFxuK1x0W0lEX0VONzUxMjIxX0VYVF0gPSB7XG4rXHRcdC5pZCA9IElEX0VONzUxMjIxX0VYVCxcbitcdFx0LnBjc19vcHMgPSBcdTAwMjZtdDc1MzBfcGNzX29wcyxcbitcdFx0LnN3X3NldHVwID0gbXQ3NTMwX3NldHVwLFxuK1x0XHQucGh5X3JlYWRfYzIyID0gbXQ3NTMwX3BoeV9yZWFkX2MyMixcbitcdFx0LnBoeV93cml0ZV9jMjIgPSBtdDc1MzBfcGh5X3dyaXRlX2MyMixcbitcdFx0LnBoeV9yZWFkX2M0NSA9IG10NzUzMF9waHlfcmVhZF9jNDUsXG4rXHRcdC5waHlfd3JpdGVfYzQ1ID0gbXQ3NTMwX3BoeV93cml0ZV9jNDUsXG4rXHRcdC5tYWNfcG9ydF9nZXRfY2FwcyA9IG10NzUzMF9tYWNfcG9ydF9nZXRfY2FwcyxcbitcdFx0Lm1hY19wb3J0X2NvbmZpZyA9IG10NzUzMF9tYWNfY29uZmlnLFxuK1x0fSxcbiB9O1xuIEVYUE9SVF9TWU1CT0xfR1BMKG10NzUzeF90YWJsZSk7XG4gXG4gaW50XG4gbXQ3NTMwX3Byb2JlX2NvbW1vbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXG4ge1xuK1x0aW50IHBhc3N0aHJvdWdoID0gbXQ3NTN4X2NoZWNrX3Bhc3N0aHJvdWdoKHByaXYtXHUwMDNlZGV2KTtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtXHUwMDNlZGV2O1xuIFxuK1x0aWYgKHBhc3N0aHJvdWdoIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcGFzc3Rocm91Z2g7XG4rXG4gXHRwcml2LVx1MDAzZWRzID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2LVx1MDAzZWRzKSwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXByaXYtXHUwMDNlZHMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuQEAgLTM1NDQsNyArNDAxOCwxNCBAQCBtdDc1MzBfcHJvYmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcbiBcdHByaXYtXHUwMDNlaWQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlaWQ7XG4gXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbiBcdHByaXYtXHUwMDNlZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4tXHRwcml2LVx1MDAzZWRzLVx1MDAzZW9wcyA9IFx1MDAyNm10NzUzMF9zd2l0Y2hfb3BzO1xuK1xuK1x0aWYgKHBhc3N0aHJvdWdoKSB7XG4rXHRcdHByaXYtXHUwMDNlZHMtXHUwMDNlb3BzID0gXHUwMDI2bXQ3NTMwX3Bhc3N0aHJvdWdoX3N3aXRjaF9vcHM7XG4rXHRcdHByaXYtXHUwMDNlaXNfcGFzc3Rocm91Z2ggPSB0cnVlO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpdi1cdTAwM2Vkcy1cdTAwM2VvcHMgPSBcdTAwMjZtdDc1MzBfc3dpdGNoX29wcztcbitcdH1cbitcbiBcdHByaXYtXHUwMDNlZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2bXQ3NTN4X3BoeWxpbmtfbWFjX29wcztcbiBcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0c19sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmggYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcbmluZGV4IDJiYmJlNjE3YjUyZWUuLjFhNDMyOTc0OWMwZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaFxuQEAgLTI0LDYgKzI0LDggQEAgZW51bSBtdDc1M3hfaWQge1xuIFx0SURfRU43NTgxID0gNCxcbiBcdElEX0FONzU4MyA9IDUsXG4gXHRJRF9FTjc1MjggPSA2LFxuK1x0SURfRU43NTEyMjEgPSA3LFxuK1x0SURfRU43NTEyMjFfRVhUID0gOCxcbiB9O1xuIFxuICNkZWZpbmVcdE5VTV9UUkdNSUlfQ1RSTFx0XHRcdDVcbkBAIC00MCw2ICs0Miw3IEBAIGVudW0gbXQ3NTN4X2lkIHtcbiAvKiBSZWdpc3RlciBmb3IgQVJMIGdsb2JhbCBjb250cm9sICovXG4gI2RlZmluZSBNVDc1M1hfQUdDXHRcdFx0MHhjXG4gI2RlZmluZSAgTE9DQUxfRU5cdFx0XHRCSVQoNylcbisjZGVmaW5lICBBR0NfTDJMRU5fQ0hLXHRcdFx0QklUKDQpXG4gXG4gLyogUmVnaXN0ZXIgZm9yIE1BQyBmb3J3YXJkIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1UNzUzWF9NRkNcdFx0XHQweDEwXG5AQCAtMzU1LDYgKzM1OCw5IEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hY2NfZnJtIHtcbiAjZGVmaW5lIE1UNzUzWF9QTUNSX1AoeClcdFx0KDB4MzAwMCArICgoeCkgKiAweDEwMCkpXG4gI2RlZmluZSAgUE1DUl9JRkdfWE1JVF9NQVNLXHRcdEdFTk1BU0soMTksIDE4KVxuICNkZWZpbmUgIFBNQ1JfSUZHX1hNSVQoeClcdFx0RklFTERfUFJFUChQTUNSX0lGR19YTUlUX01BU0ssIHgpXG4rI2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzk2XHRcdDBcbisjZGVmaW5lICAgIFBNQ1JfSUZHX1hNSVRfUkFORFx0XHQxXG4rI2RlZmluZSAgICBQTUNSX0lGR19YTUlUXzY0XHRcdDJcbiAjZGVmaW5lICBQTUNSX0VYVF9QSFlcdFx0XHRCSVQoMTcpXG4gI2RlZmluZSAgUE1DUl9NQUNfTU9ERVx0XHRcdEJJVCgxNilcbiAjZGVmaW5lICBNVDc1MzBfRk9SQ0VfTU9ERVx0XHRCSVQoMTUpXG5AQCAtNTgzLDYgKzU4OSw4IEBAIGVudW0gbXQ3NTMxX2Nsa19za2V3IHtcbiAjZGVmaW5lIE1UNzUzWF9NVFJBUFx0XHRcdDB4NzgwNFxuICNkZWZpbmUgIE1UNzUzMF9QNV9QSFkwX1NFTFx0XHRCSVQoMjApXG4gI2RlZmluZSAgTVQ3NTMwX0NIR19UUkFQXHRcdEJJVCgxNilcbisjZGVmaW5lICBNVDc1MzBfQ0tfU0VMXHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgIE1UNzUzMF9MT09QX0RFVF9ESVNBQkxFXHRCSVQoMTQpXG4gI2RlZmluZSAgTVQ3NTMwX1A1X01BQ19TRUxcdFx0QklUKDEzKVxuICNkZWZpbmUgIE1UNzUzMF9QNl9ESVNcdFx0XHRCSVQoOClcbiAjZGVmaW5lICBNVDc1MzBfUDVfUkdNSUlfTU9ERVx0XHRCSVQoNylcbkBAIC01OTksNiArNjA3LDggQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcbiAvKiBSZWdpc3RlciBmb3IgVE9QIHNpZ25hbCBjb250cm9sICovXG4gI2RlZmluZSBNVDc1MzBfVE9QX1NJR19DVFJMXHRcdDB4NzgwOFxuICNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9OT1JNQUxcdFx0KEJJVCgxNykgfCBCSVQoMTYpKVxuKy8qIFVuZG9jdW1lbnRlZCAqL1xuKyNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9CMFx0XHRCSVQoMClcbiBcbiAjZGVmaW5lIE1UNzUzMV9UT1BfU0lHX1NSXHRcdDB4NzgwY1xuICNkZWZpbmUgIFBBRF9EVUFMX1NHTUlJX0VOXHRcdEJJVCgxKVxuQEAgLTY0NSwxOCArNjU1LDMxIEBAIGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB7XG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1JDS19SVFRcdFx0MHg3YTA0XG4gI2RlZmluZSAgRFFTMV9HQVRFXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIERRUzBfR0FURVx0XHRcdEJJVCgzMClcbisvKiBVbmRvY3VtZW50ZWQgKi9cbisjZGVmaW5lICBFTjc1MTIyMV9CMTdcdFx0XHRCSVQoMTcpXG4gXG4gI2RlZmluZSBNVDc1MzBfVFJHTUlJX1JEKHgpXHRcdCgweDdhMTAgKyAoeCkgKiA4KVxuICNkZWZpbmUgIEJTTElQX0VOXHRcdFx0QklUKDMxKVxuICNkZWZpbmUgIEVER0VfQ0hLXHRcdFx0QklUKDMwKVxuKyNkZWZpbmUgIFJEX1ZBTFVFX01BU0tcdFx0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lICBSRF9FUlJfTUFTS1x0XHRcdEdFTk1BU0soMTEsIDgpXG4gI2RlZmluZSAgUkRfVEFQX01BU0tcdFx0XHRHRU5NQVNLKDYsIDApXG4gI2RlZmluZSAgUkRfVEFQKHgpXHRcdFx0RklFTERfUFJFUChSRF9UQVBfTUFTSywgeClcbisvKiBUcmFpbmluZyBkb2VzIG5vdCB0cnkgYW55dGhpbmcgYmV5b25kIHRoaXMgKi9cbisjZGVmaW5lICBURF9UQVBfTUFYXHRcdFx0NjRcbiBcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfVFhDVFJMXHRcdDB4N2E0MFxuICNkZWZpbmUgIFRSQUlOX1RYRU5cdFx0XHRCSVQoMzEpXG4gI2RlZmluZSAgVFhDX0lOVlx0XHRcdEJJVCgzMClcbiAjZGVmaW5lICBUWF9SU1RcdFx0XHRcdEJJVCgyOClcbiBcbisjZGVmaW5lIEVONzUzMF9UUkdNSUlfVERfQ1RSTCh4KVx0KDB4N2E1MCArICh4KSAqIDgpXG4rI2RlZmluZSAgIFRHTUlJX1REX1RBUF9NQVNLXHRcdEdFTk1BU0soMTEsIDgpXG4rI2RlZmluZSAgIFRHTUlJX1REX1BBVF9NQVNLXHRcdEdFTk1BU0soNywgMClcbisvKiBVc2UgYSAwMTAxMDEwMSBiaXQgcGF0dGVybiAqL1xuKyNkZWZpbmUgICBUR01JSV9URF9QQVRcdFx0XHQweDU1XG4rI2RlZmluZSAgIFRHTUlJX1REX0ZBSUxfUEFUXHRcdDB4YWFcbitcbiAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfVERfT0RUKGkpXHRcdCgweDdhNTQgKyA4ICogKGkpKVxuICNkZWZpbmUgIFREX0RNX0RSVlBfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4gI2RlZmluZSAgVERfRE1fRFJWUCh4KVx0XHRcdEZJRUxEX1BSRVAoVERfRE1fRFJWUF9NQVNLLCB4KVxuQEAgLTc0Nyw4ICs3NzAsNiBAQCBlbnVtIG10NzUzMV94dGFsX2ZzZWwge1xuICNkZWZpbmUgIE1UNzUzMV9QSFlfUExMX09GRlx0XHRCSVQoNSlcbiAjZGVmaW5lICBNVDc1MzFfUEhZX1BMTF9CWVBBU1NfTU9ERVx0QklUKDQpXG4gXG4tI2RlZmluZSBNVDc1M1hfQ1RSTF9QSFlfQUREUihhZGRyKVx0KCgoYWRkcikgKyAxKSBcdTAwMjYgKFBIWV9NQVhfQUREUiAtIDEpKVxuLVxuICNkZWZpbmUgQ09SRV9QTExfR1JPVVA1XHRcdFx0MHg0MDRcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzFfTUFTS1x0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lICBSR19MQ0REU19QQ1dfTkNQTzEoeClcdFx0RklFTERfUFJFUChSR19MQ0REU19QQ1dfTkNQTzFfTUFTSywgeClcbkBAIC03NjQsNiArNzg1LDkgQEAgZW51bSBtdDc1MzFfeHRhbF9mc2VsIHtcbiAjZGVmaW5lICBSR19MQ0NEU19DKHgpXHRcdFx0RklFTERfUFJFUChSR19MQ0NEU19DX01BU0ssIHgpXG4gI2RlZmluZSAgUkdfTENERFNfUENXX05DUE9fQ0hHXHRcdEJJVCgzKVxuIFxuKyNkZWZpbmUgQ09SRV9QTExfR1JPVVA4XHRcdFx0MHg0MDdcbisjZGVmaW5lICBSR19MQ0REU19TU0NfRU5cdFx0QklUKDEwKVxuK1xuICNkZWZpbmUgQ09SRV9QTExfR1JPVVAxMFx0XHQweDQwOVxuICNkZWZpbmUgIFJHX0xDRERTX1NTQ19ERUxUQV9NQVNLXHRHRU5NQVNLKDExLCAwKVxuICNkZWZpbmUgIFJHX0xDRERTX1NTQ19ERUxUQSh4KVx0XHRGSUVMRF9QUkVQKFJHX0xDRERTX1NTQ19ERUxUQV9NQVNLLCB4KVxuQEAgLTg4Niw2ICs5MTAsOSBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8ge1xuICAqIEBkZXY6XHRcdFRoZSBkZXZpY2UgcG9pbnRlclxuICAqIEBkczpcdFx0XHRUaGUgcG9pbnRlciB0byB0aGUgZHNhIGNvcmUgc3RydWN0dXJlXG4gICogQGJ1czpcdFx0VGhlIGJ1cyB1c2VkIGZvciB0aGUgZGV2aWNlIGFuZCBidWlsdC1pbiBQSFlcbisgKiBAY2hpbGRfYnVzOlx0XHRUaGUgYnVzIGNyZWF0ZWQgYnkgdGhlIGRldmljZSwgb24gTURJTyBpbXBsZW1lbnRhdGlvbnNcbisgKlx0XHRcdHRoaXMgaXMgYnVzIGluZGlyZWN0bHkgYWNjZXNzZXMgYGJ1c2AsIG9uIE1NSU9cbisgKlx0XHRcdGltcGxlbWVudGF0aW9ucyB0aGlzIGJ1cyBpcyBwYXJ0IG9mIHRoZSBzd2l0Y2guXG4gICogQHJlZ21hcDpcdFx0VGhlIHJlZ21hcCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYWxsIHN3aXRjaCByZWdpc3RlcnNcbiAgKiBAcnN0YzpcdFx0VGhlIHBvaW50ZXIgdG8gcmVzZXQgY29udHJvbCB1c2VkIGJ5IE1DTVxuICAqIEBjb3JlX3B3cjpcdFx0VGhlIHBvd2VyIHN1cHBsaWVkIGludG8gdGhlIGNvcmVcbkBAIC04OTksNiArOTI2LDkgQEAgc3RydWN0IG10NzUzeF9pbmZvIHtcbiAgKiBAcDVfbW9kZTpcdFx0SG9sZGluZyB0aGUgY3VycmVudCBtb2RlIG9mIHBvcnQgNSBvZiB0aGUgTVQ3NTMwIHN3aXRjaFxuICAqIEBwNV9zZ21paTpcdFx0RmxhZyBmb3IgZGlzdGluZ3Vpc2hpbmcgaWYgcG9ydCA1IG9mIHRoZSBNVDc1MzEgc3dpdGNoXG4gICpcdFx0XHRoYXMgZ290IFNHTUlJXG4rICogQGlzX3Bhc3N0aHJvdWdoOlx0SWYgdGhpcyBzd2l0Y2ggaXMgdG8gcGFzcyB0cmFmZmljIGJldHdlZW4gdGhlIHVwc3RyZWFtXG4rICpcdFx0XHQoQ1BVKSBwb3J0IGFuZCBhIHNlY29uZCBkb3duc3RyZWFtIHN3aXRjaCwgd2l0aG91dFxuKyAqXHRcdFx0YWx0ZXJpbmcgdGhlIERTQSB0YWcuXG4gICogQGlycV9kb21haW46XHRcdElSUSBkb21haW4gb2YgdGhlIHN3aXRjaCBpcnFfY2hpcFxuICAqIEBjcmVhdGVfc2dtaWk6XHRQb2ludGVyIHRvIGZ1bmN0aW9uIGNyZWF0aW5nIFNHTUlJIFBDUyBpbnN0YW5jZShzKVxuICAqIEBhY3RpdmVfY3B1X3BvcnRzOlx0SG9sZGluZyB0aGUgYWN0aXZlIENQVSBwb3J0c1xuQEAgLTkxMSw2ICs5NDEsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYge1xuIFx0c3RydWN0IGRldmljZVx0XHQqZGV2O1xuIFx0c3RydWN0IGRzYV9zd2l0Y2hcdCpkcztcbiBcdHN0cnVjdCBtaWlfYnVzXHRcdCpidXM7XG4rXHRzdHJ1Y3QgbWlpX2J1c1x0XHQqY2hpbGRfYnVzO1xuIFx0c3RydWN0IHJlZ21hcFx0XHQqcmVnbWFwO1xuIFx0c3RydWN0IHJlc2V0X2NvbnRyb2xcdCpyc3RjO1xuIFx0c3RydWN0IHJlZ3VsYXRvclx0KmNvcmVfcHdyO1xuQEAgLTkyMyw2ICs5NTQsNyBAQCBzdHJ1Y3QgbXQ3NTMwX3ByaXYge1xuIFx0Ym9vbFx0XHRcdHA1X3NnbWlpO1xuIFx0dThcdFx0XHRtaXJyb3Jfcng7XG4gXHR1OFx0XHRcdG1pcnJvcl90eDtcbitcdGJvb2xcdFx0XHRpc19wYXNzdGhyb3VnaDtcbiBcdHN0cnVjdCBtdDc1MzBfcG9ydFx0cG9ydHNbTVQ3NTMwX05VTV9QT1JUU107XG4gXHRzdHJ1Y3QgbXQ3NTN4X3Bjc1x0cGNzW01UNzUzMF9OVU1fUE9SVFNdO1xuIFx0LyogcHJvdGVjdCBhbW9uZyBwcm9jZXNzZXMgZm9yIHJlZ2lzdGVycyBhY2Nlc3MqL1xuQEAgLTk2MSw2ICs5OTMsMTYgQEAgc3RydWN0IG10NzUzMF9od19zdGF0cyB7XG4gaW50IG10NzUzMF9wcm9iZV9jb21tb24oc3RydWN0IG10NzUzMF9wcml2ICpwcml2KTtcbiB2b2lkIG10NzUzMF9yZW1vdmVfY29tbW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdik7XG4gXG4rLypcbisgKiBXaGVuIGFuIE1NSU8gYmFzZWQgc3dpdGNoIGhhcyBhbiBNRElPIGJ1cyB3aGljaCBjb250YWlucyBhIGRvd25zdHJlYW0gTURJT1xuKyAqIHN3aXRjaCwgdGhlIE1ESU8gYnVzIGlzIG5vdCBub3JtYWxseSBzZXR1cCB1bnRpbCBtdDc1M3hfc2V0dXAoKSBoYXMgYmVlblxuKyAqIGNhbGxlZC4gQnV0IG10NzUzeF9zZXR1cCgpIGlzIG5vdCBjYWxsZWQgdW50aWwgRFNBIHNlZXMgdGhhdCBldmVyeSBzd2l0Y2ggaW5cbisgKiB0aGUgdHJlZSBoYXMgYmVlbiBwcm9iZWQuIENhbGxpbmcgbXQ3NTMwX3NldHVwX21kaW8oKSBhZnRlciBhdCB0aGUgZW5kIG9mXG4rICogdGhlIE1NSU8gcHJvYmUgZnVuY3Rpb24gYWxsb3dzIHRoZSBkb3duc3RyZWFtIHN3aXRjaCB0byByZWdpc3RlciwgY29tcGxldGluZ1xuKyAqIHRoZSB0cmVlLlxuKyAqL1xuK2ludCBtdDc1MzBfc2V0dXBfbWRpbyhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpO1xuK1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gbXQ3NTN4X3RhYmxlW107XG4gXG4gI2VuZGlmIC8qIF9fTVQ3NTMwX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjQ2LjE2MTUyNDk4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDI3ODI3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBMaW51eCBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBMb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlc2UgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbGAsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY2AsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY2AsIGBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmNgLCBhbmQgYGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaGAuXG5cblJpZ2h0LCBNVDc1MzAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIExldCdzIGNvbmZpcm06IGl0J3MgdGhlIE1lZGlhVGVrIC8gRWNvTmV0IE1UNzUzMCBEU0EgZXRoZXJuZXQgc3dpdGNoIGRyaXZlci4gTm93IGNvbWVzIHRoZSBjcml0aWNhbCBwYXJ0OiBjYW4gd2UgKmFjdHVhbGx5KiBnZXQgYXQgdGhpcyB0aGluZyBpbiBhIGZ1enppbmcgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBrbm93IHRoZSB0YXJnZXQgaGFyZHdhcmUuIElzIGl0IHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IHRvIGJlIHN1cHBvcnRlZCBieSBRRU1VIG9uIGFtZDY0LCB3aGljaCBpcyB0aGUgc3RhbmRhcmQgc3l6a2FsbGVyIHNldHVwPyBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIHByb2JpbmcgbWV0aG9kcy5cblxuSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBnaXQgcmVwbywgcHJvYmFibHkgdXNpbmcgYGdpdCBncmVwYCBhbmQgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZSBNVDc1MzAgaXMgaG9va2VkIHVwLiBJcyBpdCBNRElPLCBNTUlPLCBQbGF0Zm9ybSwgU1BJLCBJMkMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBidXMgaXQgcmVsaWVzIG9uIGlzIGVzc2VudGlhbC4gVGhlbiwgSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHdlIGNhbiBzaW11bGF0ZSBpdCwgZW11bGF0ZSBpdCwgb3Igb3RoZXJ3aXNlIHJlYWNoIGl0IHdpdGhpbiB0aGUgZnV6emluZyBmcmFtZXdvcmsuIElmIGl0IHJlcXVpcmVzIHNvbWUgb2JzY3VyZSBoYXJkd2FyZSBJIGNhbid0IGVhc2lseSBlbXVsYXRlLCB0aGVuIHdlJ2xsIGhhdmUgYSB0b3VnaCB0aW1lLiBUaW1lIHRvIHJ1biBncmVwcGVyIG9yIHJlYWQgdGhlIEtjb25maWcgZmlsZXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjUwLjkwNDMxMDM2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg5NzkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfRFNBX01UNzUzMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2FcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL0tjb25maWc9Mjk9c291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbGFudGlxL0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6MzE6Y29uZmlnIE5FVF9EU0FfTVQ3NTMwXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzItXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzUzMCBhbmQgTVQ3NTMxIEV0aGVybmV0IHN3aXRjaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctMzQtXFx0c2VsZWN0IFJFR01BUF9JUlFcXG5kcml2ZXJzL25ldC9kc2EvS2NvbmZpZzozNTpcXHRpbXBseSBORVRfRFNBX01UNzUzMF9NRElPXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6MzY6XFx0aW1wbHkgTkVUX0RTQV9NVDc1MzBfTU1JT1xcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTM3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTQyLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjQzOmNvbmZpZyBORVRfRFNBX01UNzUzMF9NRElPXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzUzMCBNRElPIGludGVyZmFjZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01UNzUzMFxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTQ2LVxcdHNlbGVjdCBNRURJQVRFS19HRV9QSFlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTUzLVxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnOjU0OmNvbmZpZyBORVRfRFNBX01UNzUzMF9NTUlPXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIk1lZGlhVGVrIE1UNzUzMCBNTUlPIGludGVyZmFjZSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZHNhL0tjb25maWc6NTY6XFx0ZGVwZW5kcyBvbiBORVRfRFNBX01UNzUzMFxcbmRyaXZlcnMvbmV0L2RzYS9LY29uZmlnLTU3LVxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTkVUX0RTQV9LUzg5OTUpIFxcdCs9IGtzODk5NS5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwKVxcdCs9IG10NzUzMC5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwX01ESU8pICs9IG10NzUzMC1tZGlvLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTU1JTykgKz0gbXQ3NTMwLW1taW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS05LW9iai0kKENPTkZJR19ORVRfRFNBX01UNzYyOCkgKz0gbXQ3NjI4Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6MDQ6NTAuOTUzMjEzMjE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzkzMTIwNjYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1UNzUzMCBEcml2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1UNzUzMCBzd2l0Y2ggaXMgYmVpbmcgcHJvYmVkIGFuZCBpbml0aWFsaXplZCBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGRyaXZlciBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIGFyY2hpdGVjdHVyZSBzdWdnZXN0cyB0aGF0IHRoZSBNRElPIGFuZCBNTUlPIHZhcmlhbnRzIGFyZSBsaWtlbHkgdGhlIGtleSBkcml2ZXJzLiBTbywgSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmNgIGFuZCBgbXQ3NTMwLW1taW8uY2AuIEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlc2UgZHJpdmVycyBhcmUgc3RydWN0dXJlZC5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBwYXR0ZXJucyBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBNRElPIGRyaXZlciAoYG1kaW9fZHJpdmVyYCkgZm9yIHRoZSBNRElPLWNvbm5lY3RlZCB2YXJpYW50LCBhIHBsYXRmb3JtIGRyaXZlciAoYHBsYXRmb3JtX2RyaXZlcmApIGZvciB0aGUgTU1JTyB2YXJpYW50LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gQXJlIHRoZXJlIGRldmljZSB0cmVlIChPRikgbWF0Y2ggdGFibGVzIGludm9sdmVkPyBUaGF0J3MgYWxtb3N0IGEgZ2l2ZW4gdGhlc2UgZGF5cywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGNvbmZpcm0uIEkgbmVlZCB0byBzZWUgaG93IHRoZSBrZXJuZWwgaWRlbnRpZmllcyB0aGVzZSBkZXZpY2VzIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzIGFuZCBob3cgdGhlIHJlbGV2YW50IGRyaXZlciBpcyBhdHRhY2hlZCB0byB0aGVtLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGFuZCBhbnkgcG90ZW50aWFsIHF1aXJrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExOTQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNDo1NC44ODQ0MjE5N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTMxOlxcdFxcdFxcdH1cXG4gMTMyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBvcnRzWzUgKyBpXS5zZ21paV9wY3MgPSBwY3M7XFxuIDEzMzpcXHRcXHR9XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmIChyZXQgXFx1MDAyNlxcdTAwMjYgaSlcXG4gMTM2OlxcdFxcdFxcdG10a19wY3NfbHlueGlfZGVzdHJveShwcml2LVxcdTAwM2Vwb3J0c1s1XS5zZ21paV9wY3MpO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMzk6XFx0fVxcbiAxNDA6XFx0XFxuIDE0MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc1MzBfb2ZfbWF0Y2hbXSA9IHtcXG4gMTQyOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXFxuIDE0MzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzYyMVxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc2MjFdLCB9LFxcbiAxNDQ6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtZWRpYXRlayxtdDc1MzBcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfTVQ3NTMwXSwgfSxcXG4gMTQ1OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXFxuIDE0NjpcXHRcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4gMTQ3OlxcdH07XFxuIDE0ODpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcmVnbWFwX2NvbmZpZyA9IHtcXG4gMTUxOlxcdFxcdC5yZWdfYml0cyA9IDE2LFxcbiAxNTI6XFx0XFx0LnZhbF9iaXRzID0gMzIsXFxuIDE1MzpcXHRcXHQucmVnX3N0cmlkZSA9IDQsXFxuIDE1NDpcXHRcXHQubWF4X3JlZ2lzdGVyID0gTVQ3NTMwX0NSRVYsXFxuIDE1NTpcXHRcXHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxcbiAxNTY6XFx0XFx0LnVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2ssXFxuIDE1NzpcXHR9O1xcbiAxNTg6XFx0XFxuIDE1OTpcXHRzdGF0aWMgaW50XFxuIDE2MDpcXHRtdDc1MzBfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiAxNjE6XFx0e1xcbiAxNjI6XFx0XFx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xcbiAxNjM6XFx0XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbiAxNjQ6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpkbjtcXG4gMTY1OlxcdFxcdGludCByZXQ7XFxuIDE2NjpcXHRcXG4gMTY3OlxcdFxcdGRuID0gbWRpb2Rldi1cXHUwMDNlZGV2Lm9mX25vZGU7XFxuIDE2ODpcXHRcXG4gMTY5OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjU0Ljg4NDQ4MTA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ3NDMwODQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgdGhlIEhhcmR3YXJlIEFic3RyYWN0aW9uKipcblxuQWxyaWdodCwgc28gd2UncmUgc2VlaW5nIHNvbWV0aGluZyBwZWN1bGlhciwgYW5kIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgdHJhY2sgZG93biB0aGUgc291cmNlLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgb2YgdGhlIHByb2JsZW0sIEkga25vdyBJIHNob3VsZCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLiBJJ3ZlIGFscmVhZHkgc2NydXRpbml6ZWQgdGhlIG1vcmUgb2J2aW91cyBzdXNwZWN0cywgYnV0IGl0J3MgdGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byBgbXQ3NTMwLW1taW8uY2AuIFRoaXMgZmlsZSBhbG1vc3QgY2VydGFpbmx5IGNvbnRhaW5zIHRoZSBsb3ctbGV2ZWwgbWVtb3J5LW1hcHBlZCBJL08gZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIE1UNzUzMCBoYXJkd2FyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcyBhcmUgZGVmaW5lZCwgYW5kIHRoZSBjcml0aWNhbCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBpdHNlbGYgaXMgaGFuZGxlZC4gVGhpcyBpcyBsaWtlbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjY4LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNDo1OS4zNTg3OTE3MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Jlc2V0LmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXFwibXQ3NTMwLmhcXFwiXFxuICAxMTpcXHRcXG4gIDEyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10Nzk4OF9vZl9tYXRjaFtdID0ge1xcbiAgMTM6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsYW43NTgzLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9BTjc1ODNdLCB9LFxcbiAgMTQ6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxcbiAgMTU6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTEyMjEtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxXSwgfSxcXG4gIDE2OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUyOC1zd2l0Y2hcXFwiLCAuZGF0YSA9IFxcdTAwMjZtdDc1M3hfdGFibGVbSURfRU43NTI4XSwgfSxcXG4gIDE3OlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxcbiAgMTg6XFx0XFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuICAxOTpcXHR9O1xcbiAgMjA6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3OTg4X29mX21hdGNoKTtcXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHN3X3JlZ21hcF9jb25maWcgPSB7XFxuICAyMzpcXHRcXHQubmFtZSA9IFxcXCJzd2l0Y2hcXFwiLFxcbiAgMjQ6XFx0XFx0LnJlZ19iaXRzID0gMTYsXFxuICAyNTpcXHRcXHQudmFsX2JpdHMgPSAzMixcXG4gIDI2OlxcdFxcdC5yZWdfc3RyaWRlID0gNCxcXG4gIDI3OlxcdFxcdC5tYXhfcmVnaXN0ZXIgPSBNVDc1MzBfQ1JFVixcXG4gIDI4OlxcdH07XFxuICAyOTpcXHRcXG4gIDMwOlxcdHN0YXRpYyBpbnRcXG4gIDMxOlxcdG10Nzk4OF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiAgMzI6XFx0e1xcbiAgMzM6XFx0XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbiAgMzQ6XFx0XFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XFxuICAzNTpcXHRcXHRpbnQgcmV0O1xcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHRwcml2ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbiAgMzg6XFx0XFx0aWYgKCFwcml2KVxcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdHByaXYtXFx1MDAzZWJ1cyA9IE5VTEw7XFxuICA0MjpcXHRcXHRwcml2LVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRyZXQgPSBtdDc1MzBfcHJvYmVfY29tbW9uKHByaXYpO1xcbiAgNDU6XFx0XFx0aWYgKHJldClcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdHByaXYtXFx1MDAzZXJzdGMgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbiAgNDk6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2Vyc3RjKSkge1xcbiAgNTA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiQ291bGRuJ3QgZ2V0IG91ciByZXNldCBsaW5lXFxcXG5cXFwiKTtcXG4gIDUxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByaXYtXFx1MDAzZXJzdGMpO1xcbiAgNTI6XFx0XFx0fVxcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7XFxuICA1NTpcXHRcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4gIDU2OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImNhbm5vdCByZXF1ZXN0IEkvTyBtZW1vcnkgc3BhY2VcXFxcblxcXCIpO1xcbiAgNTc6XFx0XFx0XFx0cmV0dXJuIC1FTlhJTztcXG4gIDU4OlxcdFxcdH1cXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0cHJpdi1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGJhc2VfYWRkcixcXG4gIDYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnN3X3JlZ21hcF9jb25maWcpO1xcbiAgNjI6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiAgNjM6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0cmV0ID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChwcml2LVxcdTAwM2Vkcyk7XFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdGlmIChyZXQpXFxuICA2ODpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRyZXR1cm4gbXQ3NTMwX3NldHVwX21kaW8ocHJpdik7XFxuICA3MTpcXHR9XFxuICA3MjpcXHRcXG4gIDczOlxcdHN0YXRpYyB2b2lkIG10Nzk4OF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gIDc0OlxcdHtcXG4gIDc1OlxcdFxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHRpZiAocHJpdilcXG4gIDc4OlxcdFxcdFxcdG10NzUzMF9yZW1vdmVfY29tbW9uKHByaXYpO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA0OjU5LjM1ODg2NTkzOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0NjU3NjkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBNVDc1MzAgRHJpdmVyIFJlYWNoYWJpbGl0eSBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYG10NzUzMGAuLi4gcmlnaHQsIHRoYXQncyBhIERTQSBkcml2ZXIgZm9yIE1lZGlhVGVrL0Vjb05ldCBldGhlcm5ldCBzd2l0Y2hlcy4gQW5kIGl0J3Mgbm90IGp1c3QgdGhlIE1UNzUzMDsgaXQgY292ZXJzIGEgZmFtaWx5IG9mIHRoZW0sIGluY2x1ZGluZyBNVDc1MzEsIE1UNzYyMSwgYW5kIHNvIG9uLiBUaGVzZSBhcmUgc3BlY2lmaWNhbGx5IFNvQy1pbnRlcm5hbCBFdGhlcm5ldCBzd2l0Y2hlcywgb3IgTURJTy9PRi1wcm9iZWQgZXh0ZXJuYWwgc3dpdGNoZXMsIGZvdW5kIG9uIHNwZWNpZmljIEFSTS9NSVBTIE1lZGlhVGVrL0Vjb05ldC9BaXJvaGEgU29Dcy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB4ODYvYW1kNjQgUUVNVSBlbnZpcm9ubWVudD8gIENhbiB3ZSBwcm9iZSBvciBlbXVsYXRlIHRoZXNlIERTQSBzd2l0Y2hlcyB3aXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYSBwcm9wZXJseSBjb25zdHJ1Y3RlZCBkZXZpY2UgdHJlZT9cblxuTGV0IG1lIHJldmlldyB0aGUgcmVhY2hhYmlsaXR5IGNyaXRlcmlhLiBUaGUgcHJpbWFyeSBnYXRlIGlzIHJlYWNoYWJpbGl0eS4gVGhlIHByb21wdCBlbXBoYXNpemVzIHRoYXQgZnV6emluZyBzaG91bGQgb25seSB0YXJnZXQgY29kZSB0aGF0ICpjYW4qIGFjdHVhbGx5IHJ1biBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBtZWFuaW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCBvciB0dW4vdGFwLiAgSWYgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBpdCdzIGEgbm8tZ28gZm9yIGZ1enppbmcsIG5vIG1hdHRlciBob3cgY29tcGxleCB0aGUgbG9naWMuXG5cblRoZSBleGFtcGxlcyBvZiAqdW5yZWFjaGFibGUqIGhhcmR3YXJlIGFyZSBpbGx1bWluYXRpbmc6IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIEdQVSBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBBU0lDcy9QQ0llIGNhcmRzIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUuICBBbHNvLCBjb2RlIHBhdGhzIHNwZWNpZmljIHRvIG5vbi10YXJnZXQgYXJjaGl0ZWN0dXJlcy5cblxuU28sIGhvdyBhcmUgdGhlc2UgTURJTyBhbmQgTU1JTyBEU0EgZHJpdmVycyBwcm9iZWQ/IENhbiBzeXprYWxsZXIgcHJvYmUgdGhlbT8gVGhlIGtleSBpcyB3aGV0aGVyIG9yIG5vdCBzeXprYWxsZXIgb3IgdXNlcnNwYWNlIGNhbiBwcm9iZSBPRiBwbGF0Zm9ybSBkZXZpY2VzIG9yIE1ESU8gZGV2aWNlcyBvbiBhbWQ2NCwgb3VyIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbkFuZCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIE9uIGFtZDY0LCBpcyB0aGVyZSBldmVuIGEgRFQvT0Ygb3IgdmlydHVhbCBNRElPIGJ1cyBvciBBQ1BJIHRhYmxlIGluc3RhbnRpYXRpbmcgYW4gYGVjb25ldCxlbjc1MTIyMWAgb3IgYG1lZGlhdGVrLG10NzUzMGA/IEkgbmVlZCB0byBjaGVjayB0aGUgZGV2aWNlIG1hdGNoaW5nLiBgbXQ3NTMwLW1kaW9gIGFuZCBgbXQ3NTMwLW1taW9gIHNlZW0gdG8gbWF0Y2ggb25seSB0aHJvdWdoIGBvZl9kZXZpY2VfaWRgIGVudHJpZXMsIHNwZWNpZmljYWxseSBgbXQ3NTMwX29mX21hdGNoW11gIGFuZCBgbXQ3OTg4X29mX21hdGNoW11gLiAgVGhhdCdzIERldmljZSBUcmVlIHRlcnJpdG9yeS4gTm8gcGxhdGZvcm0gZGV2aWNlIElEcywgbm8gQUNQSSBkZXZpY2UgSURzLCBubyBQQ0kgZGV2aWNlIElEcyDigJMgc3RyaWN0bHkgT0YgZGV2aWNlcy4gQW5kIHRoZXNlIGRldmljZXMgYXJlIGZvciBzcGVjaWZpYyBNZWRpYVRlay9FY29OZXQgU29DcywgdGhlIGxpa2VzIG9mIEVONzUxMjIxIGFuZCBNVDc2MjEsIHdoaWNoIGFyZSBNSVBTL0FSTS5cblxuVGhlIGNvbmNsdXNpb24gaXMgY2xlYXI6IEluIG91ciB4ODZfNjQvYW1kNjQgUUVNVS9HQ0Ugc2V0dXAsIHRoZXJlJ3Mgbm8gRGV2aWNlIFRyZWUgbm9kZXMgZm9yIHRoZXNlIE1lZGlhVGVrL0Vjb25ldCBzd2l0Y2hlcywgYW5kIHRoZXJlJ3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUgZWl0aGVyLiBUaGV5J3JlIGp1c3Qgbm90IHByZXNlbnQuXG5cbk5vdywgYSBmaW5hbCwgaG9wZWZ1bCB0aG91Z2h0OiBDb3VsZCB0aGVzZSBEU0Egc3dpdGNoZXMgYmUgKm1vY2thYmxlKj8gQ291bGQgd2UgcmVhY2ggdGhlbSB2aWEgc29tZSB2aXJ0dWFsIGludGVyZmFjZSBsaWtlIG5ldGRldnNpbSBvciBkc2FfbG9vcD8gSSBuZWVkIHRvIGtub3cgaWYgYGRzYV9sb29wYCBvciBtb2NrIGRyaXZlcnMgdXNlIGBtdDc1MzBgLiAgTGV0J3Mgc2VlOiBgZHNhX2xvb3BgIGlzIGEgZml4ZWQsIGR1bW15IGRyaXZlciBmb3IgdGVzdGluZyBEU0EsIHVzaW5nIGl0cyBvd24gc3dpdGNoIGRyaXZlciAoYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYCkuIEl0IGRvZXMgKm5vdCogdXRpbGl6ZSBgbXQ3NTMwLmNgLiBTbyB0aGF0J3Mgb3V0LiBJJ2xsIHZlcmlmeSB0aGlzIHdpdGggZ3JlcHBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxNjowNTowNS44MjQ2Mzc5NjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NjA4MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzUzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE2NTMgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXFx0Kz0gbXQ3NTMwLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTURJTykgKz0gbXQ3NTMwLW1kaW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NTUlPKSArPSBtdDc1MzAtbW1pby5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NjI4KSArPSBtdDc2Mjgub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTY6I2luY2x1ZGUgXFxcIm10NzUzMC5oXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxOTptdDc1MzBfcmVnbWFwX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjAte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjItXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTQzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo0NDptdDc1MzBfcmVnbWFwX3JlYWQodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDctXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTc2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Nzc6bXQ3NTMwX21kaW9fcmVnbWFwX2xvY2sodm9pZCAqbWRpb19sb2NrKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTgyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODM6bXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayh2b2lkICptZGlvX2xvY2spXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzIG10NzUzMF9yZWdtYXBfYnVzID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjg5OlxcdC5yZWdfd3JpdGUgPSBtdDc1MzBfcmVnbWFwX3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjkwOlxcdC5yZWdfcmVhZCA9IG10NzUzMF9yZWdtYXBfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05MS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9OTM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjk0Om10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk1LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo5NjpcXHRzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqbXQ3NTMxX3Bjc19jb25maWdbMl0gPSB7fTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05Ny1cXHRzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwMS1cXHRmb3IgKGkgPSBwcml2LVxcdTAwM2VwNV9zZ21paSA/IDAgOiAxOyBpIFxcdTAwM2MgMjsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTAyOlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldID0gZGV2bV9remFsbG9jKHByaXYtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVvZihzdHJ1Y3QgcmVnbWFwX2NvbmZpZyksXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTA0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMDU6XFx0XFx0aWYgKCFtdDc1MzFfcGNzX2NvbmZpZ1tpXSkge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEwNi1cXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTA5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExMDpcXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlbmFtZSA9IGkgPyBcXFwicG9ydDZcXFwiIDogXFxcInBvcnQ1XFxcIjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTE6XFx0XFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXFx1MDAzZXJlZ19iaXRzID0gMTY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTEyOlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2V2YWxfYml0cyA9IDMyO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjExMzpcXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlcmVnX3N0cmlkZSA9IDQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE0OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2VyZWdfYmFzZSA9IE1UNzUzMV9TR01JSV9SRUdfQkFTRSg1ICsgaSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE1OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2VtYXhfcmVnaXN0ZXIgPSAweDE3YztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTY6XFx0XFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXFx1MDAzZWxvY2sgPSBtdDc1MzBfbWRpb19yZWdtYXBfbG9jaztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxMTc6XFx0XFx0bXQ3NTMxX3Bjc19jb25maWdbaV0tXFx1MDAzZXVubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF91bmxvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE4OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2Vsb2NrX2FyZyA9IFxcdTAwMjZwcml2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbG9jaztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xMTktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIwOlxcdFxcdHJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsIHByaXYsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTIxOlxcdFxcdFxcdFxcdFxcdCAgbXQ3NTMxX3Bjc19jb25maWdbaV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMi1cXHRcXHRpZiAoSVNfRVJSKHJlZ21hcCkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0MC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDE6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQzOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ0OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ2LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ny19O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0ODpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTA9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXFx0Lm1heF9yZWdpc3RlciA9IE1UNzUzMF9DUkVWLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NTpcXHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NjpcXHQudW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjItXFx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE2MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTc3OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXFx0cmMubG9ja19hcmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjE3OlxcdHByaXYtXFx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjE4LVxcdFxcdFxcdFxcdFxcdHByaXYsIFxcdTAwMjZyYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMjItXFx0aWYgKHByaXYtXFx1MDAzZWlkID09IElEX01UNzUzMSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjM6XFx0XFx0cHJpdi1cXHUwMDNlY3JlYXRlX3NnbWlpID0gbXQ3NTMxX2NyZWF0ZV9zZ21paTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMjQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjk6bXQ3NTMwX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMwLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMi1cXHRpbnQgcmV0ID0gMCwgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI0Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNDc6XFx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI1MzpzdGF0aWMgdm9pZCBtdDc1MzBfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1NC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY1OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXQ3NTMwX21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NjpcXHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NzpcXHQucmVtb3ZlID0gbXQ3NTMwX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XFx0LnNodXRkb3duID0gbXQ3NTMwX3NodXRkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI2OS1cXHQubWRpb2Rydi5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjcwOlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tZGlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbXQ3NTMwX29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI3NTptZGlvX21vZHVsZV9kcml2ZXIobXQ3NTMwX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEwOiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xMS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMzpcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTY6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTI4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTE4LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9MzE9bXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjMzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjQ0OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjcwOlxcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz03Mz1zdGF0aWMgdm9pZCBtdDc5ODhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc3LVxcdGlmIChwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4OlxcdFxcdG10NzUzMF9yZW1vdmVfY29tbW9uKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTgxPXN0YXRpYyB2b2lkIG10Nzk4OF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzo4MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTkzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10Nzk4OF9wbGF0Zm9ybV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05Ny1cXHQuZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4OlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tbWlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05OS1cXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBtdDc5ODhfb2ZfbWF0Y2gsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI2OiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjctXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxOnN0YXRpYyBzdHJ1Y3QgbXQ3NTN4X3BjcyAqcGNzX3RvX210NzUzeF9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtdDc1M3hfcGNzLCBwY3MpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNC19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzYtLyogU3RyaW5nLCBvZmZzZXQsIGFuZCByZWdpc3RlciBzaXplIGluIGJ5dGVzIGlmIGRpZmZlcmVudCBmcm9tIDQgYnl0ZXMgKi9cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgbXQ3NTMwX21pYltdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cXHRNSUJfREVTQygxLCBNVDc1MzBfUE9SVF9NSUJfVFhfRFJPUCwgXFxcIlR4RHJvcFxcXCIpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjM6bXQ3NTMwX211dGV4X2xvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02NC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9Njk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzA6bXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz03Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3OTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04MC1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTg4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTM6XFx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTE0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTE3OmNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExOC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjAtXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEzMDpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlxcdG10NzUzMF9tdXRleF91bmxvY2socHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTY1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE2Njpjb3JlX3NldChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTcxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNzg6bXQ3NTMwX2ZkYl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF9mZGJfY21kIGNtZCwgdTMyICpyc3ApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEwLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTE6c3RhdGljIHZvaWQgbXQ3NTMwX3BvcnRfZmFzdF9hZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjEzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTQtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMzE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjMyOm10NzUzMF9mZGJfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHN0cnVjdCBtdDc1MzBfZmRiICpmZGIpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjU4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjYwLVxcdFxcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjg4LS8qIFNldCB1cCBzd2l0Y2ggY29yZSBjbG9jayBmb3IgTVQ3NTMwICovXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxODptdDc1M3hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTMyOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzA6bXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMzMtXFx0dTMyIG5jcG8xLCBzc2NfZGVsdGEsIHh0YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzkxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM5MjptdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Mzk0OlxcdGVudW0gbXQ3NTMxX3h0YWxfZnNlbCB4dGFsO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOTUtXFx0dTMyIHRvcF9zaWc7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NDc5PXN0YXRpYyBib29sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ4MDplbjc1MTIyMV90cmdtaWlfY2FsX29rKHN0cnVjdCBtdDc1MzBfcHJpdiAqcngsIHUzMiByZWcsIGludCBjaGFuLCBpbnQgaSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNDgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00OTM9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDk0OmVuNzUxMjIxX3RyZ21paV9jYWxpYnJhdGVfZGlyZWN0aW9uKHN0cnVjdCBtdDc1MzBfcHJpdiAqdHgsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjQ5NTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG10NzUzMF9wcml2ICpyeCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNDk2LVxcdFxcdFxcdFxcdCAgICB1OCAqZGVmYXVsdF90YXBzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTU3Mz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1NzQ6ZW43NTEyMjFfc2V0X3R4X2RyaXZlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTggZHJ2cCwgdTggZHJ2biwgdTggY2xrX2RydnAsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTU3NS1cXHRcXHQgICAgICB1OCBjbGtfZHJ2bilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz01ODk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkwOmVuNzUxMjIxX3RyZ21paV9wYWlyX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqZXh0LCBpbnQgZXh0X3BvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjU5MTpcXHRcXHRcXHQgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKm9uZGllLCBpbnQgb25kaWVfcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTkyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz02NzU9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Njc2Om10NzUzMF9jYWxfaW50ZXJzd2l0Y2hfdHJnbWlpKHN0cnVjdCBkc2FfcG9ydCAqZHApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjgwLVxcdHN0cnVjdCBkc2FfcG9ydCAqcGVlcl9kcDtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgxOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcGVlcjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjgyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjgzLVxcdHN0cnVjdCBkc2FfbGluayAqZGw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzI0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjcyNTptdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzI2LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzI3OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3MzM6c3RhdGljIGludCBtdDc1MzBfcGh5X3JlYWRfYzIyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczNC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzM3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mzg6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzktXFx0XFx0XFx0XFx0dTE2IHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03NDMtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjc0NDpzdGF0aWMgaW50IG10NzUzMF9waHlfcmVhZF9jNDUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ1LVxcdFxcdFxcdCAgICAgICBpbnQgZGV2YWQsIGludCByZWdudW0pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzQ5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3NTA6c3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1MS1cXHRcXHRcXHRcXHRpbnQgcmVnbnVtLCB1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTc1Nj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjc1NzptdDc1MzFfaW5kX2M0NV9waHlfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc1OC1cXHRcXHRcXHRpbnQgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTgwNz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjgwODptdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGRldmFkLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04MDktXFx0XFx0XFx0IGludCByZWdudW0sIHUxNiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg1Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjg1ODptdDc1MzFfaW5kX2MyMl9waHlfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04NTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTg5ND1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjg5NTptdDc1MzFfaW5kX2MyMl9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZ251bSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtODk2LVxcdFxcdFxcdCB1MTYgZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05MzE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzI6bXQ3NTN4X3BoeV9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTMzLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTM0OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTM1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTkzOT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0MDptdDc1M3hfcGh5X3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgZGV2YWQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0MS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0MjpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NDc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NDg6bXQ3NTN4X3BoeV93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk0OS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1MDpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBidXMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk1MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05NTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTY6bXQ3NTN4X3BoeV93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTU3LVxcdFxcdCAgICAgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTU4LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTU5OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTk2ND1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NjU6bXQ3NTMwX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHUzMiBzdHJpbmdzZXQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk2Ni1cXHRcXHQgICB1aW50OF90ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk3Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTczOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG10NzUzMF9taWIpOyBpKyspXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3NDpcXHRcXHRldGh0b29sX3B1dHMoXFx1MDAyNmRhdGEsIG10NzUzMF9taWJbaV0ubmFtZSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk3NS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTc3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk3ODptdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk3OS1cXHRcXHQgICAgICAgdTMyIG9mZnNldCwgdTggc2l6ZSwgdWludDY0X3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTkyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5MzptdDc1MzBfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk0LVxcdFxcdFxcdCB1aW50NjRfdCAqZGF0YSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk1LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTk2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTc6XFx0Y29uc3Qgc3RydWN0IG10NzUzMF9taWJfZGVzYyAqbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTgtXFx0aW50IGk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5OS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShtdDc1MzBfbWliKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDE6XFx0XFx0bWliID0gXFx1MDAyNm10NzUzMF9taWJbaV07XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMDItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDM6XFx0XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBtaWItXFx1MDAzZW9mZnNldCwgbWliLVxcdTAwM2VzaXplLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDA0LVxcdFxcdFxcdFxcdCAgICAgICBkYXRhICsgaSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTAwOD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMDk6bXQ3NTMwX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDEzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE0OlxcdHJldHVybiBBUlJBWV9TSVpFKG10NzUzMF9taWIpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE1LX1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxNi1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAxNzpzdGF0aWMgdm9pZCBtdDc1MzBfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxOC1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBldGh0b29sX2V0aF9tYWNfc3RhdHMgKm1hY19zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAxOS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMjA6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjEtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyNi1cXHQgKi9cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyNzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9VTklDQVNULCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyOS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAzMDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9TSU5HTEVfQ09MTElTSU9OLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDMxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VTaW5nbGVDb2xsaXNpb25GcmFtZXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDMyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMzOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX01VTFRJUExFX0NPTExJU0lPTiwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM1LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM2OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1VOSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzctXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDM5OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0JZVEVTLCAyLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQwLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0MjpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9BTElHTl9FUlIsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUFsaWdubWVudEVycm9ycyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDU6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfREVGRVJSRUQsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDYtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNDg6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTEFURV9DT0xMSVNJT04sIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDktXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUxhdGVDb2xsaXNpb25zKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1MC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1MTpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9FWENFU1NJVkVfQ09MTElTSU9OLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDUyLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1My1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9CWVRFUywgMixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTYtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNTc6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElDQVNULCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU5LVxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyArPSBtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2MDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9CUk9BRENBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjEtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2My1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9NVUxUSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjUtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY2LVxcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyArPSBtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1JlY2VpdmVkT0s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNjc6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfQlJPQURDQVNULCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDY4LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDcxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXQ3NTMwX3Jtb25fcmFuZ2VzW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNzMtXFx0eyAwLCA2NCB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODEtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODI6c3RhdGljIHZvaWQgbXQ3NTMwX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDg2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDg3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDg4OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1VOREVSX1NJWkVfRVJSLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDg5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNldW5kZXJzaXplX3BrdHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDkwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX09WRVJfU1pfRVJSLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDkxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0cyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwOTI6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfRlJBR19FUlIsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwOTMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDk0OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0pBQkJFUl9FUlIsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwOTUtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VqYWJiZXJzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA5Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA5NzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNjQsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwOTgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzBdKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA5OTpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfNjVfVE9fMTI3LCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTAwLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFsxXSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMDE6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfUEtUX1NaXzEyOF9UT18yNTUsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMDItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzJdKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTEwMzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9QS1RfU1pfMjU2X1RPXzUxMSwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwNC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RbM10pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTA1OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1BLVF9TWl81MTJfVE9fMTAyMywgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwNi1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNF0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTA3OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX1BLVF9TWl8xMDI0X1RPX01BWCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEwOC1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNV0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTA5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTEwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl82NCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExMS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMF0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTEyOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl82NV9UT18xMjcsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMTMtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzFdKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTExNDpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9QS1RfU1pfMTI4X1RPXzI1NSwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTExNS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMl0pO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTE2OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1BLVF9TWl8yNTZfVE9fNTExLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTE3LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMTg6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzUxMl9UT18xMDIzLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTE5LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs0XSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMjA6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfUEtUX1NaXzEwMjRfVE9fTUFYLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMTIxLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs1XSk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMjM6XFx0KnJhbmdlcyA9IG10NzUzMF9ybW9uX3JhbmdlcztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyNC19XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExMjY6c3RhdGljIHZvaWQgbXQ3NTMwX3JlYWRfcG9ydF9zdGF0czY0KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExMjctXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgKnN0b3JhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEzNS1cXHQgKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6MDU6MDUuODczMjUxNTM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0NzQ4Mjg1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgbXQ3NTMwYCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyBgbXQ3NTMwYC4uLiByaWdodCwgdGhhdCdzIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBkcml2ZXIuIFNwZWNpZmljYWxseSBmb3IgdGhhdCBNZWRpYVRlayBvciBFY29OZXQgc3dpdGNoIGhhcmR3YXJlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgb3IgcHJvYmUgdGhhdCB0aGluZyB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmUgaW4gdGhlIHN5c3RlbT8gWW91IGtub3csIHRoZSBraW5kIG9mIHNpdHVhdGlvbiB3aGVyZSB5b3UgbWlnaHQgZ2V0IGEgZmFsc2UgcG9zaXRpdmUgb3IgYW4gdW5leHBlY3RlZCBsb2FkaW5nLlxuXG5UaGVyZWZvcmUsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkbyBhIHRob3JvdWdoIGludmVzdGlnYXRpb24uIEEgZGVlcCBkaXZlIGlzIG5lZWRlZCB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyBzb21laG93IGJlaW5nIHJlZmVyZW5jZWQgb3IgY2FsbGVkIHdpdGhvdXQgdGhlIGV4cGVjdGVkIGhhcmR3YXJlIGNvbmRpdGlvbnMgYmVpbmcgbWV0LiBJIG5lZWQgdG8gY29tYiB0aHJvdWdoIHRoZSBlbnRpcmUga2VybmVsIHNvdXJjZSB0cmVlLCBsb29raW5nIGZvciBhbnkgaW5zdGFuY2VzIG9mIGVpdGhlciBgbXQ3NTMwYCBvciBgbXQ3NTN4YCBiZWluZyBtZW50aW9uZWQgb3IgdXNlZC4gQW55IGNsdWVzIHdpbGwgYmUgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg5MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA1OjEwLjM0ODA4MTgyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjg5MzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc1MzB8bXQ3NTN4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTYzMiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMy0tLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDo0OiRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbCNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9ODk9cHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTkzLSAgICAgICAgICBTdGFuZGFsb25lIE1UNzUzMCBhbmQgbXVsdGktY2hpcCBtb2R1bGUgTVQ3NTMwIGluIE1UNzYyM0FJIFNvQ1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjk0OiAgICAgICAgY29uc3Q6IG1lZGlhdGVrLG10NzUzMFxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTk1LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MjI3PSRkZWZzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjM5LVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjI0MDogIG10NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydDpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0yNDEtICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMjUzLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjI1NDogIG10NzUzMC1kc2EtcG9ydDpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0yNTUtICAgIHBhdHRlcm5Qcm9wZXJ0aWVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw9MzA4PWFsbE9mOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzI2LSAgICAgICAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbDozMjc6ICAgICAgICAgIGNvbnN0OiBtZWRpYXRlayxtdDc1MzBcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zMjgtICAgIHRoZW46XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzI5OiAgICAgICRyZWY6IFxcXCIjLyRkZWZzL210NzUzMC1kc2EtcG9ydFxcXCJcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zMzAtICAgICAgcmVxdWlyZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNDgtICAgIHRoZW46XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6MzQ5OiAgICAgICRyZWY6IFxcXCIjLyRkZWZzL210NzUzMC1kc2EtcG9ydFxcXCJcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNTAtICAgICAgcmVxdWlyZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNzQtICAgIHRoZW46XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6Mzc1OiAgICAgICRyZWY6IFxcXCIjLyRkZWZzL210NzUzMC1wYXNzdGhyb3VnaC1kc2EtcG9ydFxcXCJcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zNzYtICAgICAgcmVxdWlyZWQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbD0zODE9ZXhhbXBsZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC0zOTAtICAgICAgICBzd2l0Y2hAMWYge1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sOjM5MTogICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzUzMFxcXCI7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWwtMzkyLSAgICAgICAgICAgIHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21lZGlhdGVrLG10NzUzMC55YW1sLTQ1MS0gICAgICAgIHN3aXRjaEAxZiB7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWVkaWF0ZWssbXQ3NTMwLnlhbWw6NDUyOiAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbC00NTMtICAgICAgICAgICAgcmVnID0gXFx1MDAzYzB4MWZcXHUwMDNlO1xcbi0tXFxuTUFJTlRBSU5FUlM9MTY4MjE9UzpcXHRNYWludGFpbmVkXFxuTUFJTlRBSU5FUlM6MTY4MjI6RjpcXHRkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uY1xcbk1BSU5UQUlORVJTOjE2ODIzOkY6XFx0ZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmNcXG5NQUlOVEFJTkVSUzoxNjgyNDpGOlxcdGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuKlxcbk1BSU5UQUlORVJTLTE2ODI1LUY6XFx0bmV0L2RzYS90YWdfbXRrLmNcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM2EuZHRzaT01MD1cXHRcXHRzd2l0Y2gwOiBzd2l0Y2hAMWYge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM2EuZHRzaTo1MTpcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzUzMFxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzYS5kdHNpLTUyLVxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tYmFuYW5hcGktYnBpLXIyLmR0cz0yMDM9XFx0XFx0c3dpdGNoQDFmIHtcXG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNuLWJhbmFuYXBpLWJwaS1yMi5kdHM6MjA0OlxcdFxcdFxcdGNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9tZWRpYXRlay9tdDc2MjNuLWJhbmFuYXBpLWJwaS1yMi5kdHMtMjA1LVxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzPTE4OD1cXHRcXHRzd2l0Y2hAMWYge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL21lZGlhdGVrL210NzYyM24tcmZiLWVtbWMuZHRzOjE4OTpcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcIm1lZGlhdGVrLG10NzUzMFxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIzbi1yZmItZW1tYy5kdHMtMTkwLVxcdFxcdFxcdHJlZyA9IFxcdTAwM2MweDFmXFx1MDAzZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApXFx0Kz0gbXQ3NTMwLm9cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzBfTURJTykgKz0gbXQ3NTMwLW1kaW8ub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19ORVRfRFNBX01UNzUzMF9NTUlPKSArPSBtdDc1MzAtbW1pby5vXFxuZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NjI4KSArPSBtdDc2Mjgub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTY6I2luY2x1ZGUgXFxcIm10NzUzMC5oXFxcIlxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE3LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxOTptdDc1MzBfcmVnbWFwX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjAte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjIxOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjItXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTQzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzo0NDptdDc1MzBfcmVnbWFwX3JlYWQodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50ICp2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjQ2OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtNDctXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTc2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6Nzc6bXQ3NTMwX21kaW9fcmVnbWFwX2xvY2sodm9pZCAqbWRpb19sb2NrKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTc4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTgyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODM6bXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayh2b2lkICptZGlvX2xvY2spXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtODctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6ODg6c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzIG10NzUzMF9yZWdtYXBfYnVzID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjg5OlxcdC5yZWdfd3JpdGUgPSBtdDc1MzBfcmVnbWFwX3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjkwOlxcdC5yZWdfcmVhZCA9IG10NzUzMF9yZWdtYXBfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy05MS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM9OTM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjk0Om10NzUzMV9jcmVhdGVfc2dtaWkoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTExNS1cXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlbWF4X3JlZ2lzdGVyID0gMHgxN2M7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE2OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2Vsb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTE3OlxcdFxcdG10NzUzMV9wY3NfY29uZmlnW2ldLVxcdTAwM2V1bmxvY2sgPSBtdDc1MzBfbWRpb19yZWdtYXBfdW5sb2NrO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTExOC1cXHRcXHRtdDc1MzFfcGNzX2NvbmZpZ1tpXS1cXHUwMDNlbG9ja19hcmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTE5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjEyMDpcXHRcXHRyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KHByaXYtXFx1MDAzZWRldiwgXFx1MDAyNm10NzUzMF9yZWdtYXBfYnVzLCBwcml2LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTEyMS1cXHRcXHRcXHRcXHRcXHQgIG10NzUzMV9wY3NfY29uZmlnW2ldKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0MC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoxNDE6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQyOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0VONzUxMjIxX0VYVF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQzOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NjIxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ0OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMwXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMF0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTQ1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3NTMxXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTQ2LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0Ny19O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE0ODpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTE0OS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0xNTA9c3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTQtXFx0Lm1heF9yZWdpc3RlciA9IE1UNzUzMF9DUkVWLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NTpcXHQubG9jayA9IG10NzUzMF9tZGlvX3JlZ21hcF9sb2NrLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE1NjpcXHQudW5sb2NrID0gbXQ3NTMwX21kaW9fcmVnbWFwX3VubG9jayxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNTctfTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jPTE1OT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTYwOm10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTYxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNjItXFx0c3RydWN0IHJlZ21hcF9jb25maWcgcmMgPSByZWdtYXBfY29uZmlnO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjE2MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTY0LVxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0xNzYtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MTc3OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMTc4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yMTYtXFx0cmMubG9ja19hcmcgPSBcXHUwMDI2cHJpdi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2s7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjE3OlxcdHByaXYtXFx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXQocHJpdi1cXHUwMDNlZGV2LCBcXHUwMDI2bXQ3NTMwX3JlZ21hcF9idXMsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjE4LVxcdFxcdFxcdFxcdFxcdHByaXYsIFxcdTAwMjZyYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYz0yMjg9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMjk6bXQ3NTMwX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjMwLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyMzE6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTIzMi1cXHRpbnQgcmV0ID0gMCwgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI0Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNDc6XFx0bXQ3NTMwX3JlbW92ZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjQ4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjUyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI1MzpzdGF0aWMgdm9pZCBtdDc1MzBfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI1NC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjU1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNjQtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjY1OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXQ3NTMwX21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NjpcXHQucHJvYmUgID0gbXQ3NTMwX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI2NzpcXHQucmVtb3ZlID0gbXQ3NTMwX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNjg6XFx0LnNodXRkb3duID0gbXQ3NTMwX3NodXRkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI2OS1cXHQubWRpb2Rydi5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmM6MjcwOlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tZGlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYzoyNzE6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gbXQ3NTMwX29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jLTI3Mi1cXHR9LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tZGlvLmMtMjc0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbWRpby5jOjI3NTptZGlvX21vZHVsZV9kcml2ZXIobXQ3NTMwX21kaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1kaW8uYy0yNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjEwOiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0xMS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz0xMj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5ODhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzoxMzpcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtc3dpdGNoXFxcIiwgLmRhdGEgPSBcXHUwMDI2bXQ3NTN4X3RhYmxlW0lEX0FONzU4M10sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTQ6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1ODFdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE1OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiZWNvbmV0LGVuNzUxMjIxLXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MTIyMV0sIH0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM6MTY6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJlY29uZXQsZW43NTI4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9FTjc1MjhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjE3OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWVkaWF0ZWssbXQ3OTg4LXN3aXRjaFxcXCIsIC5kYXRhID0gXFx1MDAyNm10NzUzeF90YWJsZVtJRF9NVDc5ODhdLCB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTE4LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmM9MzE9bXQ3OTg4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtMzIte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjMzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy0zNC1cXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTQzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjQ0OlxcdHJldCA9IG10NzUzMF9wcm9iZV9jb21tb24ocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNDUtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTY5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjcwOlxcdHJldHVybiBtdDc1MzBfc2V0dXBfbWRpbyhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy03MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYz03Mz1zdGF0aWMgdm9pZCBtdDc5ODhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC1tbWlvLmMtNzQte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc1OlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc3LVxcdGlmIChwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjc4OlxcdFxcdG10NzUzMF9yZW1vdmVfY29tbW9uKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTc5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTgxPXN0YXRpYyB2b2lkIG10Nzk4OF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jLTgyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYzo4MzpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy04NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jPTkzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10Nzk4OF9wbGF0Zm9ybV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05Ny1cXHQuZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAtbW1pby5jOjk4OlxcdFxcdC5uYW1lID0gXFxcIm10NzUzMC1tbWlvXFxcIixcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLW1taW8uYy05OS1cXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBtdDc5ODhfb2ZfbWF0Y2gsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI2OiNpbmNsdWRlIFxcXCJtdDc1MzAuaFxcXCJcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjctXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzAtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxOnN0YXRpYyBzdHJ1Y3QgbXQ3NTN4X3BjcyAqcGNzX3RvX210NzUzeF9wY3Moc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTMyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzM6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtdDc1M3hfcGNzLCBwY3MpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zNC19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzYtLyogU3RyaW5nLCBvZmZzZXQsIGFuZCByZWdpc3RlciBzaXplIGluIGJ5dGVzIGlmIGRpZmZlcmVudCBmcm9tIDQgYnl0ZXMgKi9cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6Mzc6c3RhdGljIGNvbnN0IHN0cnVjdCBtdDc1MzBfbWliX2Rlc2MgbXQ3NTMwX21pYltdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zOC1cXHRNSUJfREVTQygxLCBNVDc1MzBfUE9SVF9NSUJfVFhfRFJPUCwgXFxcIlR4RHJvcFxcXCIpLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTA6bXQ3NTN4X2N0cmxfcGh5X2FkZHIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NjI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NjM6bXQ3NTMwX211dGV4X2xvY2soc3RydWN0IG10NzUzMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02NC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9Njk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzA6bXQ3NTMwX211dGV4X3VubG9jayhzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz03Nj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Nzpjb3JlX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3OTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04MC1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTg4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo4OTpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTEyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMTM6XFx0bXQ3NTMwX211dGV4X3VubG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTE0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMTY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTE3OmNvcmVfcm13KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBzZXQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTExOC17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjExOTpcXHRpbnQgY3RsX3BoeSA9IG10NzUzeF9jdHJsX3BoeV9hZGRyKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjAtXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtXFx1MDAzZWJ1cztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMjktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEzMDpcXHRtdDc1MzBfbXV0ZXhfbG9jayhwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTMxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTYyOlxcdG10NzUzMF9tdXRleF91bmxvY2socHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2My19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTY1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE2Njpjb3JlX3NldChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MTcxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjE3Mjpjb3JlX2NsZWFyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xNzc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxNzg6bXQ3NTMwX2ZkYl9jbWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBlbnVtIG10NzUzMF9mZGJfY21kIGNtZCwgdTMyICpyc3ApXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTE3OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEwLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTE6c3RhdGljIHZvaWQgbXQ3NTMwX3BvcnRfZmFzdF9hZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjEyLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjEzOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTQtXFx0dTMyIHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMzE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MjMyOm10NzUzMF9mZGJfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHN0cnVjdCBtdDc1MzBfZmRiICpmZGIpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MjU4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI1OTptdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTE2IHZpZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjYwLVxcdFxcdCB1OCBwb3J0X21hc2ssIGNvbnN0IHU4ICptYWMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjg4LS8qIFNldCB1cCBzd2l0Y2ggY29yZSBjbG9jayBmb3IgTVQ3NTMwICovXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjI4OTpzdGF0aWMgdm9pZCBtdDc1MzBfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0zMTc9c3RhdGljIHN0cnVjdCBkc2FfcG9ydCAqXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjMxODptdDc1M3hfcHJlZmVycmVkX2RlZmF1bHRfbG9jYWxfY3B1X3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTMyOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzozMzA6bXQ3NTMwX3NldHVwX3BvcnQ2KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzMxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MzMyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0zMzMtXFx0dTMyIG5jcG8xLCBzc2NfZGVsdGEsIHh0YWw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9MzkxPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjM5MjptdDc1MzFfcGxsX3NldHVwKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMzkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz00Nzk9c3RhdGljIGJvb2xcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDgwOmVuNzUxMjIxX3RyZ21paV9jYWxfb2soc3RydWN0IG10NzUzMF9wcml2ICpyeCwgdTMyIHJlZywgaW50IGNoYW4sIGludCBpKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy00ODEte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTQ5Mz1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo0OTQ6ZW43NTEyMjFfdHJnbWlpX2NhbGlicmF0ZV9kaXJlY3Rpb24oc3RydWN0IG10NzUzMF9wcml2ICp0eCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NDk1OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnJ4LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy00OTYtXFx0XFx0XFx0XFx0ICAgIHU4ICpkZWZhdWx0X3RhcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NTczPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjU3NDplbjc1MTIyMV9zZXRfdHhfZHJpdmUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1OCBkcnZwLCB1OCBkcnZuLCB1OCBjbGtfZHJ2cCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNTc1LVxcdFxcdCAgICAgIHU4IGNsa19kcnZuKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTU4OT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo1OTA6ZW43NTEyMjFfdHJnbWlpX3BhaXJfc2V0dXAoc3RydWN0IG10NzUzMF9wcml2ICpleHQsIGludCBleHRfcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NTkxOlxcdFxcdFxcdCAgIHN0cnVjdCBtdDc1MzBfcHJpdiAqb25kaWUsIGludCBvbmRpZV9wb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy01OTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTY3NT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2NzY6bXQ3NTMwX2NhbF9pbnRlcnN3aXRjaF90cmdtaWkoc3RydWN0IGRzYV9wb3J0ICpkcClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNjc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02ODAtXFx0c3RydWN0IGRzYV9wb3J0ICpwZWVyX2RwO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODE6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwZWVyO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo2ODI6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy02ODMtXFx0c3RydWN0IGRzYV9saW5rICpkbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz03MjQ9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzI1Om10NzUzMF9taWJfcmVzZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MjYte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo3Mjc6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTcyOC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjczMzpzdGF0aWMgaW50IG10NzUzMF9waHlfcmVhZF9jMjIoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03MzctXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjczODpzdGF0aWMgaW50IG10NzUzMF9waHlfd3JpdGVfYzIyKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0sXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTczOS1cXHRcXHRcXHRcXHR1MTYgdmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTc0My1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzQ0OnN0YXRpYyBpbnQgbXQ3NTMwX3BoeV9yZWFkX2M0NShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03NDUtXFx0XFx0XFx0ICAgICAgIGludCBkZXZhZCwgaW50IHJlZ251bSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy03NDktXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjc1MDpzdGF0aWMgaW50IG10NzUzMF9waHlfd3JpdGVfYzQ1KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzUxLVxcdFxcdFxcdFxcdGludCByZWdudW0sIHUxNiB2YWwpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9NzU2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6NzU3Om10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtNzU4LVxcdFxcdFxcdGludCByZWdudW0pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODA3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODA4Om10NzUzMV9pbmRfYzQ1X3BoeV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTgwOS1cXHRcXHRcXHQgaW50IHJlZ251bSwgdTE2IGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODU3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODU4Om10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTg1OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9ODk0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6ODk1Om10NzUzMV9pbmRfYzIyX3BoeV93cml0ZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy04OTYtXFx0XFx0XFx0IHUxNiBkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTkzMT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjkzMjptdDc1M3hfcGh5X3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzMte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5MzQ6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05MzUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTM5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQwOm10NzUzeF9waHlfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZhZCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQxLXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTQyOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTk0Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk0ODptdDc1M3hfcGh5X3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbClcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTQ5LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTUwOlxcdHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTk1NT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk1NjptdDc1M3hfcGh5X3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldmFkLCBpbnQgcmVnbnVtLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTctXFx0XFx0ICAgICB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NTgte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NTk6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05NjAtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM9OTY0PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk2NTptdDc1MzBfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTY2LVxcdFxcdCAgIHVpbnQ4X3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTcyLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5NzM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc0OlxcdFxcdGV0aHRvb2xfcHV0cyhcXHUwMDI2ZGF0YSwgbXQ3NTMwX21pYltpXS5uYW1lKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05Nzc9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTc4Om10NzUzMF9yZWFkX3BvcnRfc3RhdHMoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTc5LVxcdFxcdCAgICAgICB1MzIgb2Zmc2V0LCB1OCBzaXplLCB1aW50NjRfdCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz05OTI9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6OTkzOm10NzUzMF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTQtXFx0XFx0XFx0IHVpbnQ2NF90ICpkYXRhKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy05OTUte1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzo5OTY6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjk5NzpcXHRjb25zdCBzdHJ1Y3QgbXQ3NTMwX21pYl9kZXNjICptaWI7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTk5OC1cXHRpbnQgaTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtOTk5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDAwOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG10NzUzMF9taWIpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMTpcXHRcXHRtaWIgPSBcXHUwMDI2bXQ3NTMwX21pYltpXTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAwMi1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwMzpcXHRcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIG1pYi1cXHUwMDNlb2Zmc2V0LCBtaWItXFx1MDAzZXNpemUsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMDQtXFx0XFx0XFx0XFx0ICAgICAgIGRhdGEgKyBpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0xMDA4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAwOTptdDc1MzBfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTMtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMTQ6XFx0cmV0dXJuIEFSUkFZX1NJWkUobXQ3NTMwX21pYik7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMTUtfVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE2LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDE3OnN0YXRpYyB2b2lkIG10NzUzMF9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDE5LXtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTAyMDpcXHRzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAyMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI2LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDI3OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1VOSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMjgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1RyYW5zbWl0dGVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDI5LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDMwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX1NJTkdMRV9DT0xMSVNJT04sIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzEtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZVNpbmdsZUNvbGxpc2lvbkZyYW1lcyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzItXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMzM6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfTVVMVElQTEVfQ09MTElTSU9OLCAxLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDM0LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzUtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMzY6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfUlhfVU5JQ0FTVCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTAzNy1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwMzgtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwMzk6XFx0bXQ3NTMwX3JlYWRfcG9ydF9zdGF0cyhwcml2LCBwb3J0LCBNVDc1MzBfUE9SVF9NSUJfVFhfQllURVMsIDIsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNDAtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0spO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDQxLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDQyOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0FMSUdOX0VSUiwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0My1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlQWxpZ25tZW50RXJyb3JzKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0NC1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0NTpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9ERUZFUlJFRCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0Ni1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlRnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0Ny1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA0ODpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9MQVRFX0NPTExJU0lPTiwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA0OS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlTGF0ZUNvbGxpc2lvbnMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDUwLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDUxOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0VYQ0VTU0lWRV9DT0xMSVNJT04sIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTItXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc0Fib3J0ZWREdWVUb1hTQ29sbHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDUzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDU0OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX0JZVEVTLCAyLFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDU1LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNSZWNlaXZlZE9LKTtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA1Ni1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA1NzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9UWF9NVUxUSUNBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNTktXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LICs9IG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LO1xcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDYwOlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1RYX0JST0FEQ0FTVCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2MS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlQnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0xMDYzLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoxMDY0OlxcdG10NzUzMF9yZWFkX3BvcnRfc3RhdHMocHJpdiwgcG9ydCwgTVQ3NTMwX1BPUlRfTUlCX1JYX01VTFRJQ0FTVCwgMSxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA2NS1cXHRcXHRcXHQgICAgICAgXFx1MDAyNm1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyk7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjYtXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZXNSZWNlaXZlZE9LICs9IG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSztcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA2NzpcXHRtdDc1MzBfcmVhZF9wb3J0X3N0YXRzKHByaXYsIHBvcnQsIE1UNzUzMF9QT1JUX01JQl9SWF9CUk9BRENBU1QsIDEsXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNjgtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZtYWNfc3RhdHMtXFx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwNzEtXFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwNzI6c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBtdDc1MzBfcm1vbl9yYW5nZXNbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA3My1cXHR7IDAsIDY0IH0sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4MS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmM6MTA4MjpzdGF0aWMgdm9pZCBtdDc1MzBfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4My1cXHRcXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMTA4NS17XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjEwODY6XFx0c3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTEwODctXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA1OjEyLjQ2MDk4NDE5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MDc1MTk4NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudDogTVQ3NTMwIEV0aGVybmV0IFN3aXRjaCBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tZWRpYXRlayxtdDc1MzAueWFtbGAgYW5kIHRoZSBgZHJpdmVycy9uZXQvZHNhL210NzUzMCpgIGRyaXZlci4gVGhpcyBpcyB0aGUgTWVkaWFUZWsvRWNvTmV0L0Fpcm9oYSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVyIGZvciB0aGVpciBlbWJlZGRlZCBTb0NzLCBzcGVjaWZpY2FsbHkgdGhlIE1UNzUzMC9NVDc1MzEvTVQ3NjIxL01UNzk4OC9FTjc1MTIyMSBhbmQgc2ltaWxhciBkZXZpY2VzLiBNeSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgYW1kNjQuXG5cblRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgaXMgdGhhdCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbGlrZSBRRU1VIGFuZCBHQ0Ugb24gYW1kNjQsIHNpbXBseSAqZG9uJ3QqIGhhdmUgdGhpcyBzcGVjaWZpYyBNZWRpYVRlayBTb0Mgc3dpdGNoIGhhcmR3YXJlIHByZXNlbnQuIFRoZXJlIGFyZW4ndCBhbnkgcmVhZGlseSBhdmFpbGFibGUgbW9jayBkZXZpY2VzIG9yIHZpcnR1YWwgYnVzZXMgdG8gaW5zdGFudGlhdGUgYW5kIGJpbmQgdGhpcyBkcml2ZXIgb24gYW1kNjQuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLiBNeSByZXZpZXcgb2Ygc2VjdGlvbiAyIGNsZWFybHkgc2hvd3MgYSBzdHJ1Y3R1cmFsIHByb2JsZW06IHRoZSBNVDc1MzAgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBBU0lDL1NvQy1pbnRlZ3JhdGVkIHN3aXRjaCwgYW5kIHRoZSBjaGFuZ2VzIGludm9sdmUgZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIHRoZSBkcml2ZXIgZm9yIHRoaXMgZGV2aWNlLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCBJIGhhdmUgbm8gcmVhc29uIHRvIHRoaW5rIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciB0aGlzIGFyY2hpdGVjdHVyZS5cblxuVGhlcmVmb3JlLCBnaXZlbiB0aGUgc3RydWN0dXJhbCB1bnJlYWNoYWJpbGl0eSBvZiB0aGUgaGFyZHdhcmUsIEknbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgSSdtIHNldHRpbmcgdGhpcyB1cCBjb3JyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHRoZSBgc2V0LXJlc3VsdHNgIGNhbGwuIEknbGwgbmVlZCB0byBjbGVhcmx5IHN0YXRlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbnMgdG91Y2ggZGV2aWNlIHRyZWUgYmluZGluZ3MgYW5kIHRoZSBNVDc1MzAvTVQ3NTMxL0VONzUxMjIxIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyLCBhbmQgdGhhdCB0aGlzIGhhcmR3YXJlIGlzbid0IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLiBNeSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGFyZSBlbXB0eS5cblxuT2theSwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDAzMSwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTY6MDU6MjAuNTM2MTg1MDcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHVwZGF0ZXMgRGV2aWNlIFRyZWUgYmluZGluZ3MgZG9jdW1lbnRhdGlvbiBhbmQgYWRkcyBzdXBwb3J0IGZvciBFY29OZXQgRU43NTEyMjEgU29DcyBhbmQgcGFzc3Rocm91Z2ggbW9kZSB0byB0aGUgTWVkaWFUZWsgTVQ3NTMwIERTQSBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIChkcml2ZXJzL25ldC9kc2EvbXQ3NTMwKikuIFRoaXMgZHJpdmVyIGNvbnRyb2xzIHNwZWNpZmljIHBoeXNpY2FsIE1lZGlhVGVrL0Vjb05ldCBTb0MgZXRoZXJuZXQgc3dpdGNoZXMgYW5kIE1ESU8vTU1JTyBkZXZpY2VzIHRoYXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KS4gQmVjYXVzZSB0aGUgbW9kaWZpZWQgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSBwYXRocyBhcmUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLCBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgdXBkYXRlcyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIGFuZCBhZGRzIHN1cHBvcnQgZm9yIEVjb05ldCBFTjc1MTIyMSBTb0NzIGFuZCBwYXNzdGhyb3VnaCBtb2RlIHRvIHRoZSBNZWRpYVRlayBNVDc1MzAgRFNBIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgKGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAqKS4gVGhpcyBkcml2ZXIgY29udHJvbHMgc3BlY2lmaWMgcGh5c2ljYWwgTWVkaWFUZWsvRWNvTmV0IFNvQyBldGhlcm5ldCBzd2l0Y2hlcyBhbmQgTURJTy9NTUlPIGRldmljZXMgdGhhdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLiBCZWNhdXNlIHRoZSBtb2RpZmllZCBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHBhdGhzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE2OjA1OjIwLjUzNjIxMDgyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownc99q[1] Phase: Running StartedAt: 2026-09-09 16:05:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownc99q[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 16:05:32 +0000 UTC FinishedAt: 2026-09-09 16:05:36 +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,}