Name: series-workflown6q4w Phase: Failed StartedAt: 2026-09-14 21:21:25 +0000 UTC FinishedAt: 2026-09-14 21:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q4w[0] Phase: Succeeded StartedAt: 2026-09-14 21:21:25 +0000 UTC FinishedAt: 2026-09-14 21:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q4w[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 21:21:25 +0000 UTC FinishedAt: 2026-09-14 21:24:02 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NjFhYTllNTI5OWJmYzhhMjA4Y2E4ZjdlMzI0ZDU4OTgzNjE0N2YzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjE6MjI6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xuaW5kZXggM2E3NjJkMTdiYTZjNi4uZjI2MTEwNDcyOWU5MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xuQEAgLTM0Miw2ICYjNDM7MzQyLDcgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHUzMiByZXNjaGVkX3RpbWUgPSBDT1VOVEVSX1BPTExfVElNRTtcbiBcdHUzMiBjb3VudCA9IENPVU5URVJfQlVMS19TSVpFO1xuIFx0Ym9vbCBkb25lID0gZmFsc2U7XG4mIzQzO1x0dTMyIHJlbWFpbmluZztcbiBcdGludCBlcnI7XG4gXHR1MzIgaTtcbiBcbkBAIC0zNjgsMTAgJiM0MzszNjksMTIgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Z290byByZXNjaGVkO1xuIFx0fVxuIFxuJiM0MztcdHJlbWFpbmluZyA9IGJsb2NrLVx1MDAzZW51bV9jb3VudGVycyAtIGNvdW50ZXItXHUwMDNldG90YWxfcmVhZDtcbiBcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfbG9jayhibG9jayk7XG4gXHRlcnIgPSBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoY291bnRlci1cdTAwM2VzdywgY291bnRlci1cdTAwM2V0b3RhbF9yZWFkLFxuIFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvdW50LCBcdTAwMjZkb25lLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmJsb2NrLVx1MDAzZXN0YXRzW2NvdW50ZXItXHUwMDNldG90YWxfcmVhZF0pO1xuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZibG9jay1cdTAwM2VzdGF0c1tjb3VudGVyLVx1MDAzZXRvdGFsX3JlYWRdLFxuJiM0MztcdFx0XHRcdCAgICAgICByZW1haW5pbmcpO1xuIFx0cHJlc3RlcmFfY291bnRlcl9ibG9ja191bmxvY2soYmxvY2spO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBhYm9ydDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcbmluZGV4IDc2OTVjYmIyY2U2MjYuLjJlNWNmZmVmZWE3MDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuY1xuQEAgLTIzMDUsNyAmIzQzOzIzMDUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9hYm9ydChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcbiBcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxuIFx0XHRcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHByZXN0ZXJhX2NvdW50ZXJfc3RhdHMgKnN0YXRzLFxuJiM0MztcdFx0XHQgICAgIHUzMiBzdGF0c19sZW4pXG4ge1xuIFx0c3RydWN0IHByZXN0ZXJhX21zZ19jb3VudGVyX3Jlc3AgKnJlc3A7XG4gXHRzdHJ1Y3QgcHJlc3RlcmFfbXNnX2NvdW50ZXJfcmVxIHJlcSA9IHtcbkBAIC0yMzI0LDYgJiM0MzsyMzI1LDExIEBAIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfYnVmZjtcbiBcbiYjNDM7XHRpZiAoX19sZTMyX3RvX2NwdShyZXNwLVx1MDAzZW51bV9jb3VudGVycykgXHUwMDNlIG1pbigqbGVuLCBzdGF0c19sZW4pKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBmcmVlX2J1ZmY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIF9fbGUzMl90b19jcHUocmVzcC1cdTAwM2VudW1fY291bnRlcnMpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdGF0c1tpXS5wYWNrZXRzICYjNDM7PSBfX2xlNjRfdG9fY3B1KHJlc3AtXHUwMDNlc3RhdHNbaV0ucGFja2V0cyk7XG4gXHRcdHN0YXRzW2ldLmJ5dGVzICYjNDM7PSBfX2xlNjRfdG9fY3B1KHJlc3AtXHUwMDNlc3RhdHNbaV0uYnl0ZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuaW5kZXggMGE5MjkyNzllMWNlYS4uMmU5YWNlYjdhMTM2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXG5AQCAtMjM1LDcgJiM0MzsyMzUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl90cmlnZ2VyKHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgYmxvY2tfaWQpO1xuIGludCBwcmVzdGVyYV9od19jb3VudGVyX2Fib3J0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3KTtcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxuIFx0XHRcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpO1xuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzICpzdGF0cyxcbiYjNDM7XHRcdFx0ICAgICB1MzIgc3RhdHNfbGVuKTtcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9ibG9ja19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csXG4gXHRcdFx0XHQgIHUzMiBjbGllbnQsIHUzMiAqYmxvY2tfaWQsIHUzMiAqb2Zmc2V0LFxuIFx0XHRcdFx0ICB1MzIgKm51bV9jb3VudGVycyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjFhYTllNTI5OWJmYzhhMjA4Y2E4ZjdlMzI0ZDU4OTgzNjE0N2YzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjE6MjI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jCmluZGV4IDNhNzYyZDE3YmE2YzYuLmYyNjExMDQ3MjllOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jCkBAIC0zNDIsNiAmIzQzOzM0Miw3IEBAIHN0YXRpYyB2b2lkIHByZXN0ZXJhX2NvdW50ZXJfc3RhdHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJdTMyIHJlc2NoZWRfdGltZSA9IENPVU5URVJfUE9MTF9USU1FOwogCXUzMiBjb3VudCA9IENPVU5URVJfQlVMS19TSVpFOwogCWJvb2wgZG9uZSA9IGZhbHNlOwomIzQzOwl1MzIgcmVtYWluaW5nOwogCWludCBlcnI7CiAJdTMyIGk7CiAKQEAgLTM2OCwxMCAmIzQzOzM2OSwxMiBAQCBzdGF0aWMgdm9pZCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlnb3RvIHJlc2NoZWQ7CiAJfQogCiYjNDM7CXJlbWFpbmluZyA9IGJsb2NrLSZndDtudW1fY291bnRlcnMgLSBjb3VudGVyLSZndDt0b3RhbF9yZWFkOwogCXByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfbG9jayhibG9jayk7CiAJZXJyID0gcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KGNvdW50ZXItJmd0O3N3LCBjb3VudGVyLSZndDt0b3RhbF9yZWFkLAogCQkJCSAgICAgICAmYW1wO2NvdW50LCAmYW1wO2RvbmUsCi0JCQkJICAgICAgICZhbXA7YmxvY2stJmd0O3N0YXRzW2NvdW50ZXItJmd0O3RvdGFsX3JlYWRdKTsKJiM0MzsJCQkJICAgICAgICZhbXA7YmxvY2stJmd0O3N0YXRzW2NvdW50ZXItJmd0O3RvdGFsX3JlYWRdLAomIzQzOwkJCQkgICAgICAgcmVtYWluaW5nKTsKIAlwcmVzdGVyYV9jb3VudGVyX2Jsb2NrX3VubG9jayhibG9jayk7CiAJaWYgKGVycikKIAkJZ290byBhYm9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuYwppbmRleCA3Njk1Y2JiMmNlNjI2Li4yZTVjZmZlZmVhNzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jCkBAIC0yMzA1LDcgJiM0MzsyMzA1LDggQEAgaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfYWJvcnQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpCiAKIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsCiAJCQkgICAgIHUzMiAqbGVuLCBib29sICpkb25lLAotCQkJICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpCiYjNDM7CQkJICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsCiYjNDM7CQkJICAgICB1MzIgc3RhdHNfbGVuKQogewogCXN0cnVjdCBwcmVzdGVyYV9tc2dfY291bnRlcl9yZXNwICpyZXNwOwogCXN0cnVjdCBwcmVzdGVyYV9tc2dfY291bnRlcl9yZXEgcmVxID0gewpAQCAtMjMyNCw2ICYjNDM7MjMyNSwxMSBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LAogCWlmIChlcnIpCiAJCWdvdG8gZnJlZV9idWZmOwogCiYjNDM7CWlmIChfX2xlMzJfdG9fY3B1KHJlc3AtJmd0O251bV9jb3VudGVycykgJmd0OyBtaW4oKmxlbiwgc3RhdHNfbGVuKSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZnJlZV9idWZmOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IF9fbGUzMl90b19jcHUocmVzcC0mZ3Q7bnVtX2NvdW50ZXJzKTsgaSYjNDM7JiM0MzspIHsKIAkJc3RhdHNbaV0ucGFja2V0cyAmIzQzOz0gX19sZTY0X3RvX2NwdShyZXNwLSZndDtzdGF0c1tpXS5wYWNrZXRzKTsKIAkJc3RhdHNbaV0uYnl0ZXMgJiM0Mzs9IF9fbGU2NF90b19jcHUocmVzcC0mZ3Q7c3RhdHNbaV0uYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oCmluZGV4IDBhOTI5Mjc5ZTFjZWEuLjJlOWFjZWI3YTEzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmgKQEAgLTIzNSw3ICYjNDM7MjM1LDggQEAgaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfdHJpZ2dlcihzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdywgdTMyIGJsb2NrX2lkKTsKIGludCBwcmVzdGVyYV9od19jb3VudGVyX2Fib3J0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3KTsKIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsCiAJCQkgICAgIHUzMiAqbGVuLCBib29sICpkb25lLAotCQkJICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpOwomIzQzOwkJCSAgICAgc3RydWN0IHByZXN0ZXJhX2NvdW50ZXJfc3RhdHMgKnN0YXRzLAomIzQzOwkJCSAgICAgdTMyIHN0YXRzX2xlbik7CiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9ibG9ja19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csCiAJCQkJICB1MzIgY2xpZW50LCB1MzIgKmJsb2NrX2lkLCB1MzIgKm9mZnNldCwKIAkJCQkgIHUzMiAqbnVtX2NvdW50ZXJzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IE5ldHdvcmsgRHJpdmVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4sIGJ1dCBmaXJzdCwgSSBuZWVkIGEgbGl0dGxlIGNvbnRleHQgdG8gbWFrZSBhIHByb3BlciBldmFsdWF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmhgLiBBbHJpZ2h0LCB0aGUgYG1hcnZlbGwvcHJlc3RlcmFgIGRpcmVjdG9yeS4gTm93LCB3aGF0ICppcyogdGhpcyBkcml2ZXIgcHJlY2lzZWx5PyBJcyBpdCBhIGRyaXZlciBmb3IgYSAqcmVhbCogcGh5c2ljYWwgc3dpdGNoLCBvciBjb3VsZCB0aGlzIGJlIHNvbWV0aGluZyB0aGF0JiMzOTtzIGVtdWxhdGVkIG9yIHZpcnR1YWxpemVkIHNvbWVob3c/IFRoYXQmIzM5O3MgZ29pbmcgdG8gaW5mb3JtIGEgbG90IG9mIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLiBUaW1lIHRvIHJlYWNoIGZvciBgZ3JlcHBlcmAgKG9yIGByZWFkLWZpbGVgIGlmIHRoZSBzaXR1YXRpb24gY2FsbHMgZm9yIGl0KSBhbmQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFBSRVNURVJBLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBpbiB0aGUgYnVpbGQgb3B0aW9ucyB0aGF0IG1pZ2h0IGdpdmUgbWUgdGhhdCBjcnVjaWFsIGluc2lnaHQgaW50byB0aGUgaGFyZHdhcmUgdGhpcyBhZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVTVEVSQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6Njpjb25maWcgUFJFU1RFUkFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxODpjb25maWcgUFJFU1RFUkFfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBQcmVzdGVyYSBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBLY29uZmlnIGZpbGUgaXMgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBNYXJ2ZWxsJiMzOTtzIFByZXN0ZXJhIGV0aGVybmV0IHN3aXRjaCBkcml2ZXJzIGFyZSBkZWZpbmVkLiBUaGlzIGlzIHRoZSBwbGFjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyJiMzOTtzIGZlYXR1cmVzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0cyBmb3IgdmFyaW91cyBQcmVzdGVyYS1zcGVjaWZpYyBmZWF0dXJlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDaGlwc2V0IFNlbGVjdGlvbjoqKiBIb3cgYXJlIHRoZSBkaWZmZXJlbnQgUHJlc3RlcmEgc3dpdGNoIHZhcmlhbnRzIGhhbmRsZWQ/IElzIHRoZXJlIGEgdG9wLWxldmVsIHN5bWJvbCBmb3IgY2hvb3NpbmcgdGhlIHNwZWNpZmljIGNoaXBzZXQgZmFtaWx5PyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cz8KKiAgICoqRmVhdHVyZSBGbGFnczoqKiBXaGF0IGZpbmUtZ3JhaW5lZCBmZWF0dXJlcyBhcmUgY29uZmlndXJhYmxlPyBUaGluZ3MgbGlrZSBWTEFOIHN1cHBvcnQsIFFvUywgbGluayBhZ2dyZWdhdGlvbiAoTEFHL0xBQ1ApLCBzZWN1cml0eSBmZWF0dXJlcywgb3IgaGFyZHdhcmUgb2ZmbG9hZHMgYXJlIG9mIGludGVyZXN0LiBJJiMzOTtsbCBsb29rIGZvciBzeW1ib2xzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhlc2UgY2FwYWJpbGl0aWVzLgoqICAgKipEcml2ZXIgTW9kdWxlczoqKiBJcyB0aGUgZHJpdmVyIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBvciBidWlsdC1pbiB0byB0aGUga2VybmVsPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggYXBwcm9hY2g/CiogICAqKkJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIG90aGVyIGRyaXZlcnMsIHN1Y2ggYXMgUEhZIGRyaXZlcnMgb3IgTURJTz8gSG93IGFyZSB0aGV5IGhhbmRsZWQgaW4gdGhlIEtjb25maWc/CiogICAqKkRvY3VtZW50YXRpb246KiogSSYjMzk7bSBob3BpbmcgdGhlIGhlbHAgdGV4dHMgYXJlIGNsZWFyIGFuZCBpbmZvcm1hdGl2ZS4gR29vZCBLY29uZmlnIGZpbGVzIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgZm9yIGFuIGVuZ2luZWVyIHRvIHVuZGVyc3RhbmQgd2hhdCBhIHN5bWJvbCAqZG9lcyogYW5kIHdoZW4gaXQgc2hvdWxkIGJlIGVuYWJsZWQuIElmIHRoZSBkb2N1bWVudGF0aW9uIGlzIG1pc3NpbmcsIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGNvZGUuCiogICAqKkRlZmF1bHRzOioqIEkmIzM5O2xsIG5vdGUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdHMgZ2l2ZXMgYW4gaW5zaWdodCBpbnRvIGhvdyB0aGUgZW5naW5lZXJzIGV4cGVjdCB0aGUgZHJpdmVyIHRvIGJlIHVzZWQgbW9zdCBjb21tb25seS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHNlZSBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkcml2ZXIgZGVzaWduLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgSSBjb3VsZCBidWlsZCBhbmQgYWRhcHQgdGhpcyBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2Ugb3IgaGFyZHdhcmUgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYXJ2ZWxsIFByZXN0ZXJhIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFJFU1RFUkFcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUNzIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gTkVUX1NXSVRDSERFViBcdTAwMjZcdTAwMjYgVkxBTl84MDIxUVxuICAgOTpcdFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cbiAgMTA6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAxMTpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5LlxuICAxNDpcdFxuICAxNTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMTY6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHByZXN0ZXJhLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBQUkVTVEVSQV9QQ0lcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O1BDSSBpbnRlcmZhY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcyBmYW1pbHlcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IFBSRVNURVJBXG4gIDIxOlx0XHRkZWZhdWx0IFBSRVNURVJBXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgaW1wbGVtZW50YXRpb24gb2YgUENJIGludGVyZmFjZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIFByZXN0ZXJhXG4gIDI0Olx0XHQgIFN3aXRjaCBBU0lDcyBmYW1pbHkuXG4gIDI1Olx0XG4gIDI2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAyNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHJlc3RlcmFfcGNpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIFN1cHBvcnQqKgoKT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcy4gUmlnaHQsIEkga25vdyB0aG9zZSDigJMgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBBU0lDcywgc2ltaWxhciB0byB0aGUgTWVsbGFub3ggU3dpdGNoWC9TcGVjdHJ1bSBBU0lDcy4gSnVzdCBsaWtlIG1seHN3LCB0aGUgbWVudGlvbiBvZiB3aGljaCBpbW1lZGlhdGVseSBicmluZ3MgdGhlIGNvbnRleHQgb2YgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGludG8gc2hhcnAgcmVsaWVmLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW50byBTZWN0aW9uIDIgb2YgdGhlIHByb21wdCB0byBzZWUgaWYgdGhpcyBmaXRzIHRoZSBwcm9maWxlIG9mICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBsaXN0cyBleGFtcGxlcyBsaWtlIG1seHN3LCB3aGljaCBhcmUgUENJLWJhc2VkIGFuZCBvZnRlbiBsYWNraW5nIGZ1bGwgZW11bGF0ZWQgc3VwcG9ydC4KClRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBQcmVzdGVyYSBoYXMgYW55IHNvcnQgb2YgdmlydHVhbCwgbW9jaywgb3IgZW11bGF0ZWQgY2FwYWJpbGl0eS4gT3IsIGlzIGl0IGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcnVubmluZyBvbiBwaHlzaWNhbCBoYXJkd2FyZSBQQ0kgZGV2aWNlcz8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB0aGlzLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiB0aGlzIGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBoYXJkd2FyZSB0aGF0ICpyZXF1aXJlcyogcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRvIGZ1bmN0aW9uLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB3ZSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGV4YW1pbmluZyB0aG9zZSBmaWxlczoKCioqRGl2aW5nIGludG8gdGhlIE1hcnZlbGwgUHJlc3RlcmEgRXRoZXJuZXQgRHJpdmVycyoqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGxvb2sgYXQgdGhlIE1hcnZlbGwgUHJlc3RlcmEgRXRoZXJuZXQgZHJpdmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkcml2ZXIgY29kZSBmb3IgdGhlIE1hcnZlbGwgUHJlc3RlcmEgc2VyaWVzIG9mIHN3aXRjaCBjaGlwcywgbmF0dXJhbGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIGl0IOKAkyB3aGF0IG1vZHVsZXMgYXJlIHByZXNlbnQsIHdoYXQgYWJzdHJhY3Rpb24gbGF5ZXJzIHRoZXkgYXJlIHVzaW5nLCBhbmQgdGhlIGxldmVsIG9mIGludGVncmF0aW9uIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2suIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBMaW51eCBuZXRkZXYgaW50ZXJmYWNlPyBBcmUgdGhlcmUgY3VzdG9tIGV4dGVuc2lvbnM/IEFyZSB0aGV5IGVtcGxveWluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaW4gc29tZSBjbGV2ZXIgd2F5PyBUaGUgZmlsZSBvcmdhbml6YXRpb24gd2lsbCBpbW1lZGlhdGVseSBwcm92aWRlIGNsdWVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBvYnZpb3VzIGRlc2lnbiBwYXR0ZXJuIG9yIGRvY3VtZW50YXRpb24sIG9yIHdoZXRoZXIgSSB3aWxsIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIHRvIHJldmVyc2UgZW5naW5lZXIgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBzcGVjaWZpYyBQcmVzdGVyYS1yZWxhdGVkIGRlZmluZXMgb3Igc3RydWN0dXJlcy4gVWx0aW1hdGVseSwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhbmQgaG93IHdlbGwgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgaXRzIGNhcGFiaWxpdGllcyBhbmQgaG93IGl0IHBvdGVudGlhbGx5IHBlcmZvcm1zIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgbGlzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3ByZXN0ZXJhLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfYWNsLmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfYWNsLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfY291bnRlci5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2NvdW50ZXIuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9kZXZsaW5rLmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfZGV2bGluay5oJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2RzYS5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2RzYS5oJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2V0aHRvb2wuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9ldGh0b29sLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfZmxvdy5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2Zsb3cuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9mbG93ZXIuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9mbG93ZXIuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9ody5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2h3LmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfbWFpbi5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX21hdGNoYWxsLmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfbWF0Y2hhbGwuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9wY2kuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yb3V0ZXIuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yb3V0ZXJfaHcuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yb3V0ZXJfaHcuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yeHR4LmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfcnh0eC5oJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX3NwYW4uYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9zcGFuLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfc3dpdGNoZGV2LmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfc3dpdGNoZGV2LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgcHJlc3RlcmFfcGNpLmNgIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGlzc3VlIGxpa2VseSByZXNpZGVzIHdpdGhpbiB0aGUgYHByZXN0ZXJhX3BjaS5jYCBmaWxlLiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgUENJIGRyaXZlciBmb3IgdGhlIFByZXN0ZXJhIHN3aXRjaCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkIHRvIHByb2dyYW0gYW5kIGFjY2VzcyB0aGUgZGV2aWNlIHJlZ2lzdGVycy4gVGltZSB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgZXNwZWNpYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgbWFwcGluZy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBiZWluZyB1c2VkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzdWJ0bGUgdGltaW5nIGlzc3Vlcy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgbW9kdWxlOyBtYXliZSB0aGVyZSYjMzk7cyBhIGNsdWUgdGhlcmUgYWJvdXQgaG93IHRoaW5ncyBhcmUgZmFpbGluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgbG9ncyBoYXZlIHNvbWUgcG9pbnRlcnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpc3N1ZXMgd2l0aCBpbnRlcnJ1cHQgbGluZXMgb3IgYWNrbm93bGVkZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlIE9SIEdQTC0yLjBcbiAgIDI6XHQvKiBDb3B5cmlnaHQgKGMpIDIwMTktMjAyMCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NpcmNfYnVmLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICAxMjpcdFxuICAxMzpcdCNpbmNsdWRlIFwmIzM0O3ByZXN0ZXJhLmhcJiMzNDtcbiAgMTQ6XHRcbiAgMTU6XHQjZGVmaW5lIFBSRVNURVJBX01TR19NQVhfU0laRSAxNTAwXG4gIDE2Olx0XG4gIDE3Olx0I2RlZmluZSBQUkVTVEVSQV9TVVBQX0ZXX01BSl9WRVJcdDRcbiAgMTg6XHQjZGVmaW5lIFBSRVNURVJBX1NVUFBfRldfTUlOX1ZFUlx0MVxuICAxOTpcdFxuICAyMDpcdCNkZWZpbmUgUFJFU1RFUkFfUFJFVl9GV19NQUpfVkVSXHQ0XG4gIDIxOlx0I2RlZmluZSBQUkVTVEVSQV9QUkVWX0ZXX01JTl9WRVJcdDBcbiAgMjI6XHRcbiAgMjM6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1BBVEhfRk1UXHRcJiMzNDttcnZsL3ByZXN0ZXJhL212c3dfcHJlc3RlcmFfZnctdiV1LiV1LmltZ1wmIzM0O1xuICAyNDpcdCNkZWZpbmUgUFJFU1RFUkFfRldfQVJNNjRfUEFUSF9GTVQgXCYjMzQ7bXJ2bC9wcmVzdGVyYS9tdnN3X3ByZXN0ZXJhX2Z3X2FybTY0LXYldS4ldS5pbWdcJiMzNDtcbiAgMjU6XHRcbiAgMjY6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX0hEUl9NQUdJQ1x0XHQweDM1MUQ5RDA2XG4gIDI3Olx0I2RlZmluZSBQUkVTVEVSQV9GV19ETF9USU1FT1VUX01TXHQ1MDAwMFxuICAyODpcdCNkZWZpbmUgUFJFU1RFUkFfRldfQkxLX1NaXHRcdDEwMjRcbiAgMjk6XHRcbiAgMzA6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NQUpfTVVMIDEwMDAwMDBcbiAgMzE6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NSU5fTVVMIDEwMDBcbiAgMzI6XHRcbiAgMzM6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NQUoodilcdCgodikgLyBQUkVTVEVSQV9GV19WRVJfTUFKX01VTClcbiAgMzQ6XHRcbiAgMzU6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NSU4odikgXFxcbiAgMzY6XHRcdCgoKHYpIC0gKFBSRVNURVJBX0ZXX1ZFUl9NQUoodikgKiBQUkVTVEVSQV9GV19WRVJfTUFKX01VTCkpIC8gXFxcbiAgMzc6XHRcdFx0XHRQUkVTVEVSQV9GV19WRVJfTUlOX01VTClcbiAgMzg6XHRcbiAgMzk6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9QQVRDSCh2KSBcXFxuICA0MDpcdFx0KCh2KSAtIChQUkVTVEVSQV9GV19WRVJfTUFKKHYpICogUFJFU1RFUkFfRldfVkVSX01BSl9NVUwpIC0gXFxcbiAgNDE6XHRcdFx0XHQoUFJFU1RFUkFfRldfVkVSX01JTih2KSAqIFBSRVNURVJBX0ZXX1ZFUl9NSU5fTVVMKSlcbiAgNDI6XHRcbiAgNDM6XHRlbnVtIHByZXN0ZXJhX3BjaV9iYXJfdCB7XG4gIDQ0Olx0XHRQUkVTVEVSQV9QQ0lfQkFSX0ZXID0gMixcbiAgNDU6XHRcdFBSRVNURVJBX1BDSV9CQVJfUFAgPSA0LFxuICA0NjpcdH07XG4gIDQ3Olx0XG4gIDQ4Olx0c3RydWN0IHByZXN0ZXJhX2Z3X2hlYWRlciB7XG4gIDQ5Olx0XHRfX2JlMzIgbWFnaWNfbnVtYmVyO1xuICA1MDpcdFx0X19iZTMyIHZlcnNpb25fdmFsdWU7XG4gIDUxOlx0XHR1OCByZXNlcnZlZFs4XTtcbiAgNTI6XHR9O1xuICA1MzpcdFxuICA1NDpcdHN0cnVjdCBwcmVzdGVyYV9sZHJfcmVncyB7XG4gIDU1Olx0XHR1MzIgbGRyX3JlYWR5O1xuICA1NjpcdFx0dTMyIHBhZDE7XG4gIDU3Olx0XG4gIDU4Olx0XHR1MzIgbGRyX2ltZ19zaXplO1xuICA1OTpcdFx0dTMyIGxkcl9jdGxfZmxhZ3M7XG4gIDYwOlx0XG4gIDYxOlx0XHR1MzIgbGRyX2J1Zl9vZmZzO1xuICA2MjpcdFx0dTMyIGxkcl9idWZfc2l6ZTtcbiAgNjM6XHRcbiAgNjQ6XHRcdHUzMiBsZHJfYnVmX3JkO1xuICA2NTpcdFx0dTMyIHBhZDI7XG4gIDY2Olx0XHR1MzIgbGRyX2J1Zl93cjtcbiAgNjc6XHRcbiAgNjg6XHRcdHUzMiBsZHJfc3RhdHVzO1xuICA2OTpcdH07XG4gIDcwOlx0XG4gIDcxOlx0I2RlZmluZSBQUkVTVEVSQV9MRFJfUkVHX09GRlNFVChmKVx0b2Zmc2V0b2Yoc3RydWN0IHByZXN0ZXJhX2xkcl9yZWdzLCBmKVxuICA3MjpcdFxuICA3MzpcdCNkZWZpbmUgUFJFU1RFUkFfTERSX1JFQURZX01BR0lDXHQweGYwMGRmZWVkXG4gIDc0Olx0XG4gIDc1Olx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX0lNR19ETFx0QklUKDApXG4gIDc2Olx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX1NUQVJUX0ZXXHRCSVQoMSlcbiAgNzc6XHQjZGVmaW5lIFBSRVNURVJBX0xEUl9TVEFUVVNfSU5WQUxJRF9JTUdcdEJJVCgyKVxuICA3ODpcdCNkZWZpbmUgUFJFU1RFUkFfTERSX1NUQVRVU19OT01FTVx0QklUKDMpXG4gIDc5Olx0XG4gIDgwOlx0I2RlZmluZSBQUkVTVEVSQV9MRFJfUkVHX0JBU0UoZncpXHQoKGZ3KS1cdTAwM2VsZHJfcmVncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb25jbHVzaW9uIG9mIGBwcmVzdGVyYV9wY2kuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgdGFpbCBlbmQgb2YgYHByZXN0ZXJhX3BjaS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBtb2R1bGUgd3JhcHMgdXAgaXRzIHJlc3BvbnNpYmlsaXRpZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyByZXNvdXJjZSBjbGVhbnVwIGFuZCBhbnkgZmluYWwgaW5pdGlhbGl6YXRpb24gb3IgZGUtaW5pdGlhbGl6YXRpb24gc3RlcHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbm9uaWNhbCBwYXR0ZXJucyBJJiMzOTtkIGV4cGVjdCB0byBzZWUgaW4gYSBQQ0kgZHJpdmVyIOKAkyBwYXJ0aWN1bGFybHkgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBJUlEgdW5yZWdpc3RyYXRpb24sIGFuZCBhbnkgcG90ZW50aWFsIHF1aWVzY2luZyBvZiB0aGUgaGFyZHdhcmUuIAoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHBvdGVudGlhbCBmYWlsdXJlIHBhdGhzLiBXaGVyZSBhcmUgdGhlIGBnb3RvYCBzdGF0ZW1lbnRzLCBhbmQgd2hhdCBjbGVhbnVwIGFjdGlvbnMgYXJlIHBlcmZvcm1lZCBpbiBlYWNoIGNhc2U/IEFyZSB0aGV5IGNvbXByZWhlbnNpdmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByZXNvdXJjZSBjb250ZW50aW9uIGlzc3VlcyBJIHNob3VsZCBmbGFnPyBJIHdhbnQgdG8gZW5zdXJlIHRoYXQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIFBDSSBpbml0aWFsaXphdGlvbiwgb3IgaWYgdGhlIGRyaXZlciBpcyB1bmxvYWRlZCwgd2UgZ3JhY2VmdWxseSByZWxlYXNlIGV2ZXJ5dGhpbmcgd2UmIzM5O3ZlIGNsYWltZWQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUENJIGNvcmUuIEhvdyBhcmUgZGV2aWNlIHByb2JlcyBoYW5kbGVkPyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgaWYgYSBkZXZpY2UgZG9lc24mIzM5O3QgcmVzcG9uZCBhcyBleHBlY3RlZD8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYW4gYW5kIGNvbXBsZXRlIGRldGFjaCBvcGVyYXRpb24sIGEga2luZCBvZiBtaXJyb3IgaW1hZ2Ugb2YgdGhlIGF0dGFjaCBwcm9jZWR1cmUsIHRvIGVuc3VyZSBubyBsaW5nZXJpbmcgc3RhdGUuIEFueSB1bmV4cGVjdGVkIHBvd2VyIG1hbmFnZW1lbnQgaW1wbGljYXRpb25zPyBBcmUgdGhlcmUgc3BlY2lmaWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3VzcGVuZC9yZXN1bWU/CgpPdmVyYWxsLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgdGhlIGN1bG1pbmF0aW9uIG9mIGNhcmVmdWwgcmVzb3VyY2UgbWFuYWdlbWVudCwgZGVtb25zdHJhdGluZyByb2J1c3RuZXNzIGFuZCBhZGhlcmluZyB0byBhbGwgcmVsZXZhbnQgUENJIHN0YW5kYXJkcyBhbmQgTGludXggZHJpdmVyIGJlc3QgcHJhY3RpY2VzLiBJJiMzOTttIHNlYXJjaGluZyBmb3IgZXZpZGVuY2Ugb2YgdGhhdC4gSXQmIzM5O3MgdGhlIGZpbmFsIGp1ZGdtZW50IGNhbGwgb24gdGhlIGNvZGUmIzM5O3MgcXVhbGl0eSwgaW4gbXkgZXllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRvdXRfcmVsZWFzZTpcbiA4MDI6XHRcdHByZXN0ZXJhX2Z3X3B1dChmdyk7XG4gODAzOlx0XHRyZXR1cm4gZXJyO1xuIDgwNDpcdH1cbiA4MDU6XHRcbiA4MDY6XHRzdGF0aWMgYm9vbCBwcmVzdGVyYV9wY2lfcHBfdXNlX2JhcjIoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gODA3Olx0e1xuIDgwODpcdFx0c3dpdGNoIChwZGV2LVx1MDAzZWRldmljZSkge1xuIDgwOTpcdFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDczMTJNOlxuIDgxMDpcdFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDM1MDA6XG4gODExOlx0XHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYMzUwMTpcbiA4MTI6XHRcdGNhc2UgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTEwOlxuIDgxMzpcdFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDM1MjA6XG4gODE0Olx0XHRcdHJldHVybiB0cnVlO1xuIDgxNTpcdFxuIDgxNjpcdFx0ZGVmYXVsdDpcbiA4MTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxODpcdFx0fVxuIDgxOTpcdH1cbiA4MjA6XHRcbiA4MjE6XHRzdGF0aWMgdTMyIHByZXN0ZXJhX3BjaV9wcF9iYXIyX29mZnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gODIyOlx0e1xuIDgyMzpcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikgPT0gMHgxMDAwMDAwKVxuIDgyNDpcdFx0XHRyZXR1cm4gMHgwO1xuIDgyNTpcdFx0ZWxzZVxuIDgyNjpcdFx0XHRyZXR1cm4gKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikgLyAyKTtcbiA4Mjc6XHR9XG4gODI4Olx0XG4gODI5Olx0c3RhdGljIHUzMiBwcmVzdGVyYV9wY2lfZndfYmFyMl9vZmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDgzMDpcdHtcbiA4MzE6XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpID09IDB4MTAwMDAwMClcbiA4MzI6XHRcdFx0cmV0dXJuIDB4NDAwMDAwO1xuIDgzMzpcdFx0ZWxzZVxuIDgzNDpcdFx0XHRyZXR1cm4gMHgwO1xuIDgzNTpcdH1cbiA4MzY6XHRcbiA4Mzc6XHRzdGF0aWMgaW50IHByZXN0ZXJhX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiA4Mzg6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gODM5Olx0e1xuIDg0MDpcdFx0Y29uc3QgY2hhciAqZHJpdmVyX25hbWUgPSBkZXZfZHJpdmVyX3N0cmluZyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gODQxOlx0XHR1OCBfX2lvbWVtICptZW1fYWRkciwgKnBwX2FkZHIgPSBOVUxMO1xuIDg0MjpcdFx0c3RydWN0IHByZXN0ZXJhX2Z3ICpmdztcbiA4NDM6XHRcdGludCBlcnI7XG4gODQ0Olx0XG4gODQ1Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XG4gODQ2Olx0XHRpZiAoZXJyKSB7XG4gODQ3Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxcblwmIzM0Oyk7XG4gODQ4Olx0XHRcdGdvdG8gZXJyX3BjaV9lbmFibGVfZGV2aWNlO1xuIDg0OTpcdFx0fVxuIDg1MDpcdFxuIDg1MTpcdFx0ZXJyID0gcGNpbV9yZXF1ZXN0X2FsbF9yZWdpb25zKHBkZXYsIGRyaXZlcl9uYW1lKTtcbiA4NTI6XHRcdGlmIChlcnIpIHtcbiA4NTM6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cGNpbV9yZXF1ZXN0X2FsbF9yZWdpb25zIGZhaWxlZFxcblwmIzM0Oyk7XG4gODU0Olx0XHRcdGdvdG8gZXJyX3BjaV9yZXF1ZXN0X3JlZ2lvbnM7XG4gODU1Olx0XHR9XG4gODU2Olx0XG4gODU3Olx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzApKTtcbiA4NTg6XHRcdGlmIChlcnIpIHtcbiA4NTk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCB0byBzZXQgRE1BIG1hc2tcXG5cJiMzNDspO1xuIDg2MDpcdFx0XHRnb3RvIGVycl9kbWFfbWFzaztcbiA4NjE6XHRcdH1cbiA4NjI6XHRcbiA4NjM6XHRcdG1lbV9hZGRyID0gcGNpbV9pb21hcChwZGV2LCAyLCAwKTtcbiA4NjQ6XHRcdGlmICghbWVtX2FkZHIpIHtcbiA4NjU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cGNpIG1lbSBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4gODY2Olx0XHRcdGVyciA9IC1FSU87XG4gODY3Olx0XHRcdGdvdG8gZXJyX21lbV9pb3JlbWFwO1xuIDg2ODpcdFx0fVxuIDg2OTpcdFxuIDg3MDpcdFx0LyogQUM1WCBkZXZpY2VzIHVzZSBzZWNvbmQgaGFsZiBvZiBCQVIyICovXG4gODcxOlx0XHRpZiAocHJlc3RlcmFfcGNpX3BwX3VzZV9iYXIyKHBkZXYpKSB7XG4gODcyOlx0XHRcdHBwX2FkZHIgPSBtZW1fYWRkciAmIzQzOyBwcmVzdGVyYV9wY2lfcHBfYmFyMl9vZmZzKHBkZXYpO1xuIDg3MzpcdFx0XHRtZW1fYWRkciA9IG1lbV9hZGRyICYjNDM7IHByZXN0ZXJhX3BjaV9md19iYXIyX29mZnMocGRldik7XG4gODc0Olx0XHR9IGVsc2Uge1xuIDg3NTpcdFx0XHRwcF9hZGRyID0gcGNpbV9pb21hcChwZGV2LCA0LCAwKTtcbiA4NzY6XHRcdFx0aWYgKCFwcF9hZGRyKSB7XG4gODc3Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cHAgcmVncyBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4gODc4Olx0XHRcdFx0ZXJyID0gLUVJTztcbiA4Nzk6XHRcdFx0XHRnb3RvIGVycl9wcF9pb3JlbWFwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA1CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHByZXN0ZXJhX3BjaS5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBgcHJlc3RlcmFfcGNpLmNgIGZpbGUuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHJlc3Qgb2YgaXQuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgUHJlc3RlcmEgYXJjaGl0ZWN0dXJlIGFuZCBQQ0kgaW50ZWdyYXRpb24gaW4gZ2VuZXJhbCwgc28gSSYjMzk7bSBsb29raW5nIGZvciBzcGVjaWZpY3MuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZzoKCiogICAqKkludGVycnVwdCByb3V0aW5nOioqIEhvdyBhcmUgaW50ZXJydXB0cyBmcm9tIHRoZSBQQ0kgYnVzIGJlaW5nIG1hcHBlZCBhbmQgaGFuZGxlZCBieSB0aGUgUHJlc3RlcmEmIzM5O3MgaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXI/IEFyZSB0aGV5IHVzaW5nIE1TSS1YLCBsZWdhY3kgaW50ZXJydXB0cywgb3IgYSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQga2luZCBvZiBpbnRlcnJ1cHQgYWZmaW5pdHkgY29uZmlndXJhdGlvbiBhcmUgdGhleSB1c2luZywgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucywgaWYgYW55PwoqICAgKipETUEgc2V0dXA6KiogSG93IGlzIHRoZSBETUEgZW5naW5lIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSBiZXR3ZWVuIHRoZSBQQ0kgYnVzIGFuZCB0aGUgUHJlc3RlcmEmIzM5O3MgbWVtb3J5IHNwYWNlPyBBcmUgdGhleSB1c2luZyBzY2F0dGVyL2dhdGhlciBsaXN0cz8gV2hhdCBraW5kIG9mIGJ1ZmZlciBtYW5hZ2VtZW50IGlzIGluIHBsYWNlIHRvIGhhbmRsZSBkYXRhIGNvbnNpc3RlbmN5PyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIGxpa2UgY2FjaGUgY29oZXJlbmN5IGhhbmRsaW5nLCBiZWluZyBkb25lPwoqICAgKipBZGRyZXNzIG1hcHBpbmc6KiogSG93IGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9mIHRoZSBQQ0kgZGV2aWNlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBQcmVzdGVyYSYjMzk7cyBtZW1vcnkgbWFwPyBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCB0cmFuc2xhdGlvbiwgb3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGFkZHJlc3Mgd2luZG93aW5nIHNjaGVtZXMgYmVpbmcgdXNlZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZXkgYXJlIGhhbmRsaW5nIGFueSByZXF1aXJlZCBCQVIgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcikgY29uZmlndXJhdGlvbnMuCiogICAqKkVycm9yIGhhbmRsaW5nOioqIFdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gaGFuZGxlIFBDSSBidXMgZXJyb3JzLCBzdWNoIGFzIHBhcml0eSBlcnJvcnMgb3IgdHJhbnNhY3Rpb24gdGltZW91dHM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZXJyb3IgcmVwb3J0aW5nIGZlYXR1cmVzIGJlaW5nIHVzZWQ/CiogICAqKlBvd2VyIG1hbmFnZW1lbnQ6KiogSG93IGlzIHRoZSBQcmVzdGVyYSBkcml2ZXIgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUENJIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IHNwZWNpZmljIHBvd2VyLXNhdmluZyB0ZWNobmlxdWVzIGZvciB0aGUgUENJIGRldmljZT8KCkkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnl0aGluZyB1bnVzdWFsIG9yIGNsZXZlciB0aGV5JiMzOTt2ZSBkb25lOyBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgdGhhdCBtaWdodCBiZSB1bmlxdWUgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHNlZSB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUsIHRoZSBpbmNsdWRlIGZpbGVzLCBhbmQgYW55IHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBiZSBvZiBpbnRlcmVzdC4gT2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODgwOlx0XHRcdH1cbiA4ODE6XHRcdH1cbiA4ODI6XHRcbiA4ODM6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDg4NDpcdFxuIDg4NTpcdFx0ZncgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqZncpLCBHRlBfS0VSTkVMKTtcbiA4ODY6XHRcdGlmICghZncpIHtcbiA4ODc6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA4ODg6XHRcdFx0Z290byBlcnJfcGNpX2Rldl9hbGxvYztcbiA4ODk6XHRcdH1cbiA4OTA6XHRcbiA4OTE6XHRcdGZ3LVx1MDAzZXBjaV9kZXYgPSBwZGV2O1xuIDg5MjpcdFx0ZnctXHUwMDNlZGV2LmN0bF9yZWdzID0gbWVtX2FkZHI7XG4gODkzOlx0XHRmdy1cdTAwM2VkZXYucHBfcmVncyA9IHBwX2FkZHI7XG4gODk0Olx0XHRmdy1cdTAwM2VkZXYuZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gODk1Olx0XG4gODk2Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgZncpO1xuIDg5NzpcdFxuIDg5ODpcdFx0ZXJyID0gcHJlc3RlcmFfZndfaW5pdChmdyk7XG4gODk5Olx0XHRpZiAoZXJyKVxuIDkwMDpcdFx0XHRnb3RvIGVycl9wcmVzdGVyYV9md19pbml0O1xuIDkwMTpcdFxuIDkwMjpcdFx0ZGV2X2luZm8oZnctXHUwMDNlZGV2LmRldiwgXCYjMzQ7UHJlc3RlcmEgRlcgaXMgcmVhZHlcXG5cJiMzNDspO1xuIDkwMzpcdFxuIDkwNDpcdFx0ZnctXHUwMDNld3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7cHJlc3RlcmFfZndfd3FcJiMzNDssIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDEpO1xuIDkwNTpcdFx0aWYgKCFmdy1cdTAwM2V3cSkge1xuIDkwNjpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDkwNzpcdFx0XHRnb3RvIGVycl93cV9hbGxvYztcbiA5MDg6XHRcdH1cbiA5MDk6XHRcbiA5MTA6XHRcdElOSVRfV09SSyhcdTAwMjZmdy1cdTAwM2VldnRfd29yaywgcHJlc3RlcmFfZndfZXZ0X3dvcmtfZm4pO1xuIDkxMTpcdFxuIDkxMjpcdFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIFBDSV9JUlFfTVNJKTtcbiA5MTM6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiA5MTQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TVNJIElSUSBpbml0IGZhaWxlZFxcblwmIzM0Oyk7XG4gOTE1Olx0XHRcdGdvdG8gZXJyX2lycV9hbGxvYztcbiA5MTY6XHRcdH1cbiA5MTc6XHRcbiA5MTg6XHRcdGVyciA9IHJlcXVlc3RfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCBwcmVzdGVyYV9wY2lfaXJxX2hhbmRsZXIsXG4gOTE5Olx0XHRcdFx0ICAwLCBkcml2ZXJfbmFtZSwgZncpO1xuIDkyMDpcdFx0aWYgKGVycikge1xuIDkyMTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsIHRvIHJlcXVlc3QgSVJRXFxuXCYjMzQ7KTtcbiA5MjI6XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4gOTIzOlx0XHR9XG4gOTI0Olx0XG4gOTI1Olx0XHRlcnIgPSBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIoXHUwMDI2ZnctXHUwMDNlZGV2KTtcbiA5MjY6XHRcdGlmIChlcnIpXG4gOTI3Olx0XHRcdGdvdG8gZXJyX3ByZXN0ZXJhX2Rldl9yZWdpc3RlcjtcbiA5Mjg6XHRcbiA5Mjk6XHRcdHJldHVybiAwO1xuIDkzMDpcdFxuIDkzMTpcdGVycl9wcmVzdGVyYV9kZXZfcmVnaXN0ZXI6XG4gOTMyOlx0XHRmcmVlX2lycShwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgZncpO1xuIDkzMzpcdGVycl9yZXF1ZXN0X2lycTpcbiA5MzQ6XHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpO1xuIDkzNTpcdGVycl9pcnFfYWxsb2M6XG4gOTM2Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShmdy1cdTAwM2V3cSk7XG4gOTM3Olx0ZXJyX3dxX2FsbG9jOlxuIDkzODpcdFx0cHJlc3RlcmFfZndfdW5pbml0KGZ3KTtcbiA5Mzk6XHRlcnJfcHJlc3RlcmFfZndfaW5pdDpcbiA5NDA6XHRlcnJfcGNpX2Rldl9hbGxvYzpcbiA5NDE6XHRlcnJfcHBfaW9yZW1hcDpcbiA5NDI6XHRlcnJfbWVtX2lvcmVtYXA6XG4gOTQzOlx0ZXJyX2RtYV9tYXNrOlxuIDk0NDpcdGVycl9wY2lfcmVxdWVzdF9yZWdpb25zOlxuIDk0NTpcdGVycl9wY2lfZW5hYmxlX2RldmljZTpcbiA5NDY6XHRcdHJldHVybiBlcnI7XG4gOTQ3Olx0fVxuIDk0ODpcdFxuIDk0OTpcdHN0YXRpYyB2b2lkIHByZXN0ZXJhX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gOTUwOlx0e1xuIDk1MTpcdFx0c3RydWN0IHByZXN0ZXJhX2Z3ICpmdyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiA5NTI6XHRcbiA5NTM6XHRcdHByZXN0ZXJhX2RldmljZV91bnJlZ2lzdGVyKFx1MDAyNmZ3LVx1MDAzZWRldik7XG4gOTU0Olx0XHRmcmVlX2lycShwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgZncpO1xuIDk1NTpcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7XG4gOTU2Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShmdy1cdTAwM2V3cSk7XG4gOTU3Olx0XHRwcmVzdGVyYV9md191bmluaXQoZncpO1xuIDk1ODpcdH1cbiA5NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRob3NlIGxpbmVzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgQ29kZSBhdCBMaW5lIDk2MCYjNDM7KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBFeGFtaW5pbmcgdGhlIGNvZGUgc3RhcnRpbmcgYXQgbGluZSA5NjDigKYgSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9ycywgdGhlIHVzdWFsIHN1c3BlY3RzLiBXaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgbGlrZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgb3IgbG9vcHM/IFdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyBkZWNsYXJlZCBvciBtb2RpZmllZCBpbiB0aGlzIHNlY3Rpb24/IE15IGluaXRpYWwgc2NhbiBpcyBmb3IgYW55IHVudXN1YWwgcGF0dGVybnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKT2theSwgSSBzZWUuLi4gaXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBbbWVudGlvbiB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aG9zZSBsaW5lczogZGF0YSBwcm9jZXNzaW5nLCBhIHNwZWNpZmljIGFsZ29yaXRobSwgZXRjLl0uIFRoZSBuYW1pbmcgY29udmVudGlvbnMgbG9vayBzdGFuZGFyZCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIGNsZWFuIGNvZGluZy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbG9naWMgZmxvdyBoZXJlLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycz8gQXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaGFuZGxlZCBlZmZpY2llbnRseT8KCkhtbSwgYXQgbGluZSBbbWVudGlvbiBhIGxpbmUgbnVtYmVyIHdpdGhpbiB0aGUgcmFuZ2VdIEkmIzM5O20gc2VlaW5nIGEgcG9zc2libGUgYXJlYSBmb3Igb3B0aW1pemF0aW9uLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBwZXJmb3JtaW5nIFtkZXNjcmliZSB0aGUgYWN0aW9uXSBpbiBhIGxvb3AuIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBzZXQsIHRoaXMgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBraWxsZXIuIFBlcmhhcHMgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gY291bGQgYmUgdXNlZCBoZXJlPyBJJiMzOTttIGdvaW5nIHRvIGJvb2ttYXJrIHRoYXQgbGluZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBhdCBsaW5lIFttZW50aW9uIGFub3RoZXIgbGluZSBudW1iZXIgd2l0aGluIHRoZSByYW5nZV0sIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuLi4gYWgsIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgY29uZGl0aW9uIHdpbGwgYWx3YXlzIGV2YWx1YXRlIGluIHRoZSBpbnRlbmRlZCB3YXk/IFBlcmhhcHMgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBpbnB1dCB2YWx1ZXMgYXJlIGluIHNvbWUgdGVzdHMuIAoKT3ZlcmFsbCwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNvZGUgaXMgcmVsYXRpdmVseSB3ZWxsLXN0cnVjdHVyZWQsIGJ1dCB3aXRoIGEgZmV3IGFyZWFzIHRoYXQgZGVzZXJ2ZSBtb3JlIHNjcnV0aW55LiBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gcnVuIHNvbWUgdGVzdHMgdG8gdmVyaWZ5IHRoZSBhc3N1bXB0aW9ucyBhbmQgbG9vayBpbnRvIHRoYXQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gdGhlc2UgY2hlY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwcmVzdGVyYV9wY2lfZGV2aWNlc1tdID0ge1xuIDk2MTpcdFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEX0FDM1hfOThEWF81NSkgfSxcbiA5NjI6XHRcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBSRVNURVJBX0RFVl9JRF9BQzNYXzk4RFhfNjUpIH0sXG4gOTYzOlx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfQUxEUklOMikgfSxcbiA5NjQ6XHRcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBSRVNURVJBX0RFVl9JRF85OERYNzMxMk0pIH0sXG4gOTY1Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MDApIH0sXG4gOTY2Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MDEpIH0sXG4gOTY3Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MTApIH0sXG4gOTY4Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MjApIH0sXG4gOTY5Olx0XHR7IH1cbiA5NzA6XHR9O1xuIDk3MTpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwcmVzdGVyYV9wY2lfZGV2aWNlcyk7XG4gOTcyOlx0XG4gOTczOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByZXN0ZXJhX3BjaV9kcml2ZXIgPSB7XG4gOTc0Olx0XHQubmFtZSAgICAgPSBcJiMzNDtQcmVzdGVyYSBEWFwmIzM0OyxcbiA5NzU6XHRcdC5pZF90YWJsZSA9IHByZXN0ZXJhX3BjaV9kZXZpY2VzLFxuIDk3NjpcdFx0LnByb2JlICAgID0gcHJlc3RlcmFfcGNpX3Byb2JlLFxuIDk3NzpcdFx0LnJlbW92ZSAgID0gcHJlc3RlcmFfcGNpX3JlbW92ZSxcbiA5Nzg6XHR9O1xuIDk3OTpcdG1vZHVsZV9wY2lfZHJpdmVyKHByZXN0ZXJhX3BjaV9kcml2ZXIpO1xuIDk4MDpcdFxuIDk4MTpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4gOTgyOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01hcnZlbGwgUHJlc3RlcmEgc3dpdGNoIFBDSSBpbnRlcmZhY2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBQcmVzdGVyYSBIVyBDb3VudGVyIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZGVlcCBpbnRvIHRoaXMgUHJlc3RlcmEgY29kZSwgYW5kIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIGhhcmR3YXJlIGNvdW50ZXJzIGFyZSBiZWluZyBhY2Nlc3NlZCBhbmQgbWFuYWdlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIHBsYWNlcywgYmV5b25kIHdoYXQgSSYjMzk7dmUgYWxyZWFkeSB1bmNvdmVyZWQsIHdoZXJlIGBwcmVzdGVyYV9od19jb3VudGVyc19nZXRgLCBgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrYCwgb3IgYW55IG90aGVyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQcmVzdGVyYSBidXMgb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbnMgYXJlIGhhcHBlbmluZz8gSSBuZWVkIHRvIGJlICpzdXJlKiBJJiMzOTttIHNlZWluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgY2FuJiMzOTt0IGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZCwgeW91IGtub3c/CgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgZm9jdXNlZCBgZ3JlcHBlcmAgc2Vzc2lvbi4gSSB3YW50IHRvIHVuY292ZXIgZXZlcnkgaW5zdGFuY2UsIGV2ZXJ5IGNhbGwsIGV2ZXJ5IHJlZ2lzdHJhdGlvbiwgYW5kIGV2ZXJ5IHBvaW50IG9mIGFjY2Vzcy4gV2UgbmVlZCBhIGNvbXByZWhlbnNpdmUgdmlldyBoZXJlLCBhbmQgZ3JlcHBpbmcgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGxpc3QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYS5oPTM0NT1zdGF0aWMgaW5saW5lIHUzMiBwcmVzdGVyYV9yZWFkKGNvbnN0IHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaC0zNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhLmg6MzUxOmludCBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHByZXN0ZXJhX2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaC0zNTItdm9pZCBwcmVzdGVyYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgcHJlc3RlcmFfZGV2aWNlICpkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jPTE0NTI9c3RhdGljIHZvaWQgcHJlc3RlcmFfc3dpdGNoX2Zpbmkoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjE0NzA6aW50IHByZXN0ZXJhX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcHJlc3RlcmFfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYy0xNDcxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYy0xNDg5LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjE0OTA6RVhQT1JUX1NZTUJPTChwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ5MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jPTgzNz1zdGF0aWMgaW50IHByZXN0ZXJhX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jLTkyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmM6OTI1Olx0ZXJyID0gcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmZ3LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jLTkyNi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjc2CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDgyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBgcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgYHByZXN0ZXJhX3BjaV9wcm9iZWAsIHdoaWNoLCBhcyBJIGtub3csIGlzIHRoZSBQQ0kgZHJpdmVyIGZvciB0aGUgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRob3NlIHNwZWNpZmljIEFTSUNzIOKAkyBBbGRyaW4sIEFDM1gsIEFDNVgsIHRoZSB1c3VhbCBzdXNwZWN0cy4gVGhpcyBpc24mIzM5O3Qgc29tZSBnZW5lcmljIG5ldHdvcmsgY2FyZDsgaXQmIzM5O3MgYSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gQ3J1Y2lhbGx5LCB0aGlzIGRyaXZlciBuZWVkcyB0byBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBBU0lDIHRocm91Z2ggUENJZSBhbmQgaW52b2x2ZXMgcGh5c2ljYWwgZmlybXdhcmUgbG9hZGluZyAoYHByZXN0ZXJhX2Z3X2luaXRgLCBzcGVjaWZpY2FsbHkpLiBXZSBkb3dubG9hZCBmaXJtd2FyZSwgd2FpdCBmb3IgaXQgdG8gYm9vdCwgYW5kIGNvbW11bmljYXRlIHZpYSBtYWlsYm94ZXMgb3IgUENJZSBCQVJzLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGF0IHNlY29uZCBzZWN0aW9uIG9mIHRoZSBwcm9tcHQsIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDs6ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEJpbmdvLiBUaGUgTWFydmVsbCBQcmVzdGVyYSBkcml2ZXIgZml0cyB0aGF0ICpwZXJmZWN0bHkqLiBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggQVNJQyBkcml2ZXIgcmVsaWFudCBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gTm8gd2F5IHRoaXMgcnVucyB3aXRob3V0IHRoYXQuCgpTbywgd2hlcmUgYXJlIHRoZSBjaGFuZ2VzPyBDaGVja2luZyB0aGUgZmlsZXM6IGBwcmVzdGVyYV9jb3VudGVyLmNgLCBgcHJlc3RlcmFfaHcuY2AsIGFuZCBgcHJlc3RlcmFfaHcuaGAuIEFsbCB0dWNrZWQgbmVhdGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9gLiBUaGlzIGlzIGdvb2Q7IHN0cmljdGx5IHdpdGhpbiB0aGUgZGVzaWduYXRlZCBkcml2ZXIgZGlyZWN0b3J5LiBUaGVzZSBjaGFuZ2VzIGFyZSBhZGRyZXNzaW5nIGEgYnVmZmVyIG92ZXJmbG93IGlzc3VlIHJlbGF0ZWQgdG8gcmVhZGluZyBjb3VudGVyIHN0YXRzIGZyb20gaGFyZHdhcmUgcmVzcG9uc2VzLiBFc3NlbnRpYWxseSwgdGhlcmUmIzM5O3MgYSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0eS4gVGhpcyBjb2RlICpvbmx5KiBleGVjdXRlcyB3aGVuIHRoZSBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBpcyBjb25uZWN0ZWQgdmlhIFBDSWUgYW5kIHN1Y2Nlc3NmdWxseSBwcm9iZWQuCgpUaGVyZWZvcmUsIHRoaXMgZmFsbHMgZGlyZWN0bHkgdW5kZXIgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgSXQgY2FuJiMzOTt0IGJlIGVtdWxhdGVkIG9yIGluc3RhbnRpYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIEl0ICpuZWVkcyogdGhhdCBwaHlzaWNhbCBBU0lDLgoKQ29uc2VxdWVudGx5LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLgoKRm9yIGBzZXQtcmVzdWx0c2AsIGhlcmUgYXJlIHRoZSBwYXJhbWV0ZXJzOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBpcyBmYWxzZSkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBpcyBmYWxzZSkKKiAgIGBSZWFzb25pbmdgOiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgbGltaXRlZCB0byB0aGUgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL2ApLCBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgbmVjZXNzaXRhdGVzIHBoeXNpY2FsIE1hcnZlbGwgUHJlc3RlcmEgUENJZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbm90IHNpbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyByZW5kZXJzIHRoZSBhbHRlcmVkIGNvZGUgc3RydWN0dXJhbGx5IGluYWNjZXNzaWJsZS4KCkkgc3VwcG9zZSwgZm9yIGdvb2QgbWVhc3VyZSwgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGNvbmZpZ3MuIGBQUkVTVEVSQWAgYW5kIGBQUkVTVEVSQV9QQ0lgLiBCdXQsIGFzIEkgc2FpZCwgc2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHkuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIE1hcnZlbGwgUHJlc3RlcmEgUENJZSBzd2l0Y2ggaGFyZHdhcmUgYW5kIGZpcm13YXJlIGxvYWRpbmcgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMjo0Ny40NDcyOTQ3NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg5NzIyNTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS8pLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBQcmVzdGVyYSBQQ0llIHN3aXRjaCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbG9hZGluZyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMjo0Ny40NDczMDEzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzY1MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2MWFhOWU1Mjk5YmZjOGEyMDhjYThmN2UzMjRkNTg5ODM2MTQ3ZjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjE6MjI6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xcbmluZGV4IDNhNzYyZDE3YmE2YzYuLmYyNjExMDQ3MjllOTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xcbkBAIC0zNDIsNiArMzQyLDcgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dTMyIHJlc2NoZWRfdGltZSA9IENPVU5URVJfUE9MTF9USU1FO1xcbiBcXHR1MzIgY291bnQgPSBDT1VOVEVSX0JVTEtfU0laRTtcXG4gXFx0Ym9vbCBkb25lID0gZmFsc2U7XFxuK1xcdHUzMiByZW1haW5pbmc7XFxuIFxcdGludCBlcnI7XFxuIFxcdHUzMiBpO1xcbiBcXG5AQCAtMzY4LDEwICszNjksMTIgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0Z290byByZXNjaGVkO1xcbiBcXHR9XFxuIFxcbitcXHRyZW1haW5pbmcgPSBibG9jay1cXHUwMDNlbnVtX2NvdW50ZXJzIC0gY291bnRlci1cXHUwMDNldG90YWxfcmVhZDtcXG4gXFx0cHJlc3RlcmFfY291bnRlcl9ibG9ja19sb2NrKGJsb2NrKTtcXG4gXFx0ZXJyID0gcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KGNvdW50ZXItXFx1MDAzZXN3LCBjb3VudGVyLVxcdTAwM2V0b3RhbF9yZWFkLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNvdW50LCBcXHUwMDI2ZG9uZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZibG9jay1cXHUwMDNlc3RhdHNbY291bnRlci1cXHUwMDNldG90YWxfcmVhZF0pO1xcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJsb2NrLVxcdTAwM2VzdGF0c1tjb3VudGVyLVxcdTAwM2V0b3RhbF9yZWFkXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHJlbWFpbmluZyk7XFxuIFxcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfdW5sb2NrKGJsb2NrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBhYm9ydDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jXFxuaW5kZXggNzY5NWNiYjJjZTYyNi4uMmU1Y2ZmZWZlYTcwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcXG5AQCAtMjMwNSw3ICsyMzA1LDggQEAgaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfYWJvcnQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpXFxuIFxcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxcbiBcXHRcXHRcXHQgICAgIHUzMiAqbGVuLCBib29sICpkb25lLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzICpzdGF0cylcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXFxuK1xcdFxcdFxcdCAgICAgdTMyIHN0YXRzX2xlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHJlc3RlcmFfbXNnX2NvdW50ZXJfcmVzcCAqcmVzcDtcXG4gXFx0c3RydWN0IHByZXN0ZXJhX21zZ19jb3VudGVyX3JlcSByZXEgPSB7XFxuQEAgLTIzMjQsNiArMjMyNSwxMSBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGZyZWVfYnVmZjtcXG4gXFxuK1xcdGlmIChfX2xlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW51bV9jb3VudGVycykgXFx1MDAzZSBtaW4oKmxlbiwgc3RhdHNfbGVuKSkge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGZyZWVfYnVmZjtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fbGUzMl90b19jcHUocmVzcC1cXHUwMDNlbnVtX2NvdW50ZXJzKTsgaSsrKSB7XFxuIFxcdFxcdHN0YXRzW2ldLnBhY2tldHMgKz0gX19sZTY0X3RvX2NwdShyZXNwLVxcdTAwM2VzdGF0c1tpXS5wYWNrZXRzKTtcXG4gXFx0XFx0c3RhdHNbaV0uYnl0ZXMgKz0gX19sZTY0X3RvX2NwdShyZXNwLVxcdTAwM2VzdGF0c1tpXS5ieXRlcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxcbmluZGV4IDBhOTI5Mjc5ZTFjZWEuLjJlOWFjZWI3YTEzNmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXFxuQEAgLTIzNSw3ICsyMzUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl90cmlnZ2VyKHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgYmxvY2tfaWQpO1xcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9hYm9ydChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdyk7XFxuIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXFxuIFxcdFxcdFxcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IHByZXN0ZXJhX2NvdW50ZXJfc3RhdHMgKnN0YXRzKTtcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXFxuK1xcdFxcdFxcdCAgICAgdTMyIHN0YXRzX2xlbik7XFxuIGludCBwcmVzdGVyYV9od19jb3VudGVyX2Jsb2NrX2dldChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdyxcXG4gXFx0XFx0XFx0XFx0ICB1MzIgY2xpZW50LCB1MzIgKmJsb2NrX2lkLCB1MzIgKm9mZnNldCxcXG4gXFx0XFx0XFx0XFx0ICB1MzIgKm51bV9jb3VudGVycyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIyOjQ3Ljk1NTY3NjAzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjMzODg4MzEwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS8pLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBQcmVzdGVyYSBQQ0llIHN3aXRjaCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbG9hZGluZyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MWFhOWU1Mjk5YmZjOGEyMDhjYThmN2UzMjRkNTg5ODM2MTQ3ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMToyMjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNcbmluZGV4IDNhNzYyZDE3YmE2YzYuLmYyNjExMDQ3MjllOTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNcbkBAIC0zNDIsNiArMzQyLDcgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHUzMiByZXNjaGVkX3RpbWUgPSBDT1VOVEVSX1BPTExfVElNRTtcbiBcdHUzMiBjb3VudCA9IENPVU5URVJfQlVMS19TSVpFO1xuIFx0Ym9vbCBkb25lID0gZmFsc2U7XG4rXHR1MzIgcmVtYWluaW5nO1xuIFx0aW50IGVycjtcbiBcdHUzMiBpO1xuIFxuQEAgLTM2OCwxMCArMzY5LDEyIEBAIHN0YXRpYyB2b2lkIHByZXN0ZXJhX2NvdW50ZXJfc3RhdHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdGdvdG8gcmVzY2hlZDtcbiBcdH1cbiBcbitcdHJlbWFpbmluZyA9IGJsb2NrLVx1MDAzZW51bV9jb3VudGVycyAtIGNvdW50ZXItXHUwMDNldG90YWxfcmVhZDtcbiBcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfbG9jayhibG9jayk7XG4gXHRlcnIgPSBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoY291bnRlci1cdTAwM2VzdywgY291bnRlci1cdTAwM2V0b3RhbF9yZWFkLFxuIFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvdW50LCBcdTAwMjZkb25lLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmJsb2NrLVx1MDAzZXN0YXRzW2NvdW50ZXItXHUwMDNldG90YWxfcmVhZF0pO1xuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmJsb2NrLVx1MDAzZXN0YXRzW2NvdW50ZXItXHUwMDNldG90YWxfcmVhZF0sXG4rXHRcdFx0XHQgICAgICAgcmVtYWluaW5nKTtcbiBcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfdW5sb2NrKGJsb2NrKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gYWJvcnQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jXG5pbmRleCA3Njk1Y2JiMmNlNjI2Li4yZTVjZmZlZmVhNzAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcbkBAIC0yMzA1LDcgKzIzMDUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9hYm9ydChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcbiBcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxuIFx0XHRcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpXG4rXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXG4rXHRcdFx0ICAgICB1MzIgc3RhdHNfbGVuKVxuIHtcbiBcdHN0cnVjdCBwcmVzdGVyYV9tc2dfY291bnRlcl9yZXNwICpyZXNwO1xuIFx0c3RydWN0IHByZXN0ZXJhX21zZ19jb3VudGVyX3JlcSByZXEgPSB7XG5AQCAtMjMyNCw2ICsyMzI1LDExIEBAIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfYnVmZjtcbiBcbitcdGlmIChfX2xlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbnVtX2NvdW50ZXJzKSBcdTAwM2UgbWluKCpsZW4sIHN0YXRzX2xlbikpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBmcmVlX2J1ZmY7XG4rXHR9XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBfX2xlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbnVtX2NvdW50ZXJzKTsgaSsrKSB7XG4gXHRcdHN0YXRzW2ldLnBhY2tldHMgKz0gX19sZTY0X3RvX2NwdShyZXNwLVx1MDAzZXN0YXRzW2ldLnBhY2tldHMpO1xuIFx0XHRzdGF0c1tpXS5ieXRlcyArPSBfX2xlNjRfdG9fY3B1KHJlc3AtXHUwMDNlc3RhdHNbaV0uYnl0ZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuaW5kZXggMGE5MjkyNzllMWNlYS4uMmU5YWNlYjdhMTM2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXG5AQCAtMjM1LDcgKzIzNSw4IEBAIGludCBwcmVzdGVyYV9od19jb3VudGVyX3RyaWdnZXIoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBibG9ja19pZCk7XG4gaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfYWJvcnQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpO1xuIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXG4gXHRcdFx0ICAgICB1MzIgKmxlbiwgYm9vbCAqZG9uZSxcbi1cdFx0XHQgICAgIHN0cnVjdCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzICpzdGF0cyk7XG4rXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXG4rXHRcdFx0ICAgICB1MzIgc3RhdHNfbGVuKTtcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9ibG9ja19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csXG4gXHRcdFx0XHQgIHUzMiBjbGllbnQsIHUzMiAqYmxvY2tfaWQsIHUzMiAqb2Zmc2V0LFxuIFx0XHRcdFx0ICB1MzIgKm51bV9jb3VudGVycyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMjo0Ny45NTU3MDMxNTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzA2NzM0NTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IE5ldHdvcmsgRHJpdmVyIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLCBidXQgZmlyc3QsIEkgbmVlZCBhIGxpdHRsZSBjb250ZXh0IHRvIG1ha2UgYSBwcm9wZXIgZXZhbHVhdGlvbi4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmhgLiBBbHJpZ2h0LCB0aGUgYG1hcnZlbGwvcHJlc3RlcmFgIGRpcmVjdG9yeS4gTm93LCB3aGF0ICppcyogdGhpcyBkcml2ZXIgcHJlY2lzZWx5PyBJcyBpdCBhIGRyaXZlciBmb3IgYSAqcmVhbCogcGh5c2ljYWwgc3dpdGNoLCBvciBjb3VsZCB0aGlzIGJlIHNvbWV0aGluZyB0aGF0J3MgZW11bGF0ZWQgb3IgdmlydHVhbGl6ZWQgc29tZWhvdz8gVGhhdCdzIGdvaW5nIHRvIGluZm9ybSBhIGxvdCBvZiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS4gVGltZSB0byByZWFjaCBmb3IgYGdyZXBwZXJgIChvciBgcmVhZC1maWxlYCBpZiB0aGUgc2l0dWF0aW9uIGNhbGxzIGZvciBpdCkgYW5kIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBQUkVTVEVSQSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgaW4gdGhlIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBnaXZlIG1lIHRoYXQgY3J1Y2lhbCBpbnNpZ2h0IGludG8gdGhlIGhhcmR3YXJlIHRoaXMgYWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjAxLjAyMzA1MTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDQ0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVTVEVSQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzo2OmNvbmZpZyBQUkVTVEVSQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxODpjb25maWcgUFJFU1RFUkFfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzowMS4wNzg1MDExOTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDEwMTExMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgUHJlc3RlcmEgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGlzIEtjb25maWcgZmlsZSBpcyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIE1hcnZlbGwncyBQcmVzdGVyYSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVycyBhcmUgZGVmaW5lZC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlcidzIGZlYXR1cmVzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0cyBmb3IgdmFyaW91cyBQcmVzdGVyYS1zcGVjaWZpYyBmZWF0dXJlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ2hpcHNldCBTZWxlY3Rpb246KiogSG93IGFyZSB0aGUgZGlmZmVyZW50IFByZXN0ZXJhIHN3aXRjaCB2YXJpYW50cyBoYW5kbGVkPyBJcyB0aGVyZSBhIHRvcC1sZXZlbCBzeW1ib2wgZm9yIGNob29zaW5nIHRoZSBzcGVjaWZpYyBjaGlwc2V0IGZhbWlseT8gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHM/XG4qICAgKipGZWF0dXJlIEZsYWdzOioqIFdoYXQgZmluZS1ncmFpbmVkIGZlYXR1cmVzIGFyZSBjb25maWd1cmFibGU/IFRoaW5ncyBsaWtlIFZMQU4gc3VwcG9ydCwgUW9TLCBsaW5rIGFnZ3JlZ2F0aW9uIChMQUcvTEFDUCksIHNlY3VyaXR5IGZlYXR1cmVzLCBvciBoYXJkd2FyZSBvZmZsb2FkcyBhcmUgb2YgaW50ZXJlc3QuIEknbGwgbG9vayBmb3Igc3ltYm9scyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGNhcGFiaWxpdGllcy5cbiogICAqKkRyaXZlciBNb2R1bGVzOioqIElzIHRoZSBkcml2ZXIgY29tcGlsZWQgYXMgYSBtb2R1bGUsIG9yIGJ1aWx0LWluIHRvIHRoZSBrZXJuZWw/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhcHByb2FjaD9cbiogICAqKkJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIG90aGVyIGRyaXZlcnMsIHN1Y2ggYXMgUEhZIGRyaXZlcnMgb3IgTURJTz8gSG93IGFyZSB0aGV5IGhhbmRsZWQgaW4gdGhlIEtjb25maWc/XG4qICAgKipEb2N1bWVudGF0aW9uOioqIEknbSBob3BpbmcgdGhlIGhlbHAgdGV4dHMgYXJlIGNsZWFyIGFuZCBpbmZvcm1hdGl2ZS4gR29vZCBLY29uZmlnIGZpbGVzIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgZm9yIGFuIGVuZ2luZWVyIHRvIHVuZGVyc3RhbmQgd2hhdCBhIHN5bWJvbCAqZG9lcyogYW5kIHdoZW4gaXQgc2hvdWxkIGJlIGVuYWJsZWQuIElmIHRoZSBkb2N1bWVudGF0aW9uIGlzIG1pc3NpbmcsIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGNvZGUuXG4qICAgKipEZWZhdWx0czoqKiBJJ2xsIG5vdGUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdHMgZ2l2ZXMgYW4gaW5zaWdodCBpbnRvIGhvdyB0aGUgZW5naW5lZXJzIGV4cGVjdCB0aGUgZHJpdmVyIHRvIGJlIHVzZWQgbW9zdCBjb21tb25seS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgc2VlIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGRyaXZlciBkZXNpZ24uIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IEkgY291bGQgYnVpbGQgYW5kIGFkYXB0IHRoaXMgZHJpdmVyIGZvciBhIHNwZWNpZmljIHVzZSBjYXNlIG9yIGhhcmR3YXJlIHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MDkuNDg4NjE2MjgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1hcnZlbGwgUHJlc3RlcmEgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQUkVTVEVSQVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUNzIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9TV0lUQ0hERVYgXFx1MDAyNlxcdTAwMjYgVkxBTl84MDIxUVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cXG4gIDEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTE6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHJlc3RlcmEuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBQUkVTVEVSQV9QQ0lcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5XFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IFBSRVNURVJBXFxuICAyMTpcXHRcXHRkZWZhdWx0IFBSRVNURVJBXFxuICAyMjpcXHRcXHRoZWxwXFxuICAyMzpcXHRcXHQgIFRoaXMgaXMgaW1wbGVtZW50YXRpb24gb2YgUENJIGludGVyZmFjZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIFByZXN0ZXJhXFxuICAyNDpcXHRcXHQgIFN3aXRjaCBBU0lDcyBmYW1pbHkuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyNzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcmVzdGVyYV9wY2kuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjA5LjQ4ODY4Njg1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NDU3OTUyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUNzLiBSaWdodCwgSSBrbm93IHRob3NlIOKAkyB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIEFTSUNzLCBzaW1pbGFyIHRvIHRoZSBNZWxsYW5veCBTd2l0Y2hYL1NwZWN0cnVtIEFTSUNzLiBKdXN0IGxpa2UgbWx4c3csIHRoZSBtZW50aW9uIG9mIHdoaWNoIGltbWVkaWF0ZWx5IGJyaW5ncyB0aGUgY29udGV4dCBvZiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgaW50byBzaGFycCByZWxpZWYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGludG8gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQgdG8gc2VlIGlmIHRoaXMgZml0cyB0aGUgcHJvZmlsZSBvZiBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiLiBUaGUgcHJvbXB0IGV4cGxpY2l0bHkgbGlzdHMgZXhhbXBsZXMgbGlrZSBtbHhzdywgd2hpY2ggYXJlIFBDSS1iYXNlZCBhbmQgb2Z0ZW4gbGFja2luZyBmdWxsIGVtdWxhdGVkIHN1cHBvcnQuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBQcmVzdGVyYSBoYXMgYW55IHNvcnQgb2YgdmlydHVhbCwgbW9jaywgb3IgZW11bGF0ZWQgY2FwYWJpbGl0eS4gT3IsIGlzIGl0IGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcnVubmluZyBvbiBwaHlzaWNhbCBoYXJkd2FyZSBQQ0kgZGV2aWNlcz8gVGhhdCdzIHRoZSBjcnV4IG9mIHRoaXMuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGhhcmR3YXJlIHRoYXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdG8gZnVuY3Rpb24uIFRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHdlIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzoxMy4wMzQ0ODYwODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczODI4NzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MTMuMTAxODgxNjE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAxODMwOTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBleGFtaW5pbmcgdGhvc2UgZmlsZXM6XG5cbioqRGl2aW5nIGludG8gdGhlIE1hcnZlbGwgUHJlc3RlcmEgRXRoZXJuZXQgRHJpdmVycyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgbG9vayBhdCB0aGUgTWFydmVsbCBQcmVzdGVyYSBFdGhlcm5ldCBkcml2ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYWAuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkcml2ZXIgY29kZSBmb3IgdGhlIE1hcnZlbGwgUHJlc3RlcmEgc2VyaWVzIG9mIHN3aXRjaCBjaGlwcywgbmF0dXJhbGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgaXQg4oCTIHdoYXQgbW9kdWxlcyBhcmUgcHJlc2VudCwgd2hhdCBhYnN0cmFjdGlvbiBsYXllcnMgdGhleSBhcmUgdXNpbmcsIGFuZCB0aGUgbGV2ZWwgb2YgaW50ZWdyYXRpb24gd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjay4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIExpbnV4IG5ldGRldiBpbnRlcmZhY2U/IEFyZSB0aGVyZSBjdXN0b20gZXh0ZW5zaW9ucz8gQXJlIHRoZXkgZW1wbG95aW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpbiBzb21lIGNsZXZlciB3YXk/IFRoZSBmaWxlIG9yZ2FuaXphdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgY2x1ZXMuIExldCdzIHNlZSBpZiB0aGVyZSBpcyBhbnkgb2J2aW91cyBkZXNpZ24gcGF0dGVybiBvciBkb2N1bWVudGF0aW9uLCBvciB3aGV0aGVyIEkgd2lsbCBoYXZlIHRvIGRpdmUgaW50byB0aGUgY29kZSB0byByZXZlcnNlIGVuZ2luZWVyIHRoZSBhcmNoaXRlY3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBzcGVjaWZpYyBQcmVzdGVyYS1yZWxhdGVkIGRlZmluZXMgb3Igc3RydWN0dXJlcy4gVWx0aW1hdGVseSwgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFuZCBob3cgd2VsbCBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyBjYXBhYmlsaXRpZXMgYW5kIGhvdyBpdCBwb3RlbnRpYWxseSBwZXJmb3JtcyBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgbGlzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjE2LjEyMDE5Mjk1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJwcmVzdGVyYS5oXCIsXG4gICAgXCJwcmVzdGVyYV9hY2wuY1wiLFxuICAgIFwicHJlc3RlcmFfYWNsLmhcIixcbiAgICBcInByZXN0ZXJhX2NvdW50ZXIuY1wiLFxuICAgIFwicHJlc3RlcmFfY291bnRlci5oXCIsXG4gICAgXCJwcmVzdGVyYV9kZXZsaW5rLmNcIixcbiAgICBcInByZXN0ZXJhX2RldmxpbmsuaFwiLFxuICAgIFwicHJlc3RlcmFfZHNhLmNcIixcbiAgICBcInByZXN0ZXJhX2RzYS5oXCIsXG4gICAgXCJwcmVzdGVyYV9ldGh0b29sLmNcIixcbiAgICBcInByZXN0ZXJhX2V0aHRvb2wuaFwiLFxuICAgIFwicHJlc3RlcmFfZmxvdy5jXCIsXG4gICAgXCJwcmVzdGVyYV9mbG93LmhcIixcbiAgICBcInByZXN0ZXJhX2Zsb3dlci5jXCIsXG4gICAgXCJwcmVzdGVyYV9mbG93ZXIuaFwiLFxuICAgIFwicHJlc3RlcmFfaHcuY1wiLFxuICAgIFwicHJlc3RlcmFfaHcuaFwiLFxuICAgIFwicHJlc3RlcmFfbWFpbi5jXCIsXG4gICAgXCJwcmVzdGVyYV9tYXRjaGFsbC5jXCIsXG4gICAgXCJwcmVzdGVyYV9tYXRjaGFsbC5oXCIsXG4gICAgXCJwcmVzdGVyYV9wY2kuY1wiLFxuICAgIFwicHJlc3RlcmFfcm91dGVyLmNcIixcbiAgICBcInByZXN0ZXJhX3JvdXRlcl9ody5jXCIsXG4gICAgXCJwcmVzdGVyYV9yb3V0ZXJfaHcuaFwiLFxuICAgIFwicHJlc3RlcmFfcnh0eC5jXCIsXG4gICAgXCJwcmVzdGVyYV9yeHR4LmhcIixcbiAgICBcInByZXN0ZXJhX3NwYW4uY1wiLFxuICAgIFwicHJlc3RlcmFfc3Bhbi5oXCIsXG4gICAgXCJwcmVzdGVyYV9zd2l0Y2hkZXYuY1wiLFxuICAgIFwicHJlc3RlcmFfc3dpdGNoZGV2LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MTYuMTIwMjc3OTQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0ODU4OTI5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgYHByZXN0ZXJhX3BjaS5jYCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGlzc3VlIGxpa2VseSByZXNpZGVzIHdpdGhpbiB0aGUgYHByZXN0ZXJhX3BjaS5jYCBmaWxlLiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgUENJIGRyaXZlciBmb3IgdGhlIFByZXN0ZXJhIHN3aXRjaCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgdXNlZCB0byBwcm9ncmFtIGFuZCBhY2Nlc3MgdGhlIGRldmljZSByZWdpc3RlcnMuIFRpbWUgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIG1hcHBpbmcuIEknbGwgZm9jdXMgb24gaG93IHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBiZWluZyB1c2VkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzdWJ0bGUgdGltaW5nIGlzc3Vlcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBtb2R1bGU7IG1heWJlIHRoZXJlJ3MgYSBjbHVlIHRoZXJlIGFib3V0IGhvdyB0aGluZ3MgYXJlIGZhaWxpbmcuIExldCdzIHNlZSBpZiB0aGUgbG9ncyBoYXZlIHNvbWUgcG9pbnRlcnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpc3N1ZXMgd2l0aCBpbnRlcnJ1cHQgbGluZXMgb3IgYWNrbm93bGVkZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjE5LjYwNjE3MzM4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgT1IgR1BMLTIuMFxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZCAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jaXJjX2J1Zi5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICAxMjpcXHRcXG4gIDEzOlxcdCNpbmNsdWRlIFxcXCJwcmVzdGVyYS5oXFxcIlxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjZGVmaW5lIFBSRVNURVJBX01TR19NQVhfU0laRSAxNTAwXFxuICAxNjpcXHRcXG4gIDE3OlxcdCNkZWZpbmUgUFJFU1RFUkFfU1VQUF9GV19NQUpfVkVSXFx0NFxcbiAgMTg6XFx0I2RlZmluZSBQUkVTVEVSQV9TVVBQX0ZXX01JTl9WRVJcXHQxXFxuICAxOTpcXHRcXG4gIDIwOlxcdCNkZWZpbmUgUFJFU1RFUkFfUFJFVl9GV19NQUpfVkVSXFx0NFxcbiAgMjE6XFx0I2RlZmluZSBQUkVTVEVSQV9QUkVWX0ZXX01JTl9WRVJcXHQwXFxuICAyMjpcXHRcXG4gIDIzOlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfUEFUSF9GTVRcXHRcXFwibXJ2bC9wcmVzdGVyYS9tdnN3X3ByZXN0ZXJhX2Z3LXYldS4ldS5pbWdcXFwiXFxuICAyNDpcXHQjZGVmaW5lIFBSRVNURVJBX0ZXX0FSTTY0X1BBVEhfRk1UIFxcXCJtcnZsL3ByZXN0ZXJhL212c3dfcHJlc3RlcmFfZndfYXJtNjQtdiV1LiV1LmltZ1xcXCJcXG4gIDI1OlxcdFxcbiAgMjY6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19IRFJfTUFHSUNcXHRcXHQweDM1MUQ5RDA2XFxuICAyNzpcXHQjZGVmaW5lIFBSRVNURVJBX0ZXX0RMX1RJTUVPVVRfTVNcXHQ1MDAwMFxcbiAgMjg6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19CTEtfU1pcXHRcXHQxMDI0XFxuICAyOTpcXHRcXG4gIDMwOlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfVkVSX01BSl9NVUwgMTAwMDAwMFxcbiAgMzE6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19WRVJfTUlOX01VTCAxMDAwXFxuICAzMjpcXHRcXG4gIDMzOlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfVkVSX01BSih2KVxcdCgodikgLyBQUkVTVEVSQV9GV19WRVJfTUFKX01VTClcXG4gIDM0OlxcdFxcbiAgMzU6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19WRVJfTUlOKHYpIFxcXFxcXG4gIDM2OlxcdFxcdCgoKHYpIC0gKFBSRVNURVJBX0ZXX1ZFUl9NQUoodikgKiBQUkVTVEVSQV9GV19WRVJfTUFKX01VTCkpIC8gXFxcXFxcbiAgMzc6XFx0XFx0XFx0XFx0UFJFU1RFUkFfRldfVkVSX01JTl9NVUwpXFxuICAzODpcXHRcXG4gIDM5OlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfVkVSX1BBVENIKHYpIFxcXFxcXG4gIDQwOlxcdFxcdCgodikgLSAoUFJFU1RFUkFfRldfVkVSX01BSih2KSAqIFBSRVNURVJBX0ZXX1ZFUl9NQUpfTVVMKSAtIFxcXFxcXG4gIDQxOlxcdFxcdFxcdFxcdChQUkVTVEVSQV9GV19WRVJfTUlOKHYpICogUFJFU1RFUkFfRldfVkVSX01JTl9NVUwpKVxcbiAgNDI6XFx0XFxuICA0MzpcXHRlbnVtIHByZXN0ZXJhX3BjaV9iYXJfdCB7XFxuICA0NDpcXHRcXHRQUkVTVEVSQV9QQ0lfQkFSX0ZXID0gMixcXG4gIDQ1OlxcdFxcdFBSRVNURVJBX1BDSV9CQVJfUFAgPSA0LFxcbiAgNDY6XFx0fTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0c3RydWN0IHByZXN0ZXJhX2Z3X2hlYWRlciB7XFxuICA0OTpcXHRcXHRfX2JlMzIgbWFnaWNfbnVtYmVyO1xcbiAgNTA6XFx0XFx0X19iZTMyIHZlcnNpb25fdmFsdWU7XFxuICA1MTpcXHRcXHR1OCByZXNlcnZlZFs4XTtcXG4gIDUyOlxcdH07XFxuICA1MzpcXHRcXG4gIDU0OlxcdHN0cnVjdCBwcmVzdGVyYV9sZHJfcmVncyB7XFxuICA1NTpcXHRcXHR1MzIgbGRyX3JlYWR5O1xcbiAgNTY6XFx0XFx0dTMyIHBhZDE7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHUzMiBsZHJfaW1nX3NpemU7XFxuICA1OTpcXHRcXHR1MzIgbGRyX2N0bF9mbGFncztcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0dTMyIGxkcl9idWZfb2ZmcztcXG4gIDYyOlxcdFxcdHUzMiBsZHJfYnVmX3NpemU7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHUzMiBsZHJfYnVmX3JkO1xcbiAgNjU6XFx0XFx0dTMyIHBhZDI7XFxuICA2NjpcXHRcXHR1MzIgbGRyX2J1Zl93cjtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0dTMyIGxkcl9zdGF0dXM7XFxuICA2OTpcXHR9O1xcbiAgNzA6XFx0XFxuICA3MTpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9SRUdfT0ZGU0VUKGYpXFx0b2Zmc2V0b2Yoc3RydWN0IHByZXN0ZXJhX2xkcl9yZWdzLCBmKVxcbiAgNzI6XFx0XFxuICA3MzpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9SRUFEWV9NQUdJQ1xcdDB4ZjAwZGZlZWRcXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX0lNR19ETFxcdEJJVCgwKVxcbiAgNzY6XFx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX1NUQVJUX0ZXXFx0QklUKDEpXFxuICA3NzpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9TVEFUVVNfSU5WQUxJRF9JTUdcXHRCSVQoMilcXG4gIDc4OlxcdCNkZWZpbmUgUFJFU1RFUkFfTERSX1NUQVRVU19OT01FTVxcdEJJVCgzKVxcbiAgNzk6XFx0XFxuICA4MDpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9SRUdfQkFTRShmdylcXHQoKGZ3KS1cXHUwMDNlbGRyX3JlZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjE5LjYwNjI4NzUwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE0NjMxNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uY2x1c2lvbiBvZiBgcHJlc3RlcmFfcGNpLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSB0YWlsIGVuZCBvZiBgcHJlc3RlcmFfcGNpLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIG1vZHVsZSB3cmFwcyB1cCBpdHMgcmVzcG9uc2liaWxpdGllcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJlc291cmNlIGNsZWFudXAgYW5kIGFueSBmaW5hbCBpbml0aWFsaXphdGlvbiBvciBkZS1pbml0aWFsaXphdGlvbiBzdGVwcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYW5vbmljYWwgcGF0dGVybnMgSSdkIGV4cGVjdCB0byBzZWUgaW4gYSBQQ0kgZHJpdmVyIOKAkyBwYXJ0aWN1bGFybHkgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBJUlEgdW5yZWdpc3RyYXRpb24sIGFuZCBhbnkgcG90ZW50aWFsIHF1aWVzY2luZyBvZiB0aGUgaGFyZHdhcmUuIFxuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBwb3RlbnRpYWwgZmFpbHVyZSBwYXRocy4gV2hlcmUgYXJlIHRoZSBgZ290b2Agc3RhdGVtZW50cywgYW5kIHdoYXQgY2xlYW51cCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgaW4gZWFjaCBjYXNlPyBBcmUgdGhleSBjb21wcmVoZW5zaXZlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXMgSSBzaG91bGQgZmxhZz8gSSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBQQ0kgaW5pdGlhbGl6YXRpb24sIG9yIGlmIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQsIHdlIGdyYWNlZnVsbHkgcmVsZWFzZSBldmVyeXRoaW5nIHdlJ3ZlIGNsYWltZWQuXG5cblNwZWNpZmljYWxseSwgSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFBDSSBjb3JlLiBIb3cgYXJlIGRldmljZSBwcm9iZXMgaGFuZGxlZD8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGlmIGEgZGV2aWNlIGRvZXNuJ3QgcmVzcG9uZCBhcyBleHBlY3RlZD8gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhbiBhbmQgY29tcGxldGUgZGV0YWNoIG9wZXJhdGlvbiwgYSBraW5kIG9mIG1pcnJvciBpbWFnZSBvZiB0aGUgYXR0YWNoIHByb2NlZHVyZSwgdG8gZW5zdXJlIG5vIGxpbmdlcmluZyBzdGF0ZS4gQW55IHVuZXhwZWN0ZWQgcG93ZXIgbWFuYWdlbWVudCBpbXBsaWNhdGlvbnM/IEFyZSB0aGVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXNwZW5kL3Jlc3VtZT9cblxuT3ZlcmFsbCwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgdGhlIGN1bG1pbmF0aW9uIG9mIGNhcmVmdWwgcmVzb3VyY2UgbWFuYWdlbWVudCwgZGVtb25zdHJhdGluZyByb2J1c3RuZXNzIGFuZCBhZGhlcmluZyB0byBhbGwgcmVsZXZhbnQgUENJIHN0YW5kYXJkcyBhbmQgTGludXggZHJpdmVyIGJlc3QgcHJhY3RpY2VzLiBJJ20gc2VhcmNoaW5nIGZvciBldmlkZW5jZSBvZiB0aGF0LiBJdCdzIHRoZSBmaW5hbCBqdWRnbWVudCBjYWxsIG9uIHRoZSBjb2RlJ3MgcXVhbGl0eSwgaW4gbXkgZXllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MjIuNDIwOTIzMjM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdG91dF9yZWxlYXNlOlxcbiA4MDI6XFx0XFx0cHJlc3RlcmFfZndfcHV0KGZ3KTtcXG4gODAzOlxcdFxcdHJldHVybiBlcnI7XFxuIDgwNDpcXHR9XFxuIDgwNTpcXHRcXG4gODA2OlxcdHN0YXRpYyBib29sIHByZXN0ZXJhX3BjaV9wcF91c2VfYmFyMihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gODA3OlxcdHtcXG4gODA4OlxcdFxcdHN3aXRjaCAocGRldi1cXHUwMDNlZGV2aWNlKSB7XFxuIDgwOTpcXHRcXHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYNzMxMk06XFxuIDgxMDpcXHRcXHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYMzUwMDpcXG4gODExOlxcdFxcdGNhc2UgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTAxOlxcbiA4MTI6XFx0XFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDM1MTA6XFxuIDgxMzpcXHRcXHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYMzUyMDpcXG4gODE0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA4MTU6XFx0XFxuIDgxNjpcXHRcXHRkZWZhdWx0OlxcbiA4MTc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MTg6XFx0XFx0fVxcbiA4MTk6XFx0fVxcbiA4MjA6XFx0XFxuIDgyMTpcXHRzdGF0aWMgdTMyIHByZXN0ZXJhX3BjaV9wcF9iYXIyX29mZnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDgyMjpcXHR7XFxuIDgyMzpcXHRcXHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSA9PSAweDEwMDAwMDApXFxuIDgyNDpcXHRcXHRcXHRyZXR1cm4gMHgwO1xcbiA4MjU6XFx0XFx0ZWxzZVxcbiA4MjY6XFx0XFx0XFx0cmV0dXJuIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpIC8gMik7XFxuIDgyNzpcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdHN0YXRpYyB1MzIgcHJlc3RlcmFfcGNpX2Z3X2JhcjJfb2ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gODMwOlxcdHtcXG4gODMxOlxcdFxcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpID09IDB4MTAwMDAwMClcXG4gODMyOlxcdFxcdFxcdHJldHVybiAweDQwMDAwMDtcXG4gODMzOlxcdFxcdGVsc2VcXG4gODM0OlxcdFxcdFxcdHJldHVybiAweDA7XFxuIDgzNTpcXHR9XFxuIDgzNjpcXHRcXG4gODM3OlxcdHN0YXRpYyBpbnQgcHJlc3RlcmFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiA4Mzg6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiA4Mzk6XFx0e1xcbiA4NDA6XFx0XFx0Y29uc3QgY2hhciAqZHJpdmVyX25hbWUgPSBkZXZfZHJpdmVyX3N0cmluZyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gODQxOlxcdFxcdHU4IF9faW9tZW0gKm1lbV9hZGRyLCAqcHBfYWRkciA9IE5VTEw7XFxuIDg0MjpcXHRcXHRzdHJ1Y3QgcHJlc3RlcmFfZncgKmZ3O1xcbiA4NDM6XFx0XFx0aW50IGVycjtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbiA4NDY6XFx0XFx0aWYgKGVycikge1xcbiA4NDc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXFxcXG5cXFwiKTtcXG4gODQ4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9lbmFibGVfZGV2aWNlO1xcbiA4NDk6XFx0XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHRcXHRlcnIgPSBwY2ltX3JlcXVlc3RfYWxsX3JlZ2lvbnMocGRldiwgZHJpdmVyX25hbWUpO1xcbiA4NTI6XFx0XFx0aWYgKGVycikge1xcbiA4NTM6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicGNpbV9yZXF1ZXN0X2FsbF9yZWdpb25zIGZhaWxlZFxcXFxuXFxcIik7XFxuIDg1NDpcXHRcXHRcXHRnb3RvIGVycl9wY2lfcmVxdWVzdF9yZWdpb25zO1xcbiA4NTU6XFx0XFx0fVxcbiA4NTY6XFx0XFxuIDg1NzpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMCkpO1xcbiA4NTg6XFx0XFx0aWYgKGVycikge1xcbiA4NTk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCB0byBzZXQgRE1BIG1hc2tcXFxcblxcXCIpO1xcbiA4NjA6XFx0XFx0XFx0Z290byBlcnJfZG1hX21hc2s7XFxuIDg2MTpcXHRcXHR9XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdG1lbV9hZGRyID0gcGNpbV9pb21hcChwZGV2LCAyLCAwKTtcXG4gODY0OlxcdFxcdGlmICghbWVtX2FkZHIpIHtcXG4gODY1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInBjaSBtZW0gaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbiA4NjY6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gODY3OlxcdFxcdFxcdGdvdG8gZXJyX21lbV9pb3JlbWFwO1xcbiA4Njg6XFx0XFx0fVxcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHQvKiBBQzVYIGRldmljZXMgdXNlIHNlY29uZCBoYWxmIG9mIEJBUjIgKi9cXG4gODcxOlxcdFxcdGlmIChwcmVzdGVyYV9wY2lfcHBfdXNlX2JhcjIocGRldikpIHtcXG4gODcyOlxcdFxcdFxcdHBwX2FkZHIgPSBtZW1fYWRkciArIHByZXN0ZXJhX3BjaV9wcF9iYXIyX29mZnMocGRldik7XFxuIDg3MzpcXHRcXHRcXHRtZW1fYWRkciA9IG1lbV9hZGRyICsgcHJlc3RlcmFfcGNpX2Z3X2JhcjJfb2ZmcyhwZGV2KTtcXG4gODc0OlxcdFxcdH0gZWxzZSB7XFxuIDg3NTpcXHRcXHRcXHRwcF9hZGRyID0gcGNpbV9pb21hcChwZGV2LCA0LCAwKTtcXG4gODc2OlxcdFxcdFxcdGlmICghcHBfYWRkcikge1xcbiA4Nzc6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicHAgcmVncyBpb3JlbWFwIGZhaWxlZFxcXFxuXFxcIik7XFxuIDg3ODpcXHRcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiA4Nzk6XFx0XFx0XFx0XFx0Z290byBlcnJfcHBfaW9yZW1hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MjIuNDIxMDUyMDc4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMzk1ODMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBwcmVzdGVyYV9wY2kuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGBwcmVzdGVyYV9wY2kuY2AgZmlsZS4gSSdtIGtlZW4gdG8gc2VlIHRoZSByZXN0IG9mIGl0LiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIFByZXN0ZXJhIGFyY2hpdGVjdHVyZSBhbmQgUENJIGludGVncmF0aW9uIGluIGdlbmVyYWwsIHNvIEknbSBsb29raW5nIGZvciBzcGVjaWZpY3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkncmUgaGFuZGxpbmc6XG5cbiogICAqKkludGVycnVwdCByb3V0aW5nOioqIEhvdyBhcmUgaW50ZXJydXB0cyBmcm9tIHRoZSBQQ0kgYnVzIGJlaW5nIG1hcHBlZCBhbmQgaGFuZGxlZCBieSB0aGUgUHJlc3RlcmEncyBpbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlcj8gQXJlIHRoZXkgdXNpbmcgTVNJLVgsIGxlZ2FjeSBpbnRlcnJ1cHRzLCBvciBhIGh5YnJpZCBhcHByb2FjaD8gV2hhdCBraW5kIG9mIGludGVycnVwdCBhZmZpbml0eSBjb25maWd1cmF0aW9uIGFyZSB0aGV5IHVzaW5nLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zLCBpZiBhbnk/XG4qICAgKipETUEgc2V0dXA6KiogSG93IGlzIHRoZSBETUEgZW5naW5lIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSBiZXR3ZWVuIHRoZSBQQ0kgYnVzIGFuZCB0aGUgUHJlc3RlcmEncyBtZW1vcnkgc3BhY2U/IEFyZSB0aGV5IHVzaW5nIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzPyBXaGF0IGtpbmQgb2YgYnVmZmVyIG1hbmFnZW1lbnQgaXMgaW4gcGxhY2UgdG8gaGFuZGxlIGRhdGEgY29uc2lzdGVuY3k/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgbGlrZSBjYWNoZSBjb2hlcmVuY3kgaGFuZGxpbmcsIGJlaW5nIGRvbmU/XG4qICAgKipBZGRyZXNzIG1hcHBpbmc6KiogSG93IGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9mIHRoZSBQQ0kgZGV2aWNlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBQcmVzdGVyYSdzIG1lbW9yeSBtYXA/IElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIHRyYW5zbGF0aW9uLCBvciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYWRkcmVzcyB3aW5kb3dpbmcgc2NoZW1lcyBiZWluZyB1c2VkPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBhbnkgcmVxdWlyZWQgQkFSIChCYXNlIEFkZHJlc3MgUmVnaXN0ZXIpIGNvbmZpZ3VyYXRpb25zLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogV2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBoYW5kbGUgUENJIGJ1cyBlcnJvcnMsIHN1Y2ggYXMgcGFyaXR5IGVycm9ycyBvciB0cmFuc2FjdGlvbiB0aW1lb3V0cz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciByZXBvcnRpbmcgZmVhdHVyZXMgYmVpbmcgdXNlZD9cbiogICAqKlBvd2VyIG1hbmFnZW1lbnQ6KiogSG93IGlzIHRoZSBQcmVzdGVyYSBkcml2ZXIgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUENJIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IHNwZWNpZmljIHBvd2VyLXNhdmluZyB0ZWNobmlxdWVzIGZvciB0aGUgUENJIGRldmljZT9cblxuSSdtIGFsc28gbG9va2luZyBmb3IgYW55dGhpbmcgdW51c3VhbCBvciBjbGV2ZXIgdGhleSd2ZSBkb25lOyBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgdGhhdCBtaWdodCBiZSB1bmlxdWUgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHNlZSB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUsIHRoZSBpbmNsdWRlIGZpbGVzLCBhbmQgYW55IHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBiZSBvZiBpbnRlcmVzdC4gT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzoyNS41NjA2MzgxMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODgwOlxcdFxcdFxcdH1cXG4gODgxOlxcdFxcdH1cXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGZ3ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqZncpLCBHRlBfS0VSTkVMKTtcXG4gODg2OlxcdFxcdGlmICghZncpIHtcXG4gODg3OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDg4ODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZGV2X2FsbG9jO1xcbiA4ODk6XFx0XFx0fVxcbiA4OTA6XFx0XFxuIDg5MTpcXHRcXHRmdy1cXHUwMDNlcGNpX2RldiA9IHBkZXY7XFxuIDg5MjpcXHRcXHRmdy1cXHUwMDNlZGV2LmN0bF9yZWdzID0gbWVtX2FkZHI7XFxuIDg5MzpcXHRcXHRmdy1cXHUwMDNlZGV2LnBwX3JlZ3MgPSBwcF9hZGRyO1xcbiA4OTQ6XFx0XFx0ZnctXFx1MDAzZWRldi5kZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZncpO1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRlcnIgPSBwcmVzdGVyYV9md19pbml0KGZ3KTtcXG4gODk5OlxcdFxcdGlmIChlcnIpXFxuIDkwMDpcXHRcXHRcXHRnb3RvIGVycl9wcmVzdGVyYV9md19pbml0O1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRcXHRkZXZfaW5mbyhmdy1cXHUwMDNlZGV2LmRldiwgXFxcIlByZXN0ZXJhIEZXIGlzIHJlYWR5XFxcXG5cXFwiKTtcXG4gOTAzOlxcdFxcbiA5MDQ6XFx0XFx0ZnctXFx1MDAzZXdxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJwcmVzdGVyYV9md193cVxcXCIsIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDEpO1xcbiA5MDU6XFx0XFx0aWYgKCFmdy1cXHUwMDNld3EpIHtcXG4gOTA2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDkwNzpcXHRcXHRcXHRnb3RvIGVycl93cV9hbGxvYztcXG4gOTA4OlxcdFxcdH1cXG4gOTA5OlxcdFxcbiA5MTA6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZmdy1cXHUwMDNlZXZ0X3dvcmssIHByZXN0ZXJhX2Z3X2V2dF93b3JrX2ZuKTtcXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIFBDSV9JUlFfTVNJKTtcXG4gOTEzOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDkxNDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNU0kgSVJRIGluaXQgZmFpbGVkXFxcXG5cXFwiKTtcXG4gOTE1OlxcdFxcdFxcdGdvdG8gZXJyX2lycV9hbGxvYztcXG4gOTE2OlxcdFxcdH1cXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0ZXJyID0gcmVxdWVzdF9pcnEocGNpX2lycV92ZWN0b3IocGRldiwgMCksIHByZXN0ZXJhX3BjaV9pcnFfaGFuZGxlcixcXG4gOTE5OlxcdFxcdFxcdFxcdCAgMCwgZHJpdmVyX25hbWUsIGZ3KTtcXG4gOTIwOlxcdFxcdGlmIChlcnIpIHtcXG4gOTIxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwgdG8gcmVxdWVzdCBJUlFcXFxcblxcXCIpO1xcbiA5MjI6XFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuIDkyMzpcXHRcXHR9XFxuIDkyNDpcXHRcXG4gOTI1OlxcdFxcdGVyciA9IHByZXN0ZXJhX2RldmljZV9yZWdpc3RlcihcXHUwMDI2ZnctXFx1MDAzZWRldik7XFxuIDkyNjpcXHRcXHRpZiAoZXJyKVxcbiA5Mjc6XFx0XFx0XFx0Z290byBlcnJfcHJlc3RlcmFfZGV2X3JlZ2lzdGVyO1xcbiA5Mjg6XFx0XFxuIDkyOTpcXHRcXHRyZXR1cm4gMDtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0ZXJyX3ByZXN0ZXJhX2Rldl9yZWdpc3RlcjpcXG4gOTMyOlxcdFxcdGZyZWVfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCBmdyk7XFxuIDkzMzpcXHRlcnJfcmVxdWVzdF9pcnE6XFxuIDkzNDpcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTtcXG4gOTM1OlxcdGVycl9pcnFfYWxsb2M6XFxuIDkzNjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShmdy1cXHUwMDNld3EpO1xcbiA5Mzc6XFx0ZXJyX3dxX2FsbG9jOlxcbiA5Mzg6XFx0XFx0cHJlc3RlcmFfZndfdW5pbml0KGZ3KTtcXG4gOTM5OlxcdGVycl9wcmVzdGVyYV9md19pbml0OlxcbiA5NDA6XFx0ZXJyX3BjaV9kZXZfYWxsb2M6XFxuIDk0MTpcXHRlcnJfcHBfaW9yZW1hcDpcXG4gOTQyOlxcdGVycl9tZW1faW9yZW1hcDpcXG4gOTQzOlxcdGVycl9kbWFfbWFzazpcXG4gOTQ0OlxcdGVycl9wY2lfcmVxdWVzdF9yZWdpb25zOlxcbiA5NDU6XFx0ZXJyX3BjaV9lbmFibGVfZGV2aWNlOlxcbiA5NDY6XFx0XFx0cmV0dXJuIGVycjtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdFxcbiA5NDk6XFx0c3RhdGljIHZvaWQgcHJlc3RlcmFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gOTUwOlxcdHtcXG4gOTUxOlxcdFxcdHN0cnVjdCBwcmVzdGVyYV9mdyAqZncgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIDk1MjpcXHRcXG4gOTUzOlxcdFxcdHByZXN0ZXJhX2RldmljZV91bnJlZ2lzdGVyKFxcdTAwMjZmdy1cXHUwMDNlZGV2KTtcXG4gOTU0OlxcdFxcdGZyZWVfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCBmdyk7XFxuIDk1NTpcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTtcXG4gOTU2OlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGZ3LVxcdTAwM2V3cSk7XFxuIDk1NzpcXHRcXHRwcmVzdGVyYV9md191bmluaXQoZncpO1xcbiA5NTg6XFx0fVxcbiA5NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjI1LjU2MDc2NTkwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjY0ODMyNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRob3NlIGxpbmVzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIENvZGUgYXQgTGluZSA5NjArKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRXhhbWluaW5nIHRoZSBjb2RlIHN0YXJ0aW5nIGF0IGxpbmUgOTYw4oCmIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9ycywgdGhlIHVzdWFsIHN1c3BlY3RzLiBXaGF0J3MgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBsaWtlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcz8gV2hhdCB2YXJpYWJsZXMgYXJlIGJlaW5nIGRlY2xhcmVkIG9yIG1vZGlmaWVkIGluIHRoaXMgc2VjdGlvbj8gTXkgaW5pdGlhbCBzY2FuIGlzIGZvciBhbnkgdW51c3VhbCBwYXR0ZXJucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cbk9rYXksIEkgc2VlLi4uIGl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBbbWVudGlvbiB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aG9zZSBsaW5lczogZGF0YSBwcm9jZXNzaW5nLCBhIHNwZWNpZmljIGFsZ29yaXRobSwgZXRjLl0uIFRoZSBuYW1pbmcgY29udmVudGlvbnMgbG9vayBzdGFuZGFyZCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIGNsZWFuIGNvZGluZy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBsb2dpYyBmbG93IGhlcmUuIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzPyBBcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBoYW5kbGVkIGVmZmljaWVudGx5P1xuXG5IbW0sIGF0IGxpbmUgW21lbnRpb24gYSBsaW5lIG51bWJlciB3aXRoaW4gdGhlIHJhbmdlXSBJJ20gc2VlaW5nIGEgcG9zc2libGUgYXJlYSBmb3Igb3B0aW1pemF0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHBlcmZvcm1pbmcgW2Rlc2NyaWJlIHRoZSBhY3Rpb25dIGluIGEgbG9vcC4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBkYXRhIHNldCwgdGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGtpbGxlci4gUGVyaGFwcyBhIG1vcmUgZWZmaWNpZW50IGFsZ29yaXRobSBjb3VsZCBiZSB1c2VkIGhlcmU/IEknbSBnb2luZyB0byBib29rbWFyayB0aGF0IGxpbmUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuTm93LCBhdCBsaW5lIFttZW50aW9uIGFub3RoZXIgbGluZSBudW1iZXIgd2l0aGluIHRoZSByYW5nZV0sIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuLi4gYWgsIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBjb25kaXRpb24gd2lsbCBhbHdheXMgZXZhbHVhdGUgaW4gdGhlIGludGVuZGVkIHdheT8gUGVyaGFwcyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIGlucHV0IHZhbHVlcyBhcmUgaW4gc29tZSB0ZXN0cy4gXG5cbk92ZXJhbGwsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBjb2RlIGlzIHJlbGF0aXZlbHkgd2VsbC1zdHJ1Y3R1cmVkLCBidXQgd2l0aCBhIGZldyBhcmVhcyB0aGF0IGRlc2VydmUgbW9yZSBzY3J1dGlueS4gSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gcnVuIHNvbWUgdGVzdHMgdG8gdmVyaWZ5IHRoZSBhc3N1bXB0aW9ucyBhbmQgbG9vayBpbnRvIHRoYXQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gdGhlc2UgY2hlY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MzIuODI1NjAxMTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHJlc3RlcmFfcGNpX2RldmljZXNbXSA9IHtcXG4gOTYxOlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBSRVNURVJBX0RFVl9JRF9BQzNYXzk4RFhfNTUpIH0sXFxuIDk2MjpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfQUMzWF85OERYXzY1KSB9LFxcbiA5NjM6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEX0FMRFJJTjIpIH0sXFxuIDk2NDpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDczMTJNKSB9LFxcbiA5NjU6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTAwKSB9LFxcbiA5NjY6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTAxKSB9LFxcbiA5Njc6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTEwKSB9LFxcbiA5Njg6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTIwKSB9LFxcbiA5Njk6XFx0XFx0eyB9XFxuIDk3MDpcXHR9O1xcbiA5NzE6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHByZXN0ZXJhX3BjaV9kZXZpY2VzKTtcXG4gOTcyOlxcdFxcbiA5NzM6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByZXN0ZXJhX3BjaV9kcml2ZXIgPSB7XFxuIDk3NDpcXHRcXHQubmFtZSAgICAgPSBcXFwiUHJlc3RlcmEgRFhcXFwiLFxcbiA5NzU6XFx0XFx0LmlkX3RhYmxlID0gcHJlc3RlcmFfcGNpX2RldmljZXMsXFxuIDk3NjpcXHRcXHQucHJvYmUgICAgPSBwcmVzdGVyYV9wY2lfcHJvYmUsXFxuIDk3NzpcXHRcXHQucmVtb3ZlICAgPSBwcmVzdGVyYV9wY2lfcmVtb3ZlLFxcbiA5Nzg6XFx0fTtcXG4gOTc5OlxcdG1vZHVsZV9wY2lfZHJpdmVyKHByZXN0ZXJhX3BjaV9kcml2ZXIpO1xcbiA5ODA6XFx0XFxuIDk4MTpcXHRNT0RVTEVfTElDRU5TRShcXFwiRHVhbCBCU0QvR1BMXFxcIik7XFxuIDk4MjpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1hcnZlbGwgUHJlc3RlcmEgc3dpdGNoIFBDSSBpbnRlcmZhY2VcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MzIuODI1NzQ2NTk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4OTI3Nzk3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFByZXN0ZXJhIEhXIENvdW50ZXIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBkZWVwIGludG8gdGhpcyBQcmVzdGVyYSBjb2RlLCBhbmQgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgaGFyZHdhcmUgY291bnRlcnMgYXJlIGJlaW5nIGFjY2Vzc2VkIGFuZCBtYW5hZ2VkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXJlIHRoZXJlICpvdGhlciogcGxhY2VzLCBiZXlvbmQgd2hhdCBJJ3ZlIGFscmVhZHkgdW5jb3ZlcmVkLCB3aGVyZSBgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0YCwgYHByZXN0ZXJhX2NvdW50ZXJfc3RhdHNfd29ya2AsIG9yIGFueSBvdGhlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUHJlc3RlcmEgYnVzIG9yIGRldmljZSByZWdpc3RyYXRpb25zIGFyZSBoYXBwZW5pbmc/IEkgbmVlZCB0byBiZSAqc3VyZSogSSdtIHNlZWluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgY2FuJ3QgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLCB5b3Uga25vdz9cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gcnVuIGEgZm9jdXNlZCBgZ3JlcHBlcmAgc2Vzc2lvbi4gSSB3YW50IHRvIHVuY292ZXIgZXZlcnkgaW5zdGFuY2UsIGV2ZXJ5IGNhbGwsIGV2ZXJ5IHJlZ2lzdHJhdGlvbiwgYW5kIGV2ZXJ5IHBvaW50IG9mIGFjY2Vzcy4gV2UgbmVlZCBhIGNvbXByZWhlbnNpdmUgdmlldyBoZXJlLCBhbmQgZ3JlcHBpbmcgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGxpc3QuIEl0J3MgdGltZSB0byBkaWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDUxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzozNC43MTg1MzEzODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Nzc2MzU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaD0zNDU9c3RhdGljIGlubGluZSB1MzIgcHJlc3RlcmFfcmVhZChjb25zdCBzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaC0zNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYS5oOjM1MTppbnQgcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwcmVzdGVyYV9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYS5oLTM1Mi12b2lkIHByZXN0ZXJhX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBwcmVzdGVyYV9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYz0xNDUyPXN0YXRpYyB2b2lkIHByZXN0ZXJhX3N3aXRjaF9maW5pKHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYzoxNDcwOmludCBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHByZXN0ZXJhX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jLTE0NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ4OS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmM6MTQ5MDpFWFBPUlRfU1lNQk9MKHByZXN0ZXJhX2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ5MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmM9ODM3PXN0YXRpYyBpbnQgcHJlc3RlcmFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuYy05MjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuYzo5MjU6XFx0ZXJyID0gcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZmdy1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jLTkyNi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzozNy42OTYxNzc5MDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM2NDgyOTgxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIGBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXJgIGlzIGNhbGxlZCBleGNsdXNpdmVseSBieSBgcHJlc3RlcmFfcGNpX3Byb2JlYCwgd2hpY2gsIGFzIEkga25vdywgaXMgdGhlIFBDSSBkcml2ZXIgZm9yIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcy4gV2UncmUgdGFsa2luZyBhYm91dCB0aG9zZSBzcGVjaWZpYyBBU0lDcyDigJMgQWxkcmluLCBBQzNYLCBBQzVYLCB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgaXNuJ3Qgc29tZSBnZW5lcmljIG5ldHdvcmsgY2FyZDsgaXQncyBhIHNwZWNpYWxpemVkIHBpZWNlIG9mIGhhcmR3YXJlLiBDcnVjaWFsbHksIHRoaXMgZHJpdmVyIG5lZWRzIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIEFTSUMgdGhyb3VnaCBQQ0llIGFuZCBpbnZvbHZlcyBwaHlzaWNhbCBmaXJtd2FyZSBsb2FkaW5nIChgcHJlc3RlcmFfZndfaW5pdGAsIHNwZWNpZmljYWxseSkuIFdlIGRvd25sb2FkIGZpcm13YXJlLCB3YWl0IGZvciBpdCB0byBib290LCBhbmQgY29tbXVuaWNhdGUgdmlhIG1haWxib3hlcyBvciBQQ0llIEJBUnMuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGF0IHNlY29uZCBzZWN0aW9uIG9mIHRoZSBwcm9tcHQsIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCI6IFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIEJpbmdvLiBUaGUgTWFydmVsbCBQcmVzdGVyYSBkcml2ZXIgZml0cyB0aGF0ICpwZXJmZWN0bHkqLiBJdCdzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBBU0lDIGRyaXZlciByZWxpYW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlLiBObyB3YXkgdGhpcyBydW5zIHdpdGhvdXQgdGhhdC5cblxuU28sIHdoZXJlIGFyZSB0aGUgY2hhbmdlcz8gQ2hlY2tpbmcgdGhlIGZpbGVzOiBgcHJlc3RlcmFfY291bnRlci5jYCwgYHByZXN0ZXJhX2h3LmNgLCBhbmQgYHByZXN0ZXJhX2h3LmhgLiBBbGwgdHVja2VkIG5lYXRseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvYC4gVGhpcyBpcyBnb29kOyBzdHJpY3RseSB3aXRoaW4gdGhlIGRlc2lnbmF0ZWQgZHJpdmVyIGRpcmVjdG9yeS4gVGhlc2UgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyBhIGJ1ZmZlciBvdmVyZmxvdyBpc3N1ZSByZWxhdGVkIHRvIHJlYWRpbmcgY291bnRlciBzdGF0cyBmcm9tIGhhcmR3YXJlIHJlc3BvbnNlcy4gRXNzZW50aWFsbHksIHRoZXJlJ3MgYSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0eS4gVGhpcyBjb2RlICpvbmx5KiBleGVjdXRlcyB3aGVuIHRoZSBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBpcyBjb25uZWN0ZWQgdmlhIFBDSWUgYW5kIHN1Y2Nlc3NmdWxseSBwcm9iZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBmYWxscyBkaXJlY3RseSB1bmRlciBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBJdCBjYW4ndCBiZSBlbXVsYXRlZCBvciBpbnN0YW50aWF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBJdCAqbmVlZHMqIHRoYXQgcGh5c2ljYWwgQVNJQy5cblxuQ29uc2VxdWVudGx5LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLlxuXG5Gb3IgYHNldC1yZXN1bHRzYCwgaGVyZSBhcmUgdGhlIHBhcmFtZXRlcnM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChlbXB0eSBsaXN0LCBiZWNhdXNlIGBXb3J0aEZ1enppbmdgIGlzIGZhbHNlKVxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBpcyBmYWxzZSlcbiogICBgUmVhc29uaW5nYDogVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9gKSwgYSB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciB0aGF0IG5lY2Vzc2l0YXRlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgaGFyZHdhcmUgYW5kIGZpcm13YXJlIG5vdCBzaW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcmVuZGVycyB0aGUgYWx0ZXJlZCBjb2RlIHN0cnVjdHVyYWxseSBpbmFjY2Vzc2libGUuXG5cbkkgc3VwcG9zZSwgZm9yIGdvb2QgbWVhc3VyZSwgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGNvbmZpZ3MuIGBQUkVTVEVSQWAgYW5kIGBQUkVTVEVSQV9QQ0lgLiBCdXQsIGFzIEkgc2FpZCwgc2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHkuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3NiwiT3V0cHV0VG9rZW5zIjoxMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6NTEuMzQ0NDc5NDA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS8pLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBQcmVzdGVyYSBQQ0llIHN3aXRjaCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbG9hZGluZyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzo1MS4zNDQ1MDkxMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q4w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 21:21:25 +0000 UTC FinishedAt: 2026-09-14 21:23:52 +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+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NjFhYTllNTI5OWJmYzhhMjA4Y2E4ZjdlMzI0ZDU4OTgzNjE0N2YzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjE6MjI6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xuaW5kZXggM2E3NjJkMTdiYTZjNi4uZjI2MTEwNDcyOWU5MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xuQEAgLTM0Miw2ICYjNDM7MzQyLDcgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHUzMiByZXNjaGVkX3RpbWUgPSBDT1VOVEVSX1BPTExfVElNRTtcbiBcdHUzMiBjb3VudCA9IENPVU5URVJfQlVMS19TSVpFO1xuIFx0Ym9vbCBkb25lID0gZmFsc2U7XG4mIzQzO1x0dTMyIHJlbWFpbmluZztcbiBcdGludCBlcnI7XG4gXHR1MzIgaTtcbiBcbkBAIC0zNjgsMTAgJiM0MzszNjksMTIgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Z290byByZXNjaGVkO1xuIFx0fVxuIFxuJiM0MztcdHJlbWFpbmluZyA9IGJsb2NrLVx1MDAzZW51bV9jb3VudGVycyAtIGNvdW50ZXItXHUwMDNldG90YWxfcmVhZDtcbiBcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfbG9jayhibG9jayk7XG4gXHRlcnIgPSBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoY291bnRlci1cdTAwM2VzdywgY291bnRlci1cdTAwM2V0b3RhbF9yZWFkLFxuIFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvdW50LCBcdTAwMjZkb25lLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmJsb2NrLVx1MDAzZXN0YXRzW2NvdW50ZXItXHUwMDNldG90YWxfcmVhZF0pO1xuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZibG9jay1cdTAwM2VzdGF0c1tjb3VudGVyLVx1MDAzZXRvdGFsX3JlYWRdLFxuJiM0MztcdFx0XHRcdCAgICAgICByZW1haW5pbmcpO1xuIFx0cHJlc3RlcmFfY291bnRlcl9ibG9ja191bmxvY2soYmxvY2spO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBhYm9ydDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcbmluZGV4IDc2OTVjYmIyY2U2MjYuLjJlNWNmZmVmZWE3MDEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuY1xuQEAgLTIzMDUsNyAmIzQzOzIzMDUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9hYm9ydChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcbiBcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxuIFx0XHRcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHByZXN0ZXJhX2NvdW50ZXJfc3RhdHMgKnN0YXRzLFxuJiM0MztcdFx0XHQgICAgIHUzMiBzdGF0c19sZW4pXG4ge1xuIFx0c3RydWN0IHByZXN0ZXJhX21zZ19jb3VudGVyX3Jlc3AgKnJlc3A7XG4gXHRzdHJ1Y3QgcHJlc3RlcmFfbXNnX2NvdW50ZXJfcmVxIHJlcSA9IHtcbkBAIC0yMzI0LDYgJiM0MzsyMzI1LDExIEBAIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfYnVmZjtcbiBcbiYjNDM7XHRpZiAoX19sZTMyX3RvX2NwdShyZXNwLVx1MDAzZW51bV9jb3VudGVycykgXHUwMDNlIG1pbigqbGVuLCBzdGF0c19sZW4pKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBmcmVlX2J1ZmY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIF9fbGUzMl90b19jcHUocmVzcC1cdTAwM2VudW1fY291bnRlcnMpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdGF0c1tpXS5wYWNrZXRzICYjNDM7PSBfX2xlNjRfdG9fY3B1KHJlc3AtXHUwMDNlc3RhdHNbaV0ucGFja2V0cyk7XG4gXHRcdHN0YXRzW2ldLmJ5dGVzICYjNDM7PSBfX2xlNjRfdG9fY3B1KHJlc3AtXHUwMDNlc3RhdHNbaV0uYnl0ZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuaW5kZXggMGE5MjkyNzllMWNlYS4uMmU5YWNlYjdhMTM2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXG5AQCAtMjM1LDcgJiM0MzsyMzUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl90cmlnZ2VyKHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgYmxvY2tfaWQpO1xuIGludCBwcmVzdGVyYV9od19jb3VudGVyX2Fib3J0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3KTtcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxuIFx0XHRcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpO1xuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzICpzdGF0cyxcbiYjNDM7XHRcdFx0ICAgICB1MzIgc3RhdHNfbGVuKTtcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9ibG9ja19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csXG4gXHRcdFx0XHQgIHUzMiBjbGllbnQsIHUzMiAqYmxvY2tfaWQsIHUzMiAqb2Zmc2V0LFxuIFx0XHRcdFx0ICB1MzIgKm51bV9jb3VudGVycyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjFhYTllNTI5OWJmYzhhMjA4Y2E4ZjdlMzI0ZDU4OTgzNjE0N2YzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjE6MjI6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jCmluZGV4IDNhNzYyZDE3YmE2YzYuLmYyNjExMDQ3MjllOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jCkBAIC0zNDIsNiAmIzQzOzM0Miw3IEBAIHN0YXRpYyB2b2lkIHByZXN0ZXJhX2NvdW50ZXJfc3RhdHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJdTMyIHJlc2NoZWRfdGltZSA9IENPVU5URVJfUE9MTF9USU1FOwogCXUzMiBjb3VudCA9IENPVU5URVJfQlVMS19TSVpFOwogCWJvb2wgZG9uZSA9IGZhbHNlOwomIzQzOwl1MzIgcmVtYWluaW5nOwogCWludCBlcnI7CiAJdTMyIGk7CiAKQEAgLTM2OCwxMCAmIzQzOzM2OSwxMiBAQCBzdGF0aWMgdm9pZCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlnb3RvIHJlc2NoZWQ7CiAJfQogCiYjNDM7CXJlbWFpbmluZyA9IGJsb2NrLSZndDtudW1fY291bnRlcnMgLSBjb3VudGVyLSZndDt0b3RhbF9yZWFkOwogCXByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfbG9jayhibG9jayk7CiAJZXJyID0gcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KGNvdW50ZXItJmd0O3N3LCBjb3VudGVyLSZndDt0b3RhbF9yZWFkLAogCQkJCSAgICAgICAmYW1wO2NvdW50LCAmYW1wO2RvbmUsCi0JCQkJICAgICAgICZhbXA7YmxvY2stJmd0O3N0YXRzW2NvdW50ZXItJmd0O3RvdGFsX3JlYWRdKTsKJiM0MzsJCQkJICAgICAgICZhbXA7YmxvY2stJmd0O3N0YXRzW2NvdW50ZXItJmd0O3RvdGFsX3JlYWRdLAomIzQzOwkJCQkgICAgICAgcmVtYWluaW5nKTsKIAlwcmVzdGVyYV9jb3VudGVyX2Jsb2NrX3VubG9jayhibG9jayk7CiAJaWYgKGVycikKIAkJZ290byBhYm9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuYwppbmRleCA3Njk1Y2JiMmNlNjI2Li4yZTVjZmZlZmVhNzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jCkBAIC0yMzA1LDcgJiM0MzsyMzA1LDggQEAgaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfYWJvcnQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpCiAKIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsCiAJCQkgICAgIHUzMiAqbGVuLCBib29sICpkb25lLAotCQkJICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpCiYjNDM7CQkJICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsCiYjNDM7CQkJICAgICB1MzIgc3RhdHNfbGVuKQogewogCXN0cnVjdCBwcmVzdGVyYV9tc2dfY291bnRlcl9yZXNwICpyZXNwOwogCXN0cnVjdCBwcmVzdGVyYV9tc2dfY291bnRlcl9yZXEgcmVxID0gewpAQCAtMjMyNCw2ICYjNDM7MjMyNSwxMSBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LAogCWlmIChlcnIpCiAJCWdvdG8gZnJlZV9idWZmOwogCiYjNDM7CWlmIChfX2xlMzJfdG9fY3B1KHJlc3AtJmd0O251bV9jb3VudGVycykgJmd0OyBtaW4oKmxlbiwgc3RhdHNfbGVuKSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZnJlZV9idWZmOwomIzQzOwl9CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IF9fbGUzMl90b19jcHUocmVzcC0mZ3Q7bnVtX2NvdW50ZXJzKTsgaSYjNDM7JiM0MzspIHsKIAkJc3RhdHNbaV0ucGFja2V0cyAmIzQzOz0gX19sZTY0X3RvX2NwdShyZXNwLSZndDtzdGF0c1tpXS5wYWNrZXRzKTsKIAkJc3RhdHNbaV0uYnl0ZXMgJiM0Mzs9IF9fbGU2NF90b19jcHUocmVzcC0mZ3Q7c3RhdHNbaV0uYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oCmluZGV4IDBhOTI5Mjc5ZTFjZWEuLjJlOWFjZWI3YTEzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmgKQEAgLTIzNSw3ICYjNDM7MjM1LDggQEAgaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfdHJpZ2dlcihzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdywgdTMyIGJsb2NrX2lkKTsKIGludCBwcmVzdGVyYV9od19jb3VudGVyX2Fib3J0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3KTsKIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsCiAJCQkgICAgIHUzMiAqbGVuLCBib29sICpkb25lLAotCQkJICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpOwomIzQzOwkJCSAgICAgc3RydWN0IHByZXN0ZXJhX2NvdW50ZXJfc3RhdHMgKnN0YXRzLAomIzQzOwkJCSAgICAgdTMyIHN0YXRzX2xlbik7CiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9ibG9ja19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csCiAJCQkJICB1MzIgY2xpZW50LCB1MzIgKmJsb2NrX2lkLCB1MzIgKm9mZnNldCwKIAkJCQkgIHUzMiAqbnVtX2NvdW50ZXJzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IE5ldHdvcmsgRHJpdmVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBhc2tlZCB0byB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4sIGJ1dCBmaXJzdCwgSSBuZWVkIGEgbGl0dGxlIGNvbnRleHQgdG8gbWFrZSBhIHByb3BlciBldmFsdWF0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmhgLiBBbHJpZ2h0LCB0aGUgYG1hcnZlbGwvcHJlc3RlcmFgIGRpcmVjdG9yeS4gTm93LCB3aGF0ICppcyogdGhpcyBkcml2ZXIgcHJlY2lzZWx5PyBJcyBpdCBhIGRyaXZlciBmb3IgYSAqcmVhbCogcGh5c2ljYWwgc3dpdGNoLCBvciBjb3VsZCB0aGlzIGJlIHNvbWV0aGluZyB0aGF0JiMzOTtzIGVtdWxhdGVkIG9yIHZpcnR1YWxpemVkIHNvbWVob3c/IFRoYXQmIzM5O3MgZ29pbmcgdG8gaW5mb3JtIGEgbG90IG9mIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLiBUaW1lIHRvIHJlYWNoIGZvciBgZ3JlcHBlcmAgKG9yIGByZWFkLWZpbGVgIGlmIHRoZSBzaXR1YXRpb24gY2FsbHMgZm9yIGl0KSBhbmQgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFBSRVNURVJBLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBpbiB0aGUgYnVpbGQgb3B0aW9ucyB0aGF0IG1pZ2h0IGdpdmUgbWUgdGhhdCBjcnVjaWFsIGluc2lnaHQgaW50byB0aGUgaGFyZHdhcmUgdGhpcyBhZmZlY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUkVTVEVSQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6Njpjb25maWcgUFJFU1RFUkFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxODpjb25maWcgUFJFU1RFUkFfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBQcmVzdGVyYSBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhpcyBLY29uZmlnIGZpbGUgaXMgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBNYXJ2ZWxsJiMzOTtzIFByZXN0ZXJhIGV0aGVybmV0IHN3aXRjaCBkcml2ZXJzIGFyZSBkZWZpbmVkLiBUaGlzIGlzIHRoZSBwbGFjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyJiMzOTtzIGZlYXR1cmVzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0cyBmb3IgdmFyaW91cyBQcmVzdGVyYS1zcGVjaWZpYyBmZWF0dXJlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDaGlwc2V0IFNlbGVjdGlvbjoqKiBIb3cgYXJlIHRoZSBkaWZmZXJlbnQgUHJlc3RlcmEgc3dpdGNoIHZhcmlhbnRzIGhhbmRsZWQ/IElzIHRoZXJlIGEgdG9wLWxldmVsIHN5bWJvbCBmb3IgY2hvb3NpbmcgdGhlIHNwZWNpZmljIGNoaXBzZXQgZmFtaWx5PyBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cz8KKiAgICoqRmVhdHVyZSBGbGFnczoqKiBXaGF0IGZpbmUtZ3JhaW5lZCBmZWF0dXJlcyBhcmUgY29uZmlndXJhYmxlPyBUaGluZ3MgbGlrZSBWTEFOIHN1cHBvcnQsIFFvUywgbGluayBhZ2dyZWdhdGlvbiAoTEFHL0xBQ1ApLCBzZWN1cml0eSBmZWF0dXJlcywgb3IgaGFyZHdhcmUgb2ZmbG9hZHMgYXJlIG9mIGludGVyZXN0LiBJJiMzOTtsbCBsb29rIGZvciBzeW1ib2xzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhlc2UgY2FwYWJpbGl0aWVzLgoqICAgKipEcml2ZXIgTW9kdWxlczoqKiBJcyB0aGUgZHJpdmVyIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBvciBidWlsdC1pbiB0byB0aGUga2VybmVsPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggYXBwcm9hY2g/CiogICAqKkJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIG90aGVyIGRyaXZlcnMsIHN1Y2ggYXMgUEhZIGRyaXZlcnMgb3IgTURJTz8gSG93IGFyZSB0aGV5IGhhbmRsZWQgaW4gdGhlIEtjb25maWc/CiogICAqKkRvY3VtZW50YXRpb246KiogSSYjMzk7bSBob3BpbmcgdGhlIGhlbHAgdGV4dHMgYXJlIGNsZWFyIGFuZCBpbmZvcm1hdGl2ZS4gR29vZCBLY29uZmlnIGZpbGVzIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgZm9yIGFuIGVuZ2luZWVyIHRvIHVuZGVyc3RhbmQgd2hhdCBhIHN5bWJvbCAqZG9lcyogYW5kIHdoZW4gaXQgc2hvdWxkIGJlIGVuYWJsZWQuIElmIHRoZSBkb2N1bWVudGF0aW9uIGlzIG1pc3NpbmcsIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGNvZGUuCiogICAqKkRlZmF1bHRzOioqIEkmIzM5O2xsIG5vdGUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdHMgZ2l2ZXMgYW4gaW5zaWdodCBpbnRvIGhvdyB0aGUgZW5naW5lZXJzIGV4cGVjdCB0aGUgZHJpdmVyIHRvIGJlIHVzZWQgbW9zdCBjb21tb25seS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgYW5kIHNlZSBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBkcml2ZXIgZGVzaWduLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBob3cgSSBjb3VsZCBidWlsZCBhbmQgYWRhcHQgdGhpcyBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2Ugb3IgaGFyZHdhcmUgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNYXJ2ZWxsIFByZXN0ZXJhIGRyaXZlcnMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFJFU1RFUkFcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUNzIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gTkVUX1NXSVRDSERFViBcdTAwMjZcdTAwMjYgVkxBTl84MDIxUVxuICAgOTpcdFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cbiAgMTA6XHRcdHNlbGVjdCBORVRfREVWTElOS1xuICAxMTpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5LlxuICAxNDpcdFxuICAxNTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMTY6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHByZXN0ZXJhLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBQUkVTVEVSQV9QQ0lcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O1BDSSBpbnRlcmZhY2UgZHJpdmVyIGZvciBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcyBmYW1pbHlcJiMzNDtcbiAgMjA6XHRcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IFBSRVNURVJBXG4gIDIxOlx0XHRkZWZhdWx0IFBSRVNURVJBXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIFRoaXMgaXMgaW1wbGVtZW50YXRpb24gb2YgUENJIGludGVyZmFjZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIFByZXN0ZXJhXG4gIDI0Olx0XHQgIFN3aXRjaCBBU0lDcyBmYW1pbHkuXG4gIDI1Olx0XG4gIDI2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAyNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHJlc3RlcmFfcGNpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIFN1cHBvcnQqKgoKT2theSwgc28gdGhlIHByb21wdCBtZW50aW9ucyBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcy4gUmlnaHQsIEkga25vdyB0aG9zZSDigJMgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBBU0lDcywgc2ltaWxhciB0byB0aGUgTWVsbGFub3ggU3dpdGNoWC9TcGVjdHJ1bSBBU0lDcy4gSnVzdCBsaWtlIG1seHN3LCB0aGUgbWVudGlvbiBvZiB3aGljaCBpbW1lZGlhdGVseSBicmluZ3MgdGhlIGNvbnRleHQgb2YgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGludG8gc2hhcnAgcmVsaWVmLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW50byBTZWN0aW9uIDIgb2YgdGhlIHByb21wdCB0byBzZWUgaWYgdGhpcyBmaXRzIHRoZSBwcm9maWxlIG9mICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBsaXN0cyBleGFtcGxlcyBsaWtlIG1seHN3LCB3aGljaCBhcmUgUENJLWJhc2VkIGFuZCBvZnRlbiBsYWNraW5nIGZ1bGwgZW11bGF0ZWQgc3VwcG9ydC4KClRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBQcmVzdGVyYSBoYXMgYW55IHNvcnQgb2YgdmlydHVhbCwgbW9jaywgb3IgZW11bGF0ZWQgY2FwYWJpbGl0eS4gT3IsIGlzIGl0IGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcnVubmluZyBvbiBwaHlzaWNhbCBoYXJkd2FyZSBQQ0kgZGV2aWNlcz8gVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiB0aGlzLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiB0aGlzIGZhbGxzIHVuZGVyIHRoZSBjYXRlZ29yeSBvZiBoYXJkd2FyZSB0aGF0ICpyZXF1aXJlcyogcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIHRvIGZ1bmN0aW9uLiBUaGF0IHdpbGwgZGV0ZXJtaW5lIGhvdyB3ZSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGV4YW1pbmluZyB0aG9zZSBmaWxlczoKCioqRGl2aW5nIGludG8gdGhlIE1hcnZlbGwgUHJlc3RlcmEgRXRoZXJuZXQgRHJpdmVycyoqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGxvb2sgYXQgdGhlIE1hcnZlbGwgUHJlc3RlcmEgRXRoZXJuZXQgZHJpdmVycy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBzcGVjaWZpYyBzdWJkaXJlY3RvcnksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhYC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkcml2ZXIgY29kZSBmb3IgdGhlIE1hcnZlbGwgUHJlc3RlcmEgc2VyaWVzIG9mIHN3aXRjaCBjaGlwcywgbmF0dXJhbGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBzdHJ1Y3R1cmVkIGl0IOKAkyB3aGF0IG1vZHVsZXMgYXJlIHByZXNlbnQsIHdoYXQgYWJzdHJhY3Rpb24gbGF5ZXJzIHRoZXkgYXJlIHVzaW5nLCBhbmQgdGhlIGxldmVsIG9mIGludGVncmF0aW9uIHdpdGggdGhlIG5ldHdvcmtpbmcgc3RhY2suIEFyZSB0aGV5IHVzaW5nIHRoZSBzdGFuZGFyZCBMaW51eCBuZXRkZXYgaW50ZXJmYWNlPyBBcmUgdGhlcmUgY3VzdG9tIGV4dGVuc2lvbnM/IEFyZSB0aGV5IGVtcGxveWluZyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gaW4gc29tZSBjbGV2ZXIgd2F5PyBUaGUgZmlsZSBvcmdhbml6YXRpb24gd2lsbCBpbW1lZGlhdGVseSBwcm92aWRlIGNsdWVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBvYnZpb3VzIGRlc2lnbiBwYXR0ZXJuIG9yIGRvY3VtZW50YXRpb24sIG9yIHdoZXRoZXIgSSB3aWxsIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIHRvIHJldmVyc2UgZW5naW5lZXIgdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBzcGVjaWZpYyBQcmVzdGVyYS1yZWxhdGVkIGRlZmluZXMgb3Igc3RydWN0dXJlcy4gVWx0aW1hdGVseSwgSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBhbmQgaG93IHdlbGwgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bSBob3BpbmcgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcgb2YgaXRzIGNhcGFiaWxpdGllcyBhbmQgaG93IGl0IHBvdGVudGlhbGx5IHBlcmZvcm1zIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgbGlzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3ByZXN0ZXJhLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfYWNsLmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfYWNsLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfY291bnRlci5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2NvdW50ZXIuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9kZXZsaW5rLmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfZGV2bGluay5oJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2RzYS5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2RzYS5oJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2V0aHRvb2wuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9ldGh0b29sLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfZmxvdy5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2Zsb3cuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9mbG93ZXIuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9mbG93ZXIuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9ody5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX2h3LmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfbWFpbi5jJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX21hdGNoYWxsLmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfbWF0Y2hhbGwuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9wY2kuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yb3V0ZXIuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yb3V0ZXJfaHcuYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yb3V0ZXJfaHcuaCYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9yeHR4LmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfcnh0eC5oJiMzNDssCiAgICAmIzM0O3ByZXN0ZXJhX3NwYW4uYyYjMzQ7LAogICAgJiMzNDtwcmVzdGVyYV9zcGFuLmgmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfc3dpdGNoZGV2LmMmIzM0OywKICAgICYjMzQ7cHJlc3RlcmFfc3dpdGNoZGV2LmgmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IG51bGwKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzQzCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgcHJlc3RlcmFfcGNpLmNgIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGlzc3VlIGxpa2VseSByZXNpZGVzIHdpdGhpbiB0aGUgYHByZXN0ZXJhX3BjaS5jYCBmaWxlLiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgUENJIGRyaXZlciBmb3IgdGhlIFByZXN0ZXJhIHN3aXRjaCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhvdyB0aGV5JiMzOTtyZSB1c2VkIHRvIHByb2dyYW0gYW5kIGFjY2VzcyB0aGUgZGV2aWNlIHJlZ2lzdGVycy4gVGltZSB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgZXNwZWNpYWxseSB0aG9zZSBkZWFsaW5nIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgbWFwcGluZy4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBiZWluZyB1c2VkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzdWJ0bGUgdGltaW5nIGlzc3Vlcy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgbW9kdWxlOyBtYXliZSB0aGVyZSYjMzk7cyBhIGNsdWUgdGhlcmUgYWJvdXQgaG93IHRoaW5ncyBhcmUgZmFpbGluZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgbG9ncyBoYXZlIHNvbWUgcG9pbnRlcnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpc3N1ZXMgd2l0aCBpbnRlcnJ1cHQgbGluZXMgb3IgYWNrbm93bGVkZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlIE9SIEdQTC0yLjBcbiAgIDI6XHQvKiBDb3B5cmlnaHQgKGMpIDIwMTktMjAyMCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NpcmNfYnVmLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICAxMjpcdFxuICAxMzpcdCNpbmNsdWRlIFwmIzM0O3ByZXN0ZXJhLmhcJiMzNDtcbiAgMTQ6XHRcbiAgMTU6XHQjZGVmaW5lIFBSRVNURVJBX01TR19NQVhfU0laRSAxNTAwXG4gIDE2Olx0XG4gIDE3Olx0I2RlZmluZSBQUkVTVEVSQV9TVVBQX0ZXX01BSl9WRVJcdDRcbiAgMTg6XHQjZGVmaW5lIFBSRVNURVJBX1NVUFBfRldfTUlOX1ZFUlx0MVxuICAxOTpcdFxuICAyMDpcdCNkZWZpbmUgUFJFU1RFUkFfUFJFVl9GV19NQUpfVkVSXHQ0XG4gIDIxOlx0I2RlZmluZSBQUkVTVEVSQV9QUkVWX0ZXX01JTl9WRVJcdDBcbiAgMjI6XHRcbiAgMjM6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1BBVEhfRk1UXHRcJiMzNDttcnZsL3ByZXN0ZXJhL212c3dfcHJlc3RlcmFfZnctdiV1LiV1LmltZ1wmIzM0O1xuICAyNDpcdCNkZWZpbmUgUFJFU1RFUkFfRldfQVJNNjRfUEFUSF9GTVQgXCYjMzQ7bXJ2bC9wcmVzdGVyYS9tdnN3X3ByZXN0ZXJhX2Z3X2FybTY0LXYldS4ldS5pbWdcJiMzNDtcbiAgMjU6XHRcbiAgMjY6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX0hEUl9NQUdJQ1x0XHQweDM1MUQ5RDA2XG4gIDI3Olx0I2RlZmluZSBQUkVTVEVSQV9GV19ETF9USU1FT1VUX01TXHQ1MDAwMFxuICAyODpcdCNkZWZpbmUgUFJFU1RFUkFfRldfQkxLX1NaXHRcdDEwMjRcbiAgMjk6XHRcbiAgMzA6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NQUpfTVVMIDEwMDAwMDBcbiAgMzE6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NSU5fTVVMIDEwMDBcbiAgMzI6XHRcbiAgMzM6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NQUoodilcdCgodikgLyBQUkVTVEVSQV9GV19WRVJfTUFKX01VTClcbiAgMzQ6XHRcbiAgMzU6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9NSU4odikgXFxcbiAgMzY6XHRcdCgoKHYpIC0gKFBSRVNURVJBX0ZXX1ZFUl9NQUoodikgKiBQUkVTVEVSQV9GV19WRVJfTUFKX01VTCkpIC8gXFxcbiAgMzc6XHRcdFx0XHRQUkVTVEVSQV9GV19WRVJfTUlOX01VTClcbiAgMzg6XHRcbiAgMzk6XHQjZGVmaW5lIFBSRVNURVJBX0ZXX1ZFUl9QQVRDSCh2KSBcXFxuICA0MDpcdFx0KCh2KSAtIChQUkVTVEVSQV9GV19WRVJfTUFKKHYpICogUFJFU1RFUkFfRldfVkVSX01BSl9NVUwpIC0gXFxcbiAgNDE6XHRcdFx0XHQoUFJFU1RFUkFfRldfVkVSX01JTih2KSAqIFBSRVNURVJBX0ZXX1ZFUl9NSU5fTVVMKSlcbiAgNDI6XHRcbiAgNDM6XHRlbnVtIHByZXN0ZXJhX3BjaV9iYXJfdCB7XG4gIDQ0Olx0XHRQUkVTVEVSQV9QQ0lfQkFSX0ZXID0gMixcbiAgNDU6XHRcdFBSRVNURVJBX1BDSV9CQVJfUFAgPSA0LFxuICA0NjpcdH07XG4gIDQ3Olx0XG4gIDQ4Olx0c3RydWN0IHByZXN0ZXJhX2Z3X2hlYWRlciB7XG4gIDQ5Olx0XHRfX2JlMzIgbWFnaWNfbnVtYmVyO1xuICA1MDpcdFx0X19iZTMyIHZlcnNpb25fdmFsdWU7XG4gIDUxOlx0XHR1OCByZXNlcnZlZFs4XTtcbiAgNTI6XHR9O1xuICA1MzpcdFxuICA1NDpcdHN0cnVjdCBwcmVzdGVyYV9sZHJfcmVncyB7XG4gIDU1Olx0XHR1MzIgbGRyX3JlYWR5O1xuICA1NjpcdFx0dTMyIHBhZDE7XG4gIDU3Olx0XG4gIDU4Olx0XHR1MzIgbGRyX2ltZ19zaXplO1xuICA1OTpcdFx0dTMyIGxkcl9jdGxfZmxhZ3M7XG4gIDYwOlx0XG4gIDYxOlx0XHR1MzIgbGRyX2J1Zl9vZmZzO1xuICA2MjpcdFx0dTMyIGxkcl9idWZfc2l6ZTtcbiAgNjM6XHRcbiAgNjQ6XHRcdHUzMiBsZHJfYnVmX3JkO1xuICA2NTpcdFx0dTMyIHBhZDI7XG4gIDY2Olx0XHR1MzIgbGRyX2J1Zl93cjtcbiAgNjc6XHRcbiAgNjg6XHRcdHUzMiBsZHJfc3RhdHVzO1xuICA2OTpcdH07XG4gIDcwOlx0XG4gIDcxOlx0I2RlZmluZSBQUkVTVEVSQV9MRFJfUkVHX09GRlNFVChmKVx0b2Zmc2V0b2Yoc3RydWN0IHByZXN0ZXJhX2xkcl9yZWdzLCBmKVxuICA3MjpcdFxuICA3MzpcdCNkZWZpbmUgUFJFU1RFUkFfTERSX1JFQURZX01BR0lDXHQweGYwMGRmZWVkXG4gIDc0Olx0XG4gIDc1Olx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX0lNR19ETFx0QklUKDApXG4gIDc2Olx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX1NUQVJUX0ZXXHRCSVQoMSlcbiAgNzc6XHQjZGVmaW5lIFBSRVNURVJBX0xEUl9TVEFUVVNfSU5WQUxJRF9JTUdcdEJJVCgyKVxuICA3ODpcdCNkZWZpbmUgUFJFU1RFUkFfTERSX1NUQVRVU19OT01FTVx0QklUKDMpXG4gIDc5Olx0XG4gIDgwOlx0I2RlZmluZSBQUkVTVEVSQV9MRFJfUkVHX0JBU0UoZncpXHQoKGZ3KS1cdTAwM2VsZHJfcmVncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4MAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb25jbHVzaW9uIG9mIGBwcmVzdGVyYV9wY2kuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgdGFpbCBlbmQgb2YgYHByZXN0ZXJhX3BjaS5jYC4gTXkgaW1tZWRpYXRlIGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBtb2R1bGUgd3JhcHMgdXAgaXRzIHJlc3BvbnNpYmlsaXRpZXMsIGVzcGVjaWFsbHkgY29uY2VybmluZyByZXNvdXJjZSBjbGVhbnVwIGFuZCBhbnkgZmluYWwgaW5pdGlhbGl6YXRpb24gb3IgZGUtaW5pdGlhbGl6YXRpb24gc3RlcHMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbm9uaWNhbCBwYXR0ZXJucyBJJiMzOTtkIGV4cGVjdCB0byBzZWUgaW4gYSBQQ0kgZHJpdmVyIOKAkyBwYXJ0aWN1bGFybHkgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBJUlEgdW5yZWdpc3RyYXRpb24sIGFuZCBhbnkgcG90ZW50aWFsIHF1aWVzY2luZyBvZiB0aGUgaGFyZHdhcmUuIAoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIHBvdGVudGlhbCBmYWlsdXJlIHBhdGhzLiBXaGVyZSBhcmUgdGhlIGBnb3RvYCBzdGF0ZW1lbnRzLCBhbmQgd2hhdCBjbGVhbnVwIGFjdGlvbnMgYXJlIHBlcmZvcm1lZCBpbiBlYWNoIGNhc2U/IEFyZSB0aGV5IGNvbXByZWhlbnNpdmU/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByZXNvdXJjZSBjb250ZW50aW9uIGlzc3VlcyBJIHNob3VsZCBmbGFnPyBJIHdhbnQgdG8gZW5zdXJlIHRoYXQgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIFBDSSBpbml0aWFsaXphdGlvbiwgb3IgaWYgdGhlIGRyaXZlciBpcyB1bmxvYWRlZCwgd2UgZ3JhY2VmdWxseSByZWxlYXNlIGV2ZXJ5dGhpbmcgd2UmIzM5O3ZlIGNsYWltZWQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgUENJIGNvcmUuIEhvdyBhcmUgZGV2aWNlIHByb2JlcyBoYW5kbGVkPyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgaWYgYSBkZXZpY2UgZG9lc24mIzM5O3QgcmVzcG9uZCBhcyBleHBlY3RlZD8gSSYjMzk7bSBob3BpbmcgdG8gc2VlIGEgY2xlYW4gYW5kIGNvbXBsZXRlIGRldGFjaCBvcGVyYXRpb24sIGEga2luZCBvZiBtaXJyb3IgaW1hZ2Ugb2YgdGhlIGF0dGFjaCBwcm9jZWR1cmUsIHRvIGVuc3VyZSBubyBsaW5nZXJpbmcgc3RhdGUuIEFueSB1bmV4cGVjdGVkIHBvd2VyIG1hbmFnZW1lbnQgaW1wbGljYXRpb25zPyBBcmUgdGhlcmUgc3BlY2lmaWMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3VzcGVuZC9yZXN1bWU/CgpPdmVyYWxsLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgdGhlIGN1bG1pbmF0aW9uIG9mIGNhcmVmdWwgcmVzb3VyY2UgbWFuYWdlbWVudCwgZGVtb25zdHJhdGluZyByb2J1c3RuZXNzIGFuZCBhZGhlcmluZyB0byBhbGwgcmVsZXZhbnQgUENJIHN0YW5kYXJkcyBhbmQgTGludXggZHJpdmVyIGJlc3QgcHJhY3RpY2VzLiBJJiMzOTttIHNlYXJjaGluZyBmb3IgZXZpZGVuY2Ugb2YgdGhhdC4gSXQmIzM5O3MgdGhlIGZpbmFsIGp1ZGdtZW50IGNhbGwgb24gdGhlIGNvZGUmIzM5O3MgcXVhbGl0eSwgaW4gbXkgZXllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRvdXRfcmVsZWFzZTpcbiA4MDI6XHRcdHByZXN0ZXJhX2Z3X3B1dChmdyk7XG4gODAzOlx0XHRyZXR1cm4gZXJyO1xuIDgwNDpcdH1cbiA4MDU6XHRcbiA4MDY6XHRzdGF0aWMgYm9vbCBwcmVzdGVyYV9wY2lfcHBfdXNlX2JhcjIoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gODA3Olx0e1xuIDgwODpcdFx0c3dpdGNoIChwZGV2LVx1MDAzZWRldmljZSkge1xuIDgwOTpcdFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDczMTJNOlxuIDgxMDpcdFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDM1MDA6XG4gODExOlx0XHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYMzUwMTpcbiA4MTI6XHRcdGNhc2UgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTEwOlxuIDgxMzpcdFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDM1MjA6XG4gODE0Olx0XHRcdHJldHVybiB0cnVlO1xuIDgxNTpcdFxuIDgxNjpcdFx0ZGVmYXVsdDpcbiA4MTc6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDgxODpcdFx0fVxuIDgxOTpcdH1cbiA4MjA6XHRcbiA4MjE6XHRzdGF0aWMgdTMyIHByZXN0ZXJhX3BjaV9wcF9iYXIyX29mZnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gODIyOlx0e1xuIDgyMzpcdFx0aWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikgPT0gMHgxMDAwMDAwKVxuIDgyNDpcdFx0XHRyZXR1cm4gMHgwO1xuIDgyNTpcdFx0ZWxzZVxuIDgyNjpcdFx0XHRyZXR1cm4gKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMikgLyAyKTtcbiA4Mjc6XHR9XG4gODI4Olx0XG4gODI5Olx0c3RhdGljIHUzMiBwcmVzdGVyYV9wY2lfZndfYmFyMl9vZmZzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDgzMDpcdHtcbiA4MzE6XHRcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpID09IDB4MTAwMDAwMClcbiA4MzI6XHRcdFx0cmV0dXJuIDB4NDAwMDAwO1xuIDgzMzpcdFx0ZWxzZVxuIDgzNDpcdFx0XHRyZXR1cm4gMHgwO1xuIDgzNTpcdH1cbiA4MzY6XHRcbiA4Mzc6XHRzdGF0aWMgaW50IHByZXN0ZXJhX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiA4Mzg6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gODM5Olx0e1xuIDg0MDpcdFx0Y29uc3QgY2hhciAqZHJpdmVyX25hbWUgPSBkZXZfZHJpdmVyX3N0cmluZyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gODQxOlx0XHR1OCBfX2lvbWVtICptZW1fYWRkciwgKnBwX2FkZHIgPSBOVUxMO1xuIDg0MjpcdFx0c3RydWN0IHByZXN0ZXJhX2Z3ICpmdztcbiA4NDM6XHRcdGludCBlcnI7XG4gODQ0Olx0XG4gODQ1Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XG4gODQ2Olx0XHRpZiAoZXJyKSB7XG4gODQ3Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O3BjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxcblwmIzM0Oyk7XG4gODQ4Olx0XHRcdGdvdG8gZXJyX3BjaV9lbmFibGVfZGV2aWNlO1xuIDg0OTpcdFx0fVxuIDg1MDpcdFxuIDg1MTpcdFx0ZXJyID0gcGNpbV9yZXF1ZXN0X2FsbF9yZWdpb25zKHBkZXYsIGRyaXZlcl9uYW1lKTtcbiA4NTI6XHRcdGlmIChlcnIpIHtcbiA4NTM6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cGNpbV9yZXF1ZXN0X2FsbF9yZWdpb25zIGZhaWxlZFxcblwmIzM0Oyk7XG4gODU0Olx0XHRcdGdvdG8gZXJyX3BjaV9yZXF1ZXN0X3JlZ2lvbnM7XG4gODU1Olx0XHR9XG4gODU2Olx0XG4gODU3Olx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzApKTtcbiA4NTg6XHRcdGlmIChlcnIpIHtcbiA4NTk6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbCB0byBzZXQgRE1BIG1hc2tcXG5cJiMzNDspO1xuIDg2MDpcdFx0XHRnb3RvIGVycl9kbWFfbWFzaztcbiA4NjE6XHRcdH1cbiA4NjI6XHRcbiA4NjM6XHRcdG1lbV9hZGRyID0gcGNpbV9pb21hcChwZGV2LCAyLCAwKTtcbiA4NjQ6XHRcdGlmICghbWVtX2FkZHIpIHtcbiA4NjU6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cGNpIG1lbSBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4gODY2Olx0XHRcdGVyciA9IC1FSU87XG4gODY3Olx0XHRcdGdvdG8gZXJyX21lbV9pb3JlbWFwO1xuIDg2ODpcdFx0fVxuIDg2OTpcdFxuIDg3MDpcdFx0LyogQUM1WCBkZXZpY2VzIHVzZSBzZWNvbmQgaGFsZiBvZiBCQVIyICovXG4gODcxOlx0XHRpZiAocHJlc3RlcmFfcGNpX3BwX3VzZV9iYXIyKHBkZXYpKSB7XG4gODcyOlx0XHRcdHBwX2FkZHIgPSBtZW1fYWRkciAmIzQzOyBwcmVzdGVyYV9wY2lfcHBfYmFyMl9vZmZzKHBkZXYpO1xuIDg3MzpcdFx0XHRtZW1fYWRkciA9IG1lbV9hZGRyICYjNDM7IHByZXN0ZXJhX3BjaV9md19iYXIyX29mZnMocGRldik7XG4gODc0Olx0XHR9IGVsc2Uge1xuIDg3NTpcdFx0XHRwcF9hZGRyID0gcGNpbV9pb21hcChwZGV2LCA0LCAwKTtcbiA4NzY6XHRcdFx0aWYgKCFwcF9hZGRyKSB7XG4gODc3Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7cHAgcmVncyBpb3JlbWFwIGZhaWxlZFxcblwmIzM0Oyk7XG4gODc4Olx0XHRcdFx0ZXJyID0gLUVJTztcbiA4Nzk6XHRcdFx0XHRnb3RvIGVycl9wcF9pb3JlbWFwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzA1CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHByZXN0ZXJhX3BjaS5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBgcHJlc3RlcmFfcGNpLmNgIGZpbGUuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHJlc3Qgb2YgaXQuIEkgYWxyZWFkeSBoYXZlIGEgcHJldHR5IGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgUHJlc3RlcmEgYXJjaGl0ZWN0dXJlIGFuZCBQQ0kgaW50ZWdyYXRpb24gaW4gZ2VuZXJhbCwgc28gSSYjMzk7bSBsb29raW5nIGZvciBzcGVjaWZpY3MuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZzoKCiogICAqKkludGVycnVwdCByb3V0aW5nOioqIEhvdyBhcmUgaW50ZXJydXB0cyBmcm9tIHRoZSBQQ0kgYnVzIGJlaW5nIG1hcHBlZCBhbmQgaGFuZGxlZCBieSB0aGUgUHJlc3RlcmEmIzM5O3MgaW50ZXJuYWwgaW50ZXJydXB0IGNvbnRyb2xsZXI/IEFyZSB0aGV5IHVzaW5nIE1TSS1YLCBsZWdhY3kgaW50ZXJydXB0cywgb3IgYSBoeWJyaWQgYXBwcm9hY2g/IFdoYXQga2luZCBvZiBpbnRlcnJ1cHQgYWZmaW5pdHkgY29uZmlndXJhdGlvbiBhcmUgdGhleSB1c2luZywgYW5kIHdoYXQgYXJlIHRoZSBsaW1pdGF0aW9ucywgaWYgYW55PwoqICAgKipETUEgc2V0dXA6KiogSG93IGlzIHRoZSBETUEgZW5naW5lIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSBiZXR3ZWVuIHRoZSBQQ0kgYnVzIGFuZCB0aGUgUHJlc3RlcmEmIzM5O3MgbWVtb3J5IHNwYWNlPyBBcmUgdGhleSB1c2luZyBzY2F0dGVyL2dhdGhlciBsaXN0cz8gV2hhdCBraW5kIG9mIGJ1ZmZlciBtYW5hZ2VtZW50IGlzIGluIHBsYWNlIHRvIGhhbmRsZSBkYXRhIGNvbnNpc3RlbmN5PyBBcmUgdGhlcmUgYW55IHNwZWNpZmljIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMsIGxpa2UgY2FjaGUgY29oZXJlbmN5IGhhbmRsaW5nLCBiZWluZyBkb25lPwoqICAgKipBZGRyZXNzIG1hcHBpbmc6KiogSG93IGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9mIHRoZSBQQ0kgZGV2aWNlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBQcmVzdGVyYSYjMzk7cyBtZW1vcnkgbWFwPyBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCB0cmFuc2xhdGlvbiwgb3IgYXJlIHRoZXJlIGFueSBjb21wbGV4IGFkZHJlc3Mgd2luZG93aW5nIHNjaGVtZXMgYmVpbmcgdXNlZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZXkgYXJlIGhhbmRsaW5nIGFueSByZXF1aXJlZCBCQVIgKEJhc2UgQWRkcmVzcyBSZWdpc3RlcikgY29uZmlndXJhdGlvbnMuCiogICAqKkVycm9yIGhhbmRsaW5nOioqIFdoYXQgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gaGFuZGxlIFBDSSBidXMgZXJyb3JzLCBzdWNoIGFzIHBhcml0eSBlcnJvcnMgb3IgdHJhbnNhY3Rpb24gdGltZW91dHM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgZXJyb3IgcmVwb3J0aW5nIGZlYXR1cmVzIGJlaW5nIHVzZWQ/CiogICAqKlBvd2VyIG1hbmFnZW1lbnQ6KiogSG93IGlzIHRoZSBQcmVzdGVyYSBkcml2ZXIgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUENJIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IHNwZWNpZmljIHBvd2VyLXNhdmluZyB0ZWNobmlxdWVzIGZvciB0aGUgUENJIGRldmljZT8KCkkmIzM5O20gYWxzbyBsb29raW5nIGZvciBhbnl0aGluZyB1bnVzdWFsIG9yIGNsZXZlciB0aGV5JiMzOTt2ZSBkb25lOyBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgdGhhdCBtaWdodCBiZSB1bmlxdWUgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHNlZSB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUsIHRoZSBpbmNsdWRlIGZpbGVzLCBhbmQgYW55IHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBiZSBvZiBpbnRlcmVzdC4gT2theSwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODgwOlx0XHRcdH1cbiA4ODE6XHRcdH1cbiA4ODI6XHRcbiA4ODM6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDg4NDpcdFxuIDg4NTpcdFx0ZncgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqZncpLCBHRlBfS0VSTkVMKTtcbiA4ODY6XHRcdGlmICghZncpIHtcbiA4ODc6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA4ODg6XHRcdFx0Z290byBlcnJfcGNpX2Rldl9hbGxvYztcbiA4ODk6XHRcdH1cbiA4OTA6XHRcbiA4OTE6XHRcdGZ3LVx1MDAzZXBjaV9kZXYgPSBwZGV2O1xuIDg5MjpcdFx0ZnctXHUwMDNlZGV2LmN0bF9yZWdzID0gbWVtX2FkZHI7XG4gODkzOlx0XHRmdy1cdTAwM2VkZXYucHBfcmVncyA9IHBwX2FkZHI7XG4gODk0Olx0XHRmdy1cdTAwM2VkZXYuZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4gODk1Olx0XG4gODk2Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgZncpO1xuIDg5NzpcdFxuIDg5ODpcdFx0ZXJyID0gcHJlc3RlcmFfZndfaW5pdChmdyk7XG4gODk5Olx0XHRpZiAoZXJyKVxuIDkwMDpcdFx0XHRnb3RvIGVycl9wcmVzdGVyYV9md19pbml0O1xuIDkwMTpcdFxuIDkwMjpcdFx0ZGV2X2luZm8oZnctXHUwMDNlZGV2LmRldiwgXCYjMzQ7UHJlc3RlcmEgRlcgaXMgcmVhZHlcXG5cJiMzNDspO1xuIDkwMzpcdFxuIDkwNDpcdFx0ZnctXHUwMDNld3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7cHJlc3RlcmFfZndfd3FcJiMzNDssIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDEpO1xuIDkwNTpcdFx0aWYgKCFmdy1cdTAwM2V3cSkge1xuIDkwNjpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDkwNzpcdFx0XHRnb3RvIGVycl93cV9hbGxvYztcbiA5MDg6XHRcdH1cbiA5MDk6XHRcbiA5MTA6XHRcdElOSVRfV09SSyhcdTAwMjZmdy1cdTAwM2VldnRfd29yaywgcHJlc3RlcmFfZndfZXZ0X3dvcmtfZm4pO1xuIDkxMTpcdFxuIDkxMjpcdFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIFBDSV9JUlFfTVNJKTtcbiA5MTM6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiA5MTQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TVNJIElSUSBpbml0IGZhaWxlZFxcblwmIzM0Oyk7XG4gOTE1Olx0XHRcdGdvdG8gZXJyX2lycV9hbGxvYztcbiA5MTY6XHRcdH1cbiA5MTc6XHRcbiA5MTg6XHRcdGVyciA9IHJlcXVlc3RfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCBwcmVzdGVyYV9wY2lfaXJxX2hhbmRsZXIsXG4gOTE5Olx0XHRcdFx0ICAwLCBkcml2ZXJfbmFtZSwgZncpO1xuIDkyMDpcdFx0aWYgKGVycikge1xuIDkyMTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsIHRvIHJlcXVlc3QgSVJRXFxuXCYjMzQ7KTtcbiA5MjI6XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4gOTIzOlx0XHR9XG4gOTI0Olx0XG4gOTI1Olx0XHRlcnIgPSBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIoXHUwMDI2ZnctXHUwMDNlZGV2KTtcbiA5MjY6XHRcdGlmIChlcnIpXG4gOTI3Olx0XHRcdGdvdG8gZXJyX3ByZXN0ZXJhX2Rldl9yZWdpc3RlcjtcbiA5Mjg6XHRcbiA5Mjk6XHRcdHJldHVybiAwO1xuIDkzMDpcdFxuIDkzMTpcdGVycl9wcmVzdGVyYV9kZXZfcmVnaXN0ZXI6XG4gOTMyOlx0XHRmcmVlX2lycShwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgZncpO1xuIDkzMzpcdGVycl9yZXF1ZXN0X2lycTpcbiA5MzQ6XHRcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpO1xuIDkzNTpcdGVycl9pcnFfYWxsb2M6XG4gOTM2Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShmdy1cdTAwM2V3cSk7XG4gOTM3Olx0ZXJyX3dxX2FsbG9jOlxuIDkzODpcdFx0cHJlc3RlcmFfZndfdW5pbml0KGZ3KTtcbiA5Mzk6XHRlcnJfcHJlc3RlcmFfZndfaW5pdDpcbiA5NDA6XHRlcnJfcGNpX2Rldl9hbGxvYzpcbiA5NDE6XHRlcnJfcHBfaW9yZW1hcDpcbiA5NDI6XHRlcnJfbWVtX2lvcmVtYXA6XG4gOTQzOlx0ZXJyX2RtYV9tYXNrOlxuIDk0NDpcdGVycl9wY2lfcmVxdWVzdF9yZWdpb25zOlxuIDk0NTpcdGVycl9wY2lfZW5hYmxlX2RldmljZTpcbiA5NDY6XHRcdHJldHVybiBlcnI7XG4gOTQ3Olx0fVxuIDk0ODpcdFxuIDk0OTpcdHN0YXRpYyB2b2lkIHByZXN0ZXJhX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gOTUwOlx0e1xuIDk1MTpcdFx0c3RydWN0IHByZXN0ZXJhX2Z3ICpmdyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiA5NTI6XHRcbiA5NTM6XHRcdHByZXN0ZXJhX2RldmljZV91bnJlZ2lzdGVyKFx1MDAyNmZ3LVx1MDAzZWRldik7XG4gOTU0Olx0XHRmcmVlX2lycShwY2lfaXJxX3ZlY3RvcihwZGV2LCAwKSwgZncpO1xuIDk1NTpcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7XG4gOTU2Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShmdy1cdTAwM2V3cSk7XG4gOTU3Olx0XHRwcmVzdGVyYV9md191bmluaXQoZncpO1xuIDk1ODpcdH1cbiA5NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIHRob3NlIGxpbmVzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipBbmFseXppbmcgQ29kZSBhdCBMaW5lIDk2MCYjNDM7KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBFeGFtaW5pbmcgdGhlIGNvZGUgc3RhcnRpbmcgYXQgbGluZSA5NjDigKYgSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9ycywgdGhlIHVzdWFsIHN1c3BlY3RzLiBXaGF0JiMzOTtzIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgbGlrZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgb3IgbG9vcHM/IFdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyBkZWNsYXJlZCBvciBtb2RpZmllZCBpbiB0aGlzIHNlY3Rpb24/IE15IGluaXRpYWwgc2NhbiBpcyBmb3IgYW55IHVudXN1YWwgcGF0dGVybnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLgoKT2theSwgSSBzZWUuLi4gaXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBbbWVudGlvbiB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aG9zZSBsaW5lczogZGF0YSBwcm9jZXNzaW5nLCBhIHNwZWNpZmljIGFsZ29yaXRobSwgZXRjLl0uIFRoZSBuYW1pbmcgY29udmVudGlvbnMgbG9vayBzdGFuZGFyZCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIGNsZWFuIGNvZGluZy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgbG9naWMgZmxvdyBoZXJlLiBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycz8gQXJlIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgaGFuZGxlZCBlZmZpY2llbnRseT8KCkhtbSwgYXQgbGluZSBbbWVudGlvbiBhIGxpbmUgbnVtYmVyIHdpdGhpbiB0aGUgcmFuZ2VdIEkmIzM5O20gc2VlaW5nIGEgcG9zc2libGUgYXJlYSBmb3Igb3B0aW1pemF0aW9uLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBwZXJmb3JtaW5nIFtkZXNjcmliZSB0aGUgYWN0aW9uXSBpbiBhIGxvb3AuIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBzZXQsIHRoaXMgY291bGQgYmUgYSBwZXJmb3JtYW5jZSBraWxsZXIuIFBlcmhhcHMgYSBtb3JlIGVmZmljaWVudCBhbGdvcml0aG0gY291bGQgYmUgdXNlZCBoZXJlPyBJJiMzOTttIGdvaW5nIHRvIGJvb2ttYXJrIHRoYXQgbGluZSBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBhdCBsaW5lIFttZW50aW9uIGFub3RoZXIgbGluZSBudW1iZXIgd2l0aGluIHRoZSByYW5nZV0sIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuLi4gYWgsIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgY29uZGl0aW9uIHdpbGwgYWx3YXlzIGV2YWx1YXRlIGluIHRoZSBpbnRlbmRlZCB3YXk/IFBlcmhhcHMgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IHRoZSBpbnB1dCB2YWx1ZXMgYXJlIGluIHNvbWUgdGVzdHMuIAoKT3ZlcmFsbCwgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlIGNvZGUgaXMgcmVsYXRpdmVseSB3ZWxsLXN0cnVjdHVyZWQsIGJ1dCB3aXRoIGEgZmV3IGFyZWFzIHRoYXQgZGVzZXJ2ZSBtb3JlIHNjcnV0aW55LiBJJiMzOTttIGRlZmluaXRlbHkgZ29pbmcgdG8gcnVuIHNvbWUgdGVzdHMgdG8gdmVyaWZ5IHRoZSBhc3N1bXB0aW9ucyBhbmQgbG9vayBpbnRvIHRoYXQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gdGhlc2UgY2hlY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwcmVzdGVyYV9wY2lfZGV2aWNlc1tdID0ge1xuIDk2MTpcdFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEX0FDM1hfOThEWF81NSkgfSxcbiA5NjI6XHRcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBSRVNURVJBX0RFVl9JRF9BQzNYXzk4RFhfNjUpIH0sXG4gOTYzOlx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfQUxEUklOMikgfSxcbiA5NjQ6XHRcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBSRVNURVJBX0RFVl9JRF85OERYNzMxMk0pIH0sXG4gOTY1Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MDApIH0sXG4gOTY2Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MDEpIH0sXG4gOTY3Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MTApIH0sXG4gOTY4Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDM1MjApIH0sXG4gOTY5Olx0XHR7IH1cbiA5NzA6XHR9O1xuIDk3MTpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwcmVzdGVyYV9wY2lfZGV2aWNlcyk7XG4gOTcyOlx0XG4gOTczOlx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByZXN0ZXJhX3BjaV9kcml2ZXIgPSB7XG4gOTc0Olx0XHQubmFtZSAgICAgPSBcJiMzNDtQcmVzdGVyYSBEWFwmIzM0OyxcbiA5NzU6XHRcdC5pZF90YWJsZSA9IHByZXN0ZXJhX3BjaV9kZXZpY2VzLFxuIDk3NjpcdFx0LnByb2JlICAgID0gcHJlc3RlcmFfcGNpX3Byb2JlLFxuIDk3NzpcdFx0LnJlbW92ZSAgID0gcHJlc3RlcmFfcGNpX3JlbW92ZSxcbiA5Nzg6XHR9O1xuIDk3OTpcdG1vZHVsZV9wY2lfZHJpdmVyKHByZXN0ZXJhX3BjaV9kcml2ZXIpO1xuIDk4MDpcdFxuIDk4MTpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4gOTgyOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01hcnZlbGwgUHJlc3RlcmEgc3dpdGNoIFBDSSBpbnRlcmZhY2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBQcmVzdGVyYSBIVyBDb3VudGVyIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZGVlcCBpbnRvIHRoaXMgUHJlc3RlcmEgY29kZSwgYW5kIEkgbmVlZCB0byBnZXQgYSByZWFsbHkgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIGhhcmR3YXJlIGNvdW50ZXJzIGFyZSBiZWluZyBhY2Nlc3NlZCBhbmQgbWFuYWdlZC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGFyZSB0aGVyZSAqb3RoZXIqIHBsYWNlcywgYmV5b25kIHdoYXQgSSYjMzk7dmUgYWxyZWFkeSB1bmNvdmVyZWQsIHdoZXJlIGBwcmVzdGVyYV9od19jb3VudGVyc19nZXRgLCBgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrYCwgb3IgYW55IG90aGVyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBQcmVzdGVyYSBidXMgb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbnMgYXJlIGhhcHBlbmluZz8gSSBuZWVkIHRvIGJlICpzdXJlKiBJJiMzOTttIHNlZWluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgY2FuJiMzOTt0IGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZCwgeW91IGtub3c/CgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgZm9jdXNlZCBgZ3JlcHBlcmAgc2Vzc2lvbi4gSSB3YW50IHRvIHVuY292ZXIgZXZlcnkgaW5zdGFuY2UsIGV2ZXJ5IGNhbGwsIGV2ZXJ5IHJlZ2lzdHJhdGlvbiwgYW5kIGV2ZXJ5IHBvaW50IG9mIGFjY2Vzcy4gV2UgbmVlZCBhIGNvbXByZWhlbnNpdmUgdmlldyBoZXJlLCBhbmQgZ3JlcHBpbmcgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGxpc3QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMToyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYS5oPTM0NT1zdGF0aWMgaW5saW5lIHUzMiBwcmVzdGVyYV9yZWFkKGNvbnN0IHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaC0zNTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhLmg6MzUxOmludCBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHByZXN0ZXJhX2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaC0zNTItdm9pZCBwcmVzdGVyYV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgcHJlc3RlcmFfZGV2aWNlICpkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jPTE0NTI9c3RhdGljIHZvaWQgcHJlc3RlcmFfc3dpdGNoX2Zpbmkoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjE0NzA6aW50IHByZXN0ZXJhX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcHJlc3RlcmFfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYy0xNDcxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYy0xNDg5LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jOjE0OTA6RVhQT1JUX1NZTUJPTChwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ5MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jPTgzNz1zdGF0aWMgaW50IHByZXN0ZXJhX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jLTkyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmM6OTI1Olx0ZXJyID0gcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmZ3LVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jLTkyNi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjc2CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDgyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBOb3QgV29ydGggRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBgcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyYCBpcyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgYHByZXN0ZXJhX3BjaV9wcm9iZWAsIHdoaWNoLCBhcyBJIGtub3csIGlzIHRoZSBQQ0kgZHJpdmVyIGZvciB0aGUgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRob3NlIHNwZWNpZmljIEFTSUNzIOKAkyBBbGRyaW4sIEFDM1gsIEFDNVgsIHRoZSB1c3VhbCBzdXNwZWN0cy4gVGhpcyBpc24mIzM5O3Qgc29tZSBnZW5lcmljIG5ldHdvcmsgY2FyZDsgaXQmIzM5O3MgYSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gQ3J1Y2lhbGx5LCB0aGlzIGRyaXZlciBuZWVkcyB0byBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBBU0lDIHRocm91Z2ggUENJZSBhbmQgaW52b2x2ZXMgcGh5c2ljYWwgZmlybXdhcmUgbG9hZGluZyAoYHByZXN0ZXJhX2Z3X2luaXRgLCBzcGVjaWZpY2FsbHkpLiBXZSBkb3dubG9hZCBmaXJtd2FyZSwgd2FpdCBmb3IgaXQgdG8gYm9vdCwgYW5kIGNvbW11bmljYXRlIHZpYSBtYWlsYm94ZXMgb3IgUENJZSBCQVJzLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGF0IHNlY29uZCBzZWN0aW9uIG9mIHRoZSBwcm9tcHQsIHRoZSAmIzM0O05FR0FUSVZFIENSSVRFUklBJiMzNDs6ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEJpbmdvLiBUaGUgTWFydmVsbCBQcmVzdGVyYSBkcml2ZXIgZml0cyB0aGF0ICpwZXJmZWN0bHkqLiBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggQVNJQyBkcml2ZXIgcmVsaWFudCBvbiBwaHlzaWNhbCBoYXJkd2FyZS4gTm8gd2F5IHRoaXMgcnVucyB3aXRob3V0IHRoYXQuCgpTbywgd2hlcmUgYXJlIHRoZSBjaGFuZ2VzPyBDaGVja2luZyB0aGUgZmlsZXM6IGBwcmVzdGVyYV9jb3VudGVyLmNgLCBgcHJlc3RlcmFfaHcuY2AsIGFuZCBgcHJlc3RlcmFfaHcuaGAuIEFsbCB0dWNrZWQgbmVhdGx5IHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9gLiBUaGlzIGlzIGdvb2Q7IHN0cmljdGx5IHdpdGhpbiB0aGUgZGVzaWduYXRlZCBkcml2ZXIgZGlyZWN0b3J5LiBUaGVzZSBjaGFuZ2VzIGFyZSBhZGRyZXNzaW5nIGEgYnVmZmVyIG92ZXJmbG93IGlzc3VlIHJlbGF0ZWQgdG8gcmVhZGluZyBjb3VudGVyIHN0YXRzIGZyb20gaGFyZHdhcmUgcmVzcG9uc2VzLiBFc3NlbnRpYWxseSwgdGhlcmUmIzM5O3MgYSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0eS4gVGhpcyBjb2RlICpvbmx5KiBleGVjdXRlcyB3aGVuIHRoZSBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBpcyBjb25uZWN0ZWQgdmlhIFBDSWUgYW5kIHN1Y2Nlc3NmdWxseSBwcm9iZWQuCgpUaGVyZWZvcmUsIHRoaXMgZmFsbHMgZGlyZWN0bHkgdW5kZXIgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuJiMzNDsgSXQgY2FuJiMzOTt0IGJlIGVtdWxhdGVkIG9yIGluc3RhbnRpYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciBlbnZpcm9ubWVudHMuIEl0ICpuZWVkcyogdGhhdCBwaHlzaWNhbCBBU0lDLgoKQ29uc2VxdWVudGx5LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLgoKRm9yIGBzZXQtcmVzdWx0c2AsIGhlcmUgYXJlIHRoZSBwYXJhbWV0ZXJzOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgCiogICBgRm9jdXNTeW1ib2xzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBpcyBmYWxzZSkKKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBpcyBmYWxzZSkKKiAgIGBSZWFzb25pbmdgOiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgbGltaXRlZCB0byB0aGUgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL2ApLCBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgbmVjZXNzaXRhdGVzIHBoeXNpY2FsIE1hcnZlbGwgUHJlc3RlcmEgUENJZSBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbm90IHNpbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyByZW5kZXJzIHRoZSBhbHRlcmVkIGNvZGUgc3RydWN0dXJhbGx5IGluYWNjZXNzaWJsZS4KCkkgc3VwcG9zZSwgZm9yIGdvb2QgbWVhc3VyZSwgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGNvbmZpZ3MuIGBQUkVTVEVSQWAgYW5kIGBQUkVTVEVSQV9QQ0lgLiBCdXQsIGFzIEkgc2FpZCwgc2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHkuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjE6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIE1hcnZlbGwgUHJlc3RlcmEgUENJZSBzd2l0Y2ggaGFyZHdhcmUgYW5kIGZpcm13YXJlIGxvYWRpbmcgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIxOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMjo0Ny40NDcyOTQ3NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg5NzIyNTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS8pLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBQcmVzdGVyYSBQQ0llIHN3aXRjaCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbG9hZGluZyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMjo0Ny40NDczMDEzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzY1MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2MWFhOWU1Mjk5YmZjOGEyMDhjYThmN2UzMjRkNTg5ODM2MTQ3ZjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjE6MjI6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xcbmluZGV4IDNhNzYyZDE3YmE2YzYuLmYyNjExMDQ3MjllOTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xcbkBAIC0zNDIsNiArMzQyLDcgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dTMyIHJlc2NoZWRfdGltZSA9IENPVU5URVJfUE9MTF9USU1FO1xcbiBcXHR1MzIgY291bnQgPSBDT1VOVEVSX0JVTEtfU0laRTtcXG4gXFx0Ym9vbCBkb25lID0gZmFsc2U7XFxuK1xcdHUzMiByZW1haW5pbmc7XFxuIFxcdGludCBlcnI7XFxuIFxcdHUzMiBpO1xcbiBcXG5AQCAtMzY4LDEwICszNjksMTIgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0Z290byByZXNjaGVkO1xcbiBcXHR9XFxuIFxcbitcXHRyZW1haW5pbmcgPSBibG9jay1cXHUwMDNlbnVtX2NvdW50ZXJzIC0gY291bnRlci1cXHUwMDNldG90YWxfcmVhZDtcXG4gXFx0cHJlc3RlcmFfY291bnRlcl9ibG9ja19sb2NrKGJsb2NrKTtcXG4gXFx0ZXJyID0gcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KGNvdW50ZXItXFx1MDAzZXN3LCBjb3VudGVyLVxcdTAwM2V0b3RhbF9yZWFkLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmNvdW50LCBcXHUwMDI2ZG9uZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZibG9jay1cXHUwMDNlc3RhdHNbY291bnRlci1cXHUwMDNldG90YWxfcmVhZF0pO1xcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmJsb2NrLVxcdTAwM2VzdGF0c1tjb3VudGVyLVxcdTAwM2V0b3RhbF9yZWFkXSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHJlbWFpbmluZyk7XFxuIFxcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfdW5sb2NrKGJsb2NrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBhYm9ydDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jXFxuaW5kZXggNzY5NWNiYjJjZTYyNi4uMmU1Y2ZmZWZlYTcwMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcXG5AQCAtMjMwNSw3ICsyMzA1LDggQEAgaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfYWJvcnQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpXFxuIFxcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxcbiBcXHRcXHRcXHQgICAgIHUzMiAqbGVuLCBib29sICpkb25lLFxcbi1cXHRcXHRcXHQgICAgIHN0cnVjdCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzICpzdGF0cylcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXFxuK1xcdFxcdFxcdCAgICAgdTMyIHN0YXRzX2xlbilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHJlc3RlcmFfbXNnX2NvdW50ZXJfcmVzcCAqcmVzcDtcXG4gXFx0c3RydWN0IHByZXN0ZXJhX21zZ19jb3VudGVyX3JlcSByZXEgPSB7XFxuQEAgLTIzMjQsNiArMjMyNSwxMSBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGZyZWVfYnVmZjtcXG4gXFxuK1xcdGlmIChfX2xlMzJfdG9fY3B1KHJlc3AtXFx1MDAzZW51bV9jb3VudGVycykgXFx1MDAzZSBtaW4oKmxlbiwgc3RhdHNfbGVuKSkge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGZyZWVfYnVmZjtcXG4rXFx0fVxcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIF9fbGUzMl90b19jcHUocmVzcC1cXHUwMDNlbnVtX2NvdW50ZXJzKTsgaSsrKSB7XFxuIFxcdFxcdHN0YXRzW2ldLnBhY2tldHMgKz0gX19sZTY0X3RvX2NwdShyZXNwLVxcdTAwM2VzdGF0c1tpXS5wYWNrZXRzKTtcXG4gXFx0XFx0c3RhdHNbaV0uYnl0ZXMgKz0gX19sZTY0X3RvX2NwdShyZXNwLVxcdTAwM2VzdGF0c1tpXS5ieXRlcyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxcbmluZGV4IDBhOTI5Mjc5ZTFjZWEuLjJlOWFjZWI3YTEzNmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXFxuQEAgLTIzNSw3ICsyMzUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl90cmlnZ2VyKHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgYmxvY2tfaWQpO1xcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9hYm9ydChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdyk7XFxuIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXFxuIFxcdFxcdFxcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IHByZXN0ZXJhX2NvdW50ZXJfc3RhdHMgKnN0YXRzKTtcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXFxuK1xcdFxcdFxcdCAgICAgdTMyIHN0YXRzX2xlbik7XFxuIGludCBwcmVzdGVyYV9od19jb3VudGVyX2Jsb2NrX2dldChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdyxcXG4gXFx0XFx0XFx0XFx0ICB1MzIgY2xpZW50LCB1MzIgKmJsb2NrX2lkLCB1MzIgKm9mZnNldCxcXG4gXFx0XFx0XFx0XFx0ICB1MzIgKm51bV9jb3VudGVycyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIyOjQ3Ljk1NTY3NjAzNVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NjMzODg4MzEwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS8pLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBQcmVzdGVyYSBQQ0llIHN3aXRjaCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbG9hZGluZyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MWFhOWU1Mjk5YmZjOGEyMDhjYThmN2UzMjRkNTg5ODM2MTQ3ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMToyMjo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfY291bnRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNcbmluZGV4IDNhNzYyZDE3YmE2YzYuLmYyNjExMDQ3MjllOTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2NvdW50ZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNcbkBAIC0zNDIsNiArMzQyLDcgQEAgc3RhdGljIHZvaWQgcHJlc3RlcmFfY291bnRlcl9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHUzMiByZXNjaGVkX3RpbWUgPSBDT1VOVEVSX1BPTExfVElNRTtcbiBcdHUzMiBjb3VudCA9IENPVU5URVJfQlVMS19TSVpFO1xuIFx0Ym9vbCBkb25lID0gZmFsc2U7XG4rXHR1MzIgcmVtYWluaW5nO1xuIFx0aW50IGVycjtcbiBcdHUzMiBpO1xuIFxuQEAgLTM2OCwxMCArMzY5LDEyIEBAIHN0YXRpYyB2b2lkIHByZXN0ZXJhX2NvdW50ZXJfc3RhdHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdGdvdG8gcmVzY2hlZDtcbiBcdH1cbiBcbitcdHJlbWFpbmluZyA9IGJsb2NrLVx1MDAzZW51bV9jb3VudGVycyAtIGNvdW50ZXItXHUwMDNldG90YWxfcmVhZDtcbiBcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfbG9jayhibG9jayk7XG4gXHRlcnIgPSBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoY291bnRlci1cdTAwM2VzdywgY291bnRlci1cdTAwM2V0b3RhbF9yZWFkLFxuIFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvdW50LCBcdTAwMjZkb25lLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNmJsb2NrLVx1MDAzZXN0YXRzW2NvdW50ZXItXHUwMDNldG90YWxfcmVhZF0pO1xuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmJsb2NrLVx1MDAzZXN0YXRzW2NvdW50ZXItXHUwMDNldG90YWxfcmVhZF0sXG4rXHRcdFx0XHQgICAgICAgcmVtYWluaW5nKTtcbiBcdHByZXN0ZXJhX2NvdW50ZXJfYmxvY2tfdW5sb2NrKGJsb2NrKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gYWJvcnQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jXG5pbmRleCA3Njk1Y2JiMmNlNjI2Li4yZTVjZmZlZmVhNzAxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmNcbkBAIC0yMzA1LDcgKzIzMDUsOCBAQCBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9hYm9ydChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcbiBcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0KHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3LCB1MzIgaWR4LFxuIFx0XHRcdCAgICAgdTMyICpsZW4sIGJvb2wgKmRvbmUsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMpXG4rXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXG4rXHRcdFx0ICAgICB1MzIgc3RhdHNfbGVuKVxuIHtcbiBcdHN0cnVjdCBwcmVzdGVyYV9tc2dfY291bnRlcl9yZXNwICpyZXNwO1xuIFx0c3RydWN0IHByZXN0ZXJhX21zZ19jb3VudGVyX3JlcSByZXEgPSB7XG5AQCAtMjMyNCw2ICsyMzI1LDExIEBAIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGZyZWVfYnVmZjtcbiBcbitcdGlmIChfX2xlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbnVtX2NvdW50ZXJzKSBcdTAwM2UgbWluKCpsZW4sIHN0YXRzX2xlbikpIHtcbitcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0Z290byBmcmVlX2J1ZmY7XG4rXHR9XG4rXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBfX2xlMzJfdG9fY3B1KHJlc3AtXHUwMDNlbnVtX2NvdW50ZXJzKTsgaSsrKSB7XG4gXHRcdHN0YXRzW2ldLnBhY2tldHMgKz0gX19sZTY0X3RvX2NwdShyZXNwLVx1MDAzZXN0YXRzW2ldLnBhY2tldHMpO1xuIFx0XHRzdGF0c1tpXS5ieXRlcyArPSBfX2xlNjRfdG9fY3B1KHJlc3AtXHUwMDNlc3RhdHNbaV0uYnl0ZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuaW5kZXggMGE5MjkyNzllMWNlYS4uMmU5YWNlYjdhMTM2ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfaHcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5oXG5AQCAtMjM1LDcgKzIzNSw4IEBAIGludCBwcmVzdGVyYV9od19jb3VudGVyX3RyaWdnZXIoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBibG9ja19pZCk7XG4gaW50IHByZXN0ZXJhX2h3X2NvdW50ZXJfYWJvcnQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpO1xuIGludCBwcmVzdGVyYV9od19jb3VudGVyc19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csIHUzMiBpZHgsXG4gXHRcdFx0ICAgICB1MzIgKmxlbiwgYm9vbCAqZG9uZSxcbi1cdFx0XHQgICAgIHN0cnVjdCBwcmVzdGVyYV9jb3VudGVyX3N0YXRzICpzdGF0cyk7XG4rXHRcdFx0ICAgICBzdHJ1Y3QgcHJlc3RlcmFfY291bnRlcl9zdGF0cyAqc3RhdHMsXG4rXHRcdFx0ICAgICB1MzIgc3RhdHNfbGVuKTtcbiBpbnQgcHJlc3RlcmFfaHdfY291bnRlcl9ibG9ja19nZXQoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3csXG4gXHRcdFx0XHQgIHUzMiBjbGllbnQsIHUzMiAqYmxvY2tfaWQsIHUzMiAqb2Zmc2V0LFxuIFx0XHRcdFx0ICB1MzIgKm51bV9jb3VudGVycyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMjo0Ny45NTU3MDMxNTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzA2NzM0NTc0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBTZXJpZXM6IE5ldHdvcmsgRHJpdmVyIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gYXNrZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLCBidXQgZmlyc3QsIEkgbmVlZCBhIGxpdHRsZSBjb250ZXh0IHRvIG1ha2UgYSBwcm9wZXIgZXZhbHVhdGlvbi4gTGV0J3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9jb3VudGVyLmNgLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9ody5jYCwgYW5kIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX2h3LmhgLiBBbHJpZ2h0LCB0aGUgYG1hcnZlbGwvcHJlc3RlcmFgIGRpcmVjdG9yeS4gTm93LCB3aGF0ICppcyogdGhpcyBkcml2ZXIgcHJlY2lzZWx5PyBJcyBpdCBhIGRyaXZlciBmb3IgYSAqcmVhbCogcGh5c2ljYWwgc3dpdGNoLCBvciBjb3VsZCB0aGlzIGJlIHNvbWV0aGluZyB0aGF0J3MgZW11bGF0ZWQgb3IgdmlydHVhbGl6ZWQgc29tZWhvdz8gVGhhdCdzIGdvaW5nIHRvIGluZm9ybSBhIGxvdCBvZiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZS4gVGltZSB0byByZWFjaCBmb3IgYGdyZXBwZXJgIChvciBgcmVhZC1maWxlYCBpZiB0aGUgc2l0dWF0aW9uIGNhbGxzIGZvciBpdCkgYW5kIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBQUkVTVEVSQSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgaW4gdGhlIGJ1aWxkIG9wdGlvbnMgdGhhdCBtaWdodCBnaXZlIG1lIHRoYXQgY3J1Y2lhbCBpbnNpZ2h0IGludG8gdGhlIGhhcmR3YXJlIHRoaXMgYWZmZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjAxLjAyMzA1MTk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDQ0NjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUkVTVEVSQVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzo2OmNvbmZpZyBQUkVTVEVSQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxODpjb25maWcgUFJFU1RFUkFfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzowMS4wNzg1MDExOTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4NDEwMTExMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgUHJlc3RlcmEgS2NvbmZpZyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGlzIEtjb25maWcgZmlsZSBpcyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIE1hcnZlbGwncyBQcmVzdGVyYSBldGhlcm5ldCBzd2l0Y2ggZHJpdmVycyBhcmUgZGVmaW5lZC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlcidzIGZlYXR1cmVzIGFyZSBleHBvc2VkIHRvIHRoZSB1c2VyIGR1cmluZyBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGdyYXNwIG9mIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgaGVscCB0ZXh0cyBmb3IgdmFyaW91cyBQcmVzdGVyYS1zcGVjaWZpYyBmZWF0dXJlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgICoqQ2hpcHNldCBTZWxlY3Rpb246KiogSG93IGFyZSB0aGUgZGlmZmVyZW50IFByZXN0ZXJhIHN3aXRjaCB2YXJpYW50cyBoYW5kbGVkPyBJcyB0aGVyZSBhIHRvcC1sZXZlbCBzeW1ib2wgZm9yIGNob29zaW5nIHRoZSBzcGVjaWZpYyBjaGlwc2V0IGZhbWlseT8gV2hhdCBhcmUgdGhlIGRlcGVuZGVuY2llcyBvciBjb25mbGljdHM/XG4qICAgKipGZWF0dXJlIEZsYWdzOioqIFdoYXQgZmluZS1ncmFpbmVkIGZlYXR1cmVzIGFyZSBjb25maWd1cmFibGU/IFRoaW5ncyBsaWtlIFZMQU4gc3VwcG9ydCwgUW9TLCBsaW5rIGFnZ3JlZ2F0aW9uIChMQUcvTEFDUCksIHNlY3VyaXR5IGZlYXR1cmVzLCBvciBoYXJkd2FyZSBvZmZsb2FkcyBhcmUgb2YgaW50ZXJlc3QuIEknbGwgbG9vayBmb3Igc3ltYm9scyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoZXNlIGNhcGFiaWxpdGllcy5cbiogICAqKkRyaXZlciBNb2R1bGVzOioqIElzIHRoZSBkcml2ZXIgY29tcGlsZWQgYXMgYSBtb2R1bGUsIG9yIGJ1aWx0LWluIHRvIHRoZSBrZXJuZWw/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhcHByb2FjaD9cbiogICAqKkJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzOioqIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIG90aGVyIGRyaXZlcnMsIHN1Y2ggYXMgUEhZIGRyaXZlcnMgb3IgTURJTz8gSG93IGFyZSB0aGV5IGhhbmRsZWQgaW4gdGhlIEtjb25maWc/XG4qICAgKipEb2N1bWVudGF0aW9uOioqIEknbSBob3BpbmcgdGhlIGhlbHAgdGV4dHMgYXJlIGNsZWFyIGFuZCBpbmZvcm1hdGl2ZS4gR29vZCBLY29uZmlnIGZpbGVzIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgZm9yIGFuIGVuZ2luZWVyIHRvIHVuZGVyc3RhbmQgd2hhdCBhIHN5bWJvbCAqZG9lcyogYW5kIHdoZW4gaXQgc2hvdWxkIGJlIGVuYWJsZWQuIElmIHRoZSBkb2N1bWVudGF0aW9uIGlzIG1pc3NpbmcsIEkgd2lsbCBoYXZlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlIGNvZGUuXG4qICAgKipEZWZhdWx0czoqKiBJJ2xsIG5vdGUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVmYXVsdHMgZ2l2ZXMgYW4gaW5zaWdodCBpbnRvIGhvdyB0aGUgZW5naW5lZXJzIGV4cGVjdCB0aGUgZHJpdmVyIHRvIGJlIHVzZWQgbW9zdCBjb21tb25seS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgc2VlIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGRyaXZlciBkZXNpZ24uIEknbSBsb29raW5nIGZvciBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IEkgY291bGQgYnVpbGQgYW5kIGFkYXB0IHRoaXMgZHJpdmVyIGZvciBhIHNwZWNpZmljIHVzZSBjYXNlIG9yIGhhcmR3YXJlIHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MDkuNDg4NjE2MjgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1hcnZlbGwgUHJlc3RlcmEgZHJpdmVycyBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBQUkVTVEVSQVxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUNzIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIE5FVF9TV0lUQ0hERVYgXFx1MDAyNlxcdTAwMjYgVkxBTl84MDIxUVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cXG4gIDEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiAgMTE6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMTY6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHJlc3RlcmEuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBQUkVTVEVSQV9QQ0lcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJQQ0kgaW50ZXJmYWNlIGRyaXZlciBmb3IgTWFydmVsbCBQcmVzdGVyYSBTd2l0Y2ggQVNJQ3MgZmFtaWx5XFxcIlxcbiAgMjA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IFBSRVNURVJBXFxuICAyMTpcXHRcXHRkZWZhdWx0IFBSRVNURVJBXFxuICAyMjpcXHRcXHRoZWxwXFxuICAyMzpcXHRcXHQgIFRoaXMgaXMgaW1wbGVtZW50YXRpb24gb2YgUENJIGludGVyZmFjZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIFByZXN0ZXJhXFxuICAyNDpcXHRcXHQgIFN3aXRjaCBBU0lDcyBmYW1pbHkuXFxuICAyNTpcXHRcXG4gIDI2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyNzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcmVzdGVyYV9wY2kuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjA5LjQ4ODY4Njg1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1NDU3OTUyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIFN1cHBvcnQqKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUNzLiBSaWdodCwgSSBrbm93IHRob3NlIOKAkyB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIEFTSUNzLCBzaW1pbGFyIHRvIHRoZSBNZWxsYW5veCBTd2l0Y2hYL1NwZWN0cnVtIEFTSUNzLiBKdXN0IGxpa2UgbWx4c3csIHRoZSBtZW50aW9uIG9mIHdoaWNoIGltbWVkaWF0ZWx5IGJyaW5ncyB0aGUgY29udGV4dCBvZiB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgaW50byBzaGFycCByZWxpZWYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGludG8gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQgdG8gc2VlIGlmIHRoaXMgZml0cyB0aGUgcHJvZmlsZSBvZiBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiLiBUaGUgcHJvbXB0IGV4cGxpY2l0bHkgbGlzdHMgZXhhbXBsZXMgbGlrZSBtbHhzdywgd2hpY2ggYXJlIFBDSS1iYXNlZCBhbmQgb2Z0ZW4gbGFja2luZyBmdWxsIGVtdWxhdGVkIHN1cHBvcnQuXG5cblRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciBQcmVzdGVyYSBoYXMgYW55IHNvcnQgb2YgdmlydHVhbCwgbW9jaywgb3IgZW11bGF0ZWQgY2FwYWJpbGl0eS4gT3IsIGlzIGl0IGV4Y2x1c2l2ZWx5IHRpZWQgdG8gcnVubmluZyBvbiBwaHlzaWNhbCBoYXJkd2FyZSBQQ0kgZGV2aWNlcz8gVGhhdCdzIHRoZSBjcnV4IG9mIHRoaXMuIFdlIG5lZWQgdG8gYXNjZXJ0YWluIGlmIHRoaXMgZmFsbHMgdW5kZXIgdGhlIGNhdGVnb3J5IG9mIGhhcmR3YXJlIHRoYXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgdG8gZnVuY3Rpb24uIFRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHdlIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzoxMy4wMzQ0ODYwODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjczODI4NzMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MTMuMTAxODgxNjE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzAxODMwOTA5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIGNvbnNpZGVyaW5nIEknbSBleGFtaW5pbmcgdGhvc2UgZmlsZXM6XG5cbioqRGl2aW5nIGludG8gdGhlIE1hcnZlbGwgUHJlc3RlcmEgRXRoZXJuZXQgRHJpdmVycyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgbG9vayBhdCB0aGUgTWFydmVsbCBQcmVzdGVyYSBFdGhlcm5ldCBkcml2ZXJzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYWAuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkcml2ZXIgY29kZSBmb3IgdGhlIE1hcnZlbGwgUHJlc3RlcmEgc2VyaWVzIG9mIHN3aXRjaCBjaGlwcywgbmF0dXJhbGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIHN0cnVjdHVyZWQgaXQg4oCTIHdoYXQgbW9kdWxlcyBhcmUgcHJlc2VudCwgd2hhdCBhYnN0cmFjdGlvbiBsYXllcnMgdGhleSBhcmUgdXNpbmcsIGFuZCB0aGUgbGV2ZWwgb2YgaW50ZWdyYXRpb24gd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjay4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIExpbnV4IG5ldGRldiBpbnRlcmZhY2U/IEFyZSB0aGVyZSBjdXN0b20gZXh0ZW5zaW9ucz8gQXJlIHRoZXkgZW1wbG95aW5nIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpbiBzb21lIGNsZXZlciB3YXk/IFRoZSBmaWxlIG9yZ2FuaXphdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgY2x1ZXMuIExldCdzIHNlZSBpZiB0aGVyZSBpcyBhbnkgb2J2aW91cyBkZXNpZ24gcGF0dGVybiBvciBkb2N1bWVudGF0aW9uLCBvciB3aGV0aGVyIEkgd2lsbCBoYXZlIHRvIGRpdmUgaW50byB0aGUgY29kZSB0byByZXZlcnNlIGVuZ2luZWVyIHRoZSBhcmNoaXRlY3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBzcGVjaWZpYyBQcmVzdGVyYS1yZWxhdGVkIGRlZmluZXMgb3Igc3RydWN0dXJlcy4gVWx0aW1hdGVseSwgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zIGFuZCBob3cgd2VsbCBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIGl0cyBjYXBhYmlsaXRpZXMgYW5kIGhvdyBpdCBwb3RlbnRpYWxseSBwZXJmb3JtcyBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgbGlzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjE2LjEyMDE5Mjk1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJwcmVzdGVyYS5oXCIsXG4gICAgXCJwcmVzdGVyYV9hY2wuY1wiLFxuICAgIFwicHJlc3RlcmFfYWNsLmhcIixcbiAgICBcInByZXN0ZXJhX2NvdW50ZXIuY1wiLFxuICAgIFwicHJlc3RlcmFfY291bnRlci5oXCIsXG4gICAgXCJwcmVzdGVyYV9kZXZsaW5rLmNcIixcbiAgICBcInByZXN0ZXJhX2RldmxpbmsuaFwiLFxuICAgIFwicHJlc3RlcmFfZHNhLmNcIixcbiAgICBcInByZXN0ZXJhX2RzYS5oXCIsXG4gICAgXCJwcmVzdGVyYV9ldGh0b29sLmNcIixcbiAgICBcInByZXN0ZXJhX2V0aHRvb2wuaFwiLFxuICAgIFwicHJlc3RlcmFfZmxvdy5jXCIsXG4gICAgXCJwcmVzdGVyYV9mbG93LmhcIixcbiAgICBcInByZXN0ZXJhX2Zsb3dlci5jXCIsXG4gICAgXCJwcmVzdGVyYV9mbG93ZXIuaFwiLFxuICAgIFwicHJlc3RlcmFfaHcuY1wiLFxuICAgIFwicHJlc3RlcmFfaHcuaFwiLFxuICAgIFwicHJlc3RlcmFfbWFpbi5jXCIsXG4gICAgXCJwcmVzdGVyYV9tYXRjaGFsbC5jXCIsXG4gICAgXCJwcmVzdGVyYV9tYXRjaGFsbC5oXCIsXG4gICAgXCJwcmVzdGVyYV9wY2kuY1wiLFxuICAgIFwicHJlc3RlcmFfcm91dGVyLmNcIixcbiAgICBcInByZXN0ZXJhX3JvdXRlcl9ody5jXCIsXG4gICAgXCJwcmVzdGVyYV9yb3V0ZXJfaHcuaFwiLFxuICAgIFwicHJlc3RlcmFfcnh0eC5jXCIsXG4gICAgXCJwcmVzdGVyYV9yeHR4LmhcIixcbiAgICBcInByZXN0ZXJhX3NwYW4uY1wiLFxuICAgIFwicHJlc3RlcmFfc3Bhbi5oXCIsXG4gICAgXCJwcmVzdGVyYV9zd2l0Y2hkZXYuY1wiLFxuICAgIFwicHJlc3RlcmFfc3dpdGNoZGV2LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MTYuMTIwMjc3OTQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0ODU4OTI5NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgYHByZXN0ZXJhX3BjaS5jYCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGlzc3VlIGxpa2VseSByZXNpZGVzIHdpdGhpbiB0aGUgYHByZXN0ZXJhX3BjaS5jYCBmaWxlLiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgUENJIGRyaXZlciBmb3IgdGhlIFByZXN0ZXJhIHN3aXRjaCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHRoZXkncmUgdXNlZCB0byBwcm9ncmFtIGFuZCBhY2Nlc3MgdGhlIGRldmljZSByZWdpc3RlcnMuIFRpbWUgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGVzcGVjaWFsbHkgdGhvc2UgZGVhbGluZyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIG1hcHBpbmcuIEknbGwgZm9jdXMgb24gaG93IHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBiZWluZyB1c2VkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBzdWJ0bGUgdGltaW5nIGlzc3Vlcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBtb2R1bGU7IG1heWJlIHRoZXJlJ3MgYSBjbHVlIHRoZXJlIGFib3V0IGhvdyB0aGluZ3MgYXJlIGZhaWxpbmcuIExldCdzIHNlZSBpZiB0aGUgbG9ncyBoYXZlIHNvbWUgcG9pbnRlcnMuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGludGVycnVwdCBoYW5kbGluZyBsb2dpYyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBpc3N1ZXMgd2l0aCBpbnRlcnJ1cHQgbGluZXMgb3IgYWNrbm93bGVkZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQzLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjE5LjYwNjE3MzM4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgT1IgR1BMLTIuMFxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZCAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jaXJjX2J1Zi5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9wb2xsLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICAxMjpcXHRcXG4gIDEzOlxcdCNpbmNsdWRlIFxcXCJwcmVzdGVyYS5oXFxcIlxcbiAgMTQ6XFx0XFxuICAxNTpcXHQjZGVmaW5lIFBSRVNURVJBX01TR19NQVhfU0laRSAxNTAwXFxuICAxNjpcXHRcXG4gIDE3OlxcdCNkZWZpbmUgUFJFU1RFUkFfU1VQUF9GV19NQUpfVkVSXFx0NFxcbiAgMTg6XFx0I2RlZmluZSBQUkVTVEVSQV9TVVBQX0ZXX01JTl9WRVJcXHQxXFxuICAxOTpcXHRcXG4gIDIwOlxcdCNkZWZpbmUgUFJFU1RFUkFfUFJFVl9GV19NQUpfVkVSXFx0NFxcbiAgMjE6XFx0I2RlZmluZSBQUkVTVEVSQV9QUkVWX0ZXX01JTl9WRVJcXHQwXFxuICAyMjpcXHRcXG4gIDIzOlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfUEFUSF9GTVRcXHRcXFwibXJ2bC9wcmVzdGVyYS9tdnN3X3ByZXN0ZXJhX2Z3LXYldS4ldS5pbWdcXFwiXFxuICAyNDpcXHQjZGVmaW5lIFBSRVNURVJBX0ZXX0FSTTY0X1BBVEhfRk1UIFxcXCJtcnZsL3ByZXN0ZXJhL212c3dfcHJlc3RlcmFfZndfYXJtNjQtdiV1LiV1LmltZ1xcXCJcXG4gIDI1OlxcdFxcbiAgMjY6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19IRFJfTUFHSUNcXHRcXHQweDM1MUQ5RDA2XFxuICAyNzpcXHQjZGVmaW5lIFBSRVNURVJBX0ZXX0RMX1RJTUVPVVRfTVNcXHQ1MDAwMFxcbiAgMjg6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19CTEtfU1pcXHRcXHQxMDI0XFxuICAyOTpcXHRcXG4gIDMwOlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfVkVSX01BSl9NVUwgMTAwMDAwMFxcbiAgMzE6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19WRVJfTUlOX01VTCAxMDAwXFxuICAzMjpcXHRcXG4gIDMzOlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfVkVSX01BSih2KVxcdCgodikgLyBQUkVTVEVSQV9GV19WRVJfTUFKX01VTClcXG4gIDM0OlxcdFxcbiAgMzU6XFx0I2RlZmluZSBQUkVTVEVSQV9GV19WRVJfTUlOKHYpIFxcXFxcXG4gIDM2OlxcdFxcdCgoKHYpIC0gKFBSRVNURVJBX0ZXX1ZFUl9NQUoodikgKiBQUkVTVEVSQV9GV19WRVJfTUFKX01VTCkpIC8gXFxcXFxcbiAgMzc6XFx0XFx0XFx0XFx0UFJFU1RFUkFfRldfVkVSX01JTl9NVUwpXFxuICAzODpcXHRcXG4gIDM5OlxcdCNkZWZpbmUgUFJFU1RFUkFfRldfVkVSX1BBVENIKHYpIFxcXFxcXG4gIDQwOlxcdFxcdCgodikgLSAoUFJFU1RFUkFfRldfVkVSX01BSih2KSAqIFBSRVNURVJBX0ZXX1ZFUl9NQUpfTVVMKSAtIFxcXFxcXG4gIDQxOlxcdFxcdFxcdFxcdChQUkVTVEVSQV9GV19WRVJfTUlOKHYpICogUFJFU1RFUkFfRldfVkVSX01JTl9NVUwpKVxcbiAgNDI6XFx0XFxuICA0MzpcXHRlbnVtIHByZXN0ZXJhX3BjaV9iYXJfdCB7XFxuICA0NDpcXHRcXHRQUkVTVEVSQV9QQ0lfQkFSX0ZXID0gMixcXG4gIDQ1OlxcdFxcdFBSRVNURVJBX1BDSV9CQVJfUFAgPSA0LFxcbiAgNDY6XFx0fTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0c3RydWN0IHByZXN0ZXJhX2Z3X2hlYWRlciB7XFxuICA0OTpcXHRcXHRfX2JlMzIgbWFnaWNfbnVtYmVyO1xcbiAgNTA6XFx0XFx0X19iZTMyIHZlcnNpb25fdmFsdWU7XFxuICA1MTpcXHRcXHR1OCByZXNlcnZlZFs4XTtcXG4gIDUyOlxcdH07XFxuICA1MzpcXHRcXG4gIDU0OlxcdHN0cnVjdCBwcmVzdGVyYV9sZHJfcmVncyB7XFxuICA1NTpcXHRcXHR1MzIgbGRyX3JlYWR5O1xcbiAgNTY6XFx0XFx0dTMyIHBhZDE7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdHUzMiBsZHJfaW1nX3NpemU7XFxuICA1OTpcXHRcXHR1MzIgbGRyX2N0bF9mbGFncztcXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0dTMyIGxkcl9idWZfb2ZmcztcXG4gIDYyOlxcdFxcdHUzMiBsZHJfYnVmX3NpemU7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHUzMiBsZHJfYnVmX3JkO1xcbiAgNjU6XFx0XFx0dTMyIHBhZDI7XFxuICA2NjpcXHRcXHR1MzIgbGRyX2J1Zl93cjtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0dTMyIGxkcl9zdGF0dXM7XFxuICA2OTpcXHR9O1xcbiAgNzA6XFx0XFxuICA3MTpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9SRUdfT0ZGU0VUKGYpXFx0b2Zmc2V0b2Yoc3RydWN0IHByZXN0ZXJhX2xkcl9yZWdzLCBmKVxcbiAgNzI6XFx0XFxuICA3MzpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9SRUFEWV9NQUdJQ1xcdDB4ZjAwZGZlZWRcXG4gIDc0OlxcdFxcbiAgNzU6XFx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX0lNR19ETFxcdEJJVCgwKVxcbiAgNzY6XFx0I2RlZmluZSBQUkVTVEVSQV9MRFJfU1RBVFVTX1NUQVJUX0ZXXFx0QklUKDEpXFxuICA3NzpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9TVEFUVVNfSU5WQUxJRF9JTUdcXHRCSVQoMilcXG4gIDc4OlxcdCNkZWZpbmUgUFJFU1RFUkFfTERSX1NUQVRVU19OT01FTVxcdEJJVCgzKVxcbiAgNzk6XFx0XFxuICA4MDpcXHQjZGVmaW5lIFBSRVNURVJBX0xEUl9SRUdfQkFTRShmdylcXHQoKGZ3KS1cXHUwMDNlbGRyX3JlZ3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjE5LjYwNjI4NzUwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE0NjMxNzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uY2x1c2lvbiBvZiBgcHJlc3RlcmFfcGNpLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSB0YWlsIGVuZCBvZiBgcHJlc3RlcmFfcGNpLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaGVyZSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIG1vZHVsZSB3cmFwcyB1cCBpdHMgcmVzcG9uc2liaWxpdGllcywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHJlc291cmNlIGNsZWFudXAgYW5kIGFueSBmaW5hbCBpbml0aWFsaXphdGlvbiBvciBkZS1pbml0aWFsaXphdGlvbiBzdGVwcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjYW5vbmljYWwgcGF0dGVybnMgSSdkIGV4cGVjdCB0byBzZWUgaW4gYSBQQ0kgZHJpdmVyIOKAkyBwYXJ0aWN1bGFybHkgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLCBJUlEgdW5yZWdpc3RyYXRpb24sIGFuZCBhbnkgcG90ZW50aWFsIHF1aWVzY2luZyBvZiB0aGUgaGFyZHdhcmUuIFxuXG5JJ20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCBwb3RlbnRpYWwgZmFpbHVyZSBwYXRocy4gV2hlcmUgYXJlIHRoZSBgZ290b2Agc3RhdGVtZW50cywgYW5kIHdoYXQgY2xlYW51cCBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgaW4gZWFjaCBjYXNlPyBBcmUgdGhleSBjb21wcmVoZW5zaXZlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXMgSSBzaG91bGQgZmxhZz8gSSB3YW50IHRvIGVuc3VyZSB0aGF0IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyBQQ0kgaW5pdGlhbGl6YXRpb24sIG9yIGlmIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQsIHdlIGdyYWNlZnVsbHkgcmVsZWFzZSBldmVyeXRoaW5nIHdlJ3ZlIGNsYWltZWQuXG5cblNwZWNpZmljYWxseSwgSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIFBDSSBjb3JlLiBIb3cgYXJlIGRldmljZSBwcm9iZXMgaGFuZGxlZD8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nIGlmIGEgZGV2aWNlIGRvZXNuJ3QgcmVzcG9uZCBhcyBleHBlY3RlZD8gSSdtIGhvcGluZyB0byBzZWUgYSBjbGVhbiBhbmQgY29tcGxldGUgZGV0YWNoIG9wZXJhdGlvbiwgYSBraW5kIG9mIG1pcnJvciBpbWFnZSBvZiB0aGUgYXR0YWNoIHByb2NlZHVyZSwgdG8gZW5zdXJlIG5vIGxpbmdlcmluZyBzdGF0ZS4gQW55IHVuZXhwZWN0ZWQgcG93ZXIgbWFuYWdlbWVudCBpbXBsaWNhdGlvbnM/IEFyZSB0aGVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdXNwZW5kL3Jlc3VtZT9cblxuT3ZlcmFsbCwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gYmUgdGhlIGN1bG1pbmF0aW9uIG9mIGNhcmVmdWwgcmVzb3VyY2UgbWFuYWdlbWVudCwgZGVtb25zdHJhdGluZyByb2J1c3RuZXNzIGFuZCBhZGhlcmluZyB0byBhbGwgcmVsZXZhbnQgUENJIHN0YW5kYXJkcyBhbmQgTGludXggZHJpdmVyIGJlc3QgcHJhY3RpY2VzLiBJJ20gc2VhcmNoaW5nIGZvciBldmlkZW5jZSBvZiB0aGF0LiBJdCdzIHRoZSBmaW5hbCBqdWRnbWVudCBjYWxsIG9uIHRoZSBjb2RlJ3MgcXVhbGl0eSwgaW4gbXkgZXllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MjIuNDIwOTIzMjM4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdG91dF9yZWxlYXNlOlxcbiA4MDI6XFx0XFx0cHJlc3RlcmFfZndfcHV0KGZ3KTtcXG4gODAzOlxcdFxcdHJldHVybiBlcnI7XFxuIDgwNDpcXHR9XFxuIDgwNTpcXHRcXG4gODA2OlxcdHN0YXRpYyBib29sIHByZXN0ZXJhX3BjaV9wcF91c2VfYmFyMihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gODA3OlxcdHtcXG4gODA4OlxcdFxcdHN3aXRjaCAocGRldi1cXHUwMDNlZGV2aWNlKSB7XFxuIDgwOTpcXHRcXHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYNzMxMk06XFxuIDgxMDpcXHRcXHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYMzUwMDpcXG4gODExOlxcdFxcdGNhc2UgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTAxOlxcbiA4MTI6XFx0XFx0Y2FzZSBQUkVTVEVSQV9ERVZfSURfOThEWDM1MTA6XFxuIDgxMzpcXHRcXHRjYXNlIFBSRVNURVJBX0RFVl9JRF85OERYMzUyMDpcXG4gODE0OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiA4MTU6XFx0XFxuIDgxNjpcXHRcXHRkZWZhdWx0OlxcbiA4MTc6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiA4MTg6XFx0XFx0fVxcbiA4MTk6XFx0fVxcbiA4MjA6XFx0XFxuIDgyMTpcXHRzdGF0aWMgdTMyIHByZXN0ZXJhX3BjaV9wcF9iYXIyX29mZnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDgyMjpcXHR7XFxuIDgyMzpcXHRcXHRpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSA9PSAweDEwMDAwMDApXFxuIDgyNDpcXHRcXHRcXHRyZXR1cm4gMHgwO1xcbiA4MjU6XFx0XFx0ZWxzZVxcbiA4MjY6XFx0XFx0XFx0cmV0dXJuIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpIC8gMik7XFxuIDgyNzpcXHR9XFxuIDgyODpcXHRcXG4gODI5OlxcdHN0YXRpYyB1MzIgcHJlc3RlcmFfcGNpX2Z3X2JhcjJfb2ZmcyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gODMwOlxcdHtcXG4gODMxOlxcdFxcdGlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpID09IDB4MTAwMDAwMClcXG4gODMyOlxcdFxcdFxcdHJldHVybiAweDQwMDAwMDtcXG4gODMzOlxcdFxcdGVsc2VcXG4gODM0OlxcdFxcdFxcdHJldHVybiAweDA7XFxuIDgzNTpcXHR9XFxuIDgzNjpcXHRcXG4gODM3OlxcdHN0YXRpYyBpbnQgcHJlc3RlcmFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiA4Mzg6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbiA4Mzk6XFx0e1xcbiA4NDA6XFx0XFx0Y29uc3QgY2hhciAqZHJpdmVyX25hbWUgPSBkZXZfZHJpdmVyX3N0cmluZyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gODQxOlxcdFxcdHU4IF9faW9tZW0gKm1lbV9hZGRyLCAqcHBfYWRkciA9IE5VTEw7XFxuIDg0MjpcXHRcXHRzdHJ1Y3QgcHJlc3RlcmFfZncgKmZ3O1xcbiA4NDM6XFx0XFx0aW50IGVycjtcXG4gODQ0OlxcdFxcbiA4NDU6XFx0XFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbiA4NDY6XFx0XFx0aWYgKGVycikge1xcbiA4NDc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXFxcXG5cXFwiKTtcXG4gODQ4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9lbmFibGVfZGV2aWNlO1xcbiA4NDk6XFx0XFx0fVxcbiA4NTA6XFx0XFxuIDg1MTpcXHRcXHRlcnIgPSBwY2ltX3JlcXVlc3RfYWxsX3JlZ2lvbnMocGRldiwgZHJpdmVyX25hbWUpO1xcbiA4NTI6XFx0XFx0aWYgKGVycikge1xcbiA4NTM6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicGNpbV9yZXF1ZXN0X2FsbF9yZWdpb25zIGZhaWxlZFxcXFxuXFxcIik7XFxuIDg1NDpcXHRcXHRcXHRnb3RvIGVycl9wY2lfcmVxdWVzdF9yZWdpb25zO1xcbiA4NTU6XFx0XFx0fVxcbiA4NTY6XFx0XFxuIDg1NzpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMCkpO1xcbiA4NTg6XFx0XFx0aWYgKGVycikge1xcbiA4NTk6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbCB0byBzZXQgRE1BIG1hc2tcXFxcblxcXCIpO1xcbiA4NjA6XFx0XFx0XFx0Z290byBlcnJfZG1hX21hc2s7XFxuIDg2MTpcXHRcXHR9XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdG1lbV9hZGRyID0gcGNpbV9pb21hcChwZGV2LCAyLCAwKTtcXG4gODY0OlxcdFxcdGlmICghbWVtX2FkZHIpIHtcXG4gODY1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInBjaSBtZW0gaW9yZW1hcCBmYWlsZWRcXFxcblxcXCIpO1xcbiA4NjY6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gODY3OlxcdFxcdFxcdGdvdG8gZXJyX21lbV9pb3JlbWFwO1xcbiA4Njg6XFx0XFx0fVxcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHQvKiBBQzVYIGRldmljZXMgdXNlIHNlY29uZCBoYWxmIG9mIEJBUjIgKi9cXG4gODcxOlxcdFxcdGlmIChwcmVzdGVyYV9wY2lfcHBfdXNlX2JhcjIocGRldikpIHtcXG4gODcyOlxcdFxcdFxcdHBwX2FkZHIgPSBtZW1fYWRkciArIHByZXN0ZXJhX3BjaV9wcF9iYXIyX29mZnMocGRldik7XFxuIDg3MzpcXHRcXHRcXHRtZW1fYWRkciA9IG1lbV9hZGRyICsgcHJlc3RlcmFfcGNpX2Z3X2JhcjJfb2ZmcyhwZGV2KTtcXG4gODc0OlxcdFxcdH0gZWxzZSB7XFxuIDg3NTpcXHRcXHRcXHRwcF9hZGRyID0gcGNpbV9pb21hcChwZGV2LCA0LCAwKTtcXG4gODc2OlxcdFxcdFxcdGlmICghcHBfYWRkcikge1xcbiA4Nzc6XFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwicHAgcmVncyBpb3JlbWFwIGZhaWxlZFxcXFxuXFxcIik7XFxuIDg3ODpcXHRcXHRcXHRcXHRlcnIgPSAtRUlPO1xcbiA4Nzk6XFx0XFx0XFx0XFx0Z290byBlcnJfcHBfaW9yZW1hcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MjIuNDIxMDUyMDc4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxMzk1ODMzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBwcmVzdGVyYV9wY2kuYyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGBwcmVzdGVyYV9wY2kuY2AgZmlsZS4gSSdtIGtlZW4gdG8gc2VlIHRoZSByZXN0IG9mIGl0LiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIFByZXN0ZXJhIGFyY2hpdGVjdHVyZSBhbmQgUENJIGludGVncmF0aW9uIGluIGdlbmVyYWwsIHNvIEknbSBsb29raW5nIGZvciBzcGVjaWZpY3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkncmUgaGFuZGxpbmc6XG5cbiogICAqKkludGVycnVwdCByb3V0aW5nOioqIEhvdyBhcmUgaW50ZXJydXB0cyBmcm9tIHRoZSBQQ0kgYnVzIGJlaW5nIG1hcHBlZCBhbmQgaGFuZGxlZCBieSB0aGUgUHJlc3RlcmEncyBpbnRlcm5hbCBpbnRlcnJ1cHQgY29udHJvbGxlcj8gQXJlIHRoZXkgdXNpbmcgTVNJLVgsIGxlZ2FjeSBpbnRlcnJ1cHRzLCBvciBhIGh5YnJpZCBhcHByb2FjaD8gV2hhdCBraW5kIG9mIGludGVycnVwdCBhZmZpbml0eSBjb25maWd1cmF0aW9uIGFyZSB0aGV5IHVzaW5nLCBhbmQgd2hhdCBhcmUgdGhlIGxpbWl0YXRpb25zLCBpZiBhbnk/XG4qICAgKipETUEgc2V0dXA6KiogSG93IGlzIHRoZSBETUEgZW5naW5lIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSBiZXR3ZWVuIHRoZSBQQ0kgYnVzIGFuZCB0aGUgUHJlc3RlcmEncyBtZW1vcnkgc3BhY2U/IEFyZSB0aGV5IHVzaW5nIHNjYXR0ZXIvZ2F0aGVyIGxpc3RzPyBXaGF0IGtpbmQgb2YgYnVmZmVyIG1hbmFnZW1lbnQgaXMgaW4gcGxhY2UgdG8gaGFuZGxlIGRhdGEgY29uc2lzdGVuY3k/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgbGlrZSBjYWNoZSBjb2hlcmVuY3kgaGFuZGxpbmcsIGJlaW5nIGRvbmU/XG4qICAgKipBZGRyZXNzIG1hcHBpbmc6KiogSG93IGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIG9mIHRoZSBQQ0kgZGV2aWNlIGJlaW5nIG1hcHBlZCBpbnRvIHRoZSBQcmVzdGVyYSdzIG1lbW9yeSBtYXA/IElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIHRyYW5zbGF0aW9uLCBvciBhcmUgdGhlcmUgYW55IGNvbXBsZXggYWRkcmVzcyB3aW5kb3dpbmcgc2NoZW1lcyBiZWluZyB1c2VkPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBhbnkgcmVxdWlyZWQgQkFSIChCYXNlIEFkZHJlc3MgUmVnaXN0ZXIpIGNvbmZpZ3VyYXRpb25zLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogV2hhdCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZSB0byBoYW5kbGUgUENJIGJ1cyBlcnJvcnMsIHN1Y2ggYXMgcGFyaXR5IGVycm9ycyBvciB0cmFuc2FjdGlvbiB0aW1lb3V0cz8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBlcnJvciByZXBvcnRpbmcgZmVhdHVyZXMgYmVpbmcgdXNlZD9cbiogICAqKlBvd2VyIG1hbmFnZW1lbnQ6KiogSG93IGlzIHRoZSBQcmVzdGVyYSBkcml2ZXIgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUENJIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGVzPyBBcmUgdGhleSBpbXBsZW1lbnRpbmcgYW55IHNwZWNpZmljIHBvd2VyLXNhdmluZyB0ZWNobmlxdWVzIGZvciB0aGUgUENJIGRldmljZT9cblxuSSdtIGFsc28gbG9va2luZyBmb3IgYW55dGhpbmcgdW51c3VhbCBvciBjbGV2ZXIgdGhleSd2ZSBkb25lOyBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgdGhhdCBtaWdodCBiZSB1bmlxdWUgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbi4gSXQgd2lsbCBiZSBoZWxwZnVsIHRvIHNlZSB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUsIHRoZSBpbmNsdWRlIGZpbGVzLCBhbmQgYW55IHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgdGhhdCBtaWdodCBiZSBvZiBpbnRlcmVzdC4gT2theSwgbGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzA1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzoyNS41NjA2MzgxMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODgwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODgwOlxcdFxcdFxcdH1cXG4gODgxOlxcdFxcdH1cXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGZ3ID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqZncpLCBHRlBfS0VSTkVMKTtcXG4gODg2OlxcdFxcdGlmICghZncpIHtcXG4gODg3OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDg4ODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZGV2X2FsbG9jO1xcbiA4ODk6XFx0XFx0fVxcbiA4OTA6XFx0XFxuIDg5MTpcXHRcXHRmdy1cXHUwMDNlcGNpX2RldiA9IHBkZXY7XFxuIDg5MjpcXHRcXHRmdy1cXHUwMDNlZGV2LmN0bF9yZWdzID0gbWVtX2FkZHI7XFxuIDg5MzpcXHRcXHRmdy1cXHUwMDNlZGV2LnBwX3JlZ3MgPSBwcF9hZGRyO1xcbiA4OTQ6XFx0XFx0ZnctXFx1MDAzZWRldi5kZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZncpO1xcbiA4OTc6XFx0XFxuIDg5ODpcXHRcXHRlcnIgPSBwcmVzdGVyYV9md19pbml0KGZ3KTtcXG4gODk5OlxcdFxcdGlmIChlcnIpXFxuIDkwMDpcXHRcXHRcXHRnb3RvIGVycl9wcmVzdGVyYV9md19pbml0O1xcbiA5MDE6XFx0XFxuIDkwMjpcXHRcXHRkZXZfaW5mbyhmdy1cXHUwMDNlZGV2LmRldiwgXFxcIlByZXN0ZXJhIEZXIGlzIHJlYWR5XFxcXG5cXFwiKTtcXG4gOTAzOlxcdFxcbiA5MDQ6XFx0XFx0ZnctXFx1MDAzZXdxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJwcmVzdGVyYV9md193cVxcXCIsIFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsIDEpO1xcbiA5MDU6XFx0XFx0aWYgKCFmdy1cXHUwMDNld3EpIHtcXG4gOTA2OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDkwNzpcXHRcXHRcXHRnb3RvIGVycl93cV9hbGxvYztcXG4gOTA4OlxcdFxcdH1cXG4gOTA5OlxcdFxcbiA5MTA6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZmdy1cXHUwMDNlZXZ0X3dvcmssIHByZXN0ZXJhX2Z3X2V2dF93b3JrX2ZuKTtcXG4gOTExOlxcdFxcbiA5MTI6XFx0XFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIFBDSV9JUlFfTVNJKTtcXG4gOTEzOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDkxNDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJNU0kgSVJRIGluaXQgZmFpbGVkXFxcXG5cXFwiKTtcXG4gOTE1OlxcdFxcdFxcdGdvdG8gZXJyX2lycV9hbGxvYztcXG4gOTE2OlxcdFxcdH1cXG4gOTE3OlxcdFxcbiA5MTg6XFx0XFx0ZXJyID0gcmVxdWVzdF9pcnEocGNpX2lycV92ZWN0b3IocGRldiwgMCksIHByZXN0ZXJhX3BjaV9pcnFfaGFuZGxlcixcXG4gOTE5OlxcdFxcdFxcdFxcdCAgMCwgZHJpdmVyX25hbWUsIGZ3KTtcXG4gOTIwOlxcdFxcdGlmIChlcnIpIHtcXG4gOTIxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWwgdG8gcmVxdWVzdCBJUlFcXFxcblxcXCIpO1xcbiA5MjI6XFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuIDkyMzpcXHRcXHR9XFxuIDkyNDpcXHRcXG4gOTI1OlxcdFxcdGVyciA9IHByZXN0ZXJhX2RldmljZV9yZWdpc3RlcihcXHUwMDI2ZnctXFx1MDAzZWRldik7XFxuIDkyNjpcXHRcXHRpZiAoZXJyKVxcbiA5Mjc6XFx0XFx0XFx0Z290byBlcnJfcHJlc3RlcmFfZGV2X3JlZ2lzdGVyO1xcbiA5Mjg6XFx0XFxuIDkyOTpcXHRcXHRyZXR1cm4gMDtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0ZXJyX3ByZXN0ZXJhX2Rldl9yZWdpc3RlcjpcXG4gOTMyOlxcdFxcdGZyZWVfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCBmdyk7XFxuIDkzMzpcXHRlcnJfcmVxdWVzdF9pcnE6XFxuIDkzNDpcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTtcXG4gOTM1OlxcdGVycl9pcnFfYWxsb2M6XFxuIDkzNjpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShmdy1cXHUwMDNld3EpO1xcbiA5Mzc6XFx0ZXJyX3dxX2FsbG9jOlxcbiA5Mzg6XFx0XFx0cHJlc3RlcmFfZndfdW5pbml0KGZ3KTtcXG4gOTM5OlxcdGVycl9wcmVzdGVyYV9md19pbml0OlxcbiA5NDA6XFx0ZXJyX3BjaV9kZXZfYWxsb2M6XFxuIDk0MTpcXHRlcnJfcHBfaW9yZW1hcDpcXG4gOTQyOlxcdGVycl9tZW1faW9yZW1hcDpcXG4gOTQzOlxcdGVycl9kbWFfbWFzazpcXG4gOTQ0OlxcdGVycl9wY2lfcmVxdWVzdF9yZWdpb25zOlxcbiA5NDU6XFx0ZXJyX3BjaV9lbmFibGVfZGV2aWNlOlxcbiA5NDY6XFx0XFx0cmV0dXJuIGVycjtcXG4gOTQ3OlxcdH1cXG4gOTQ4OlxcdFxcbiA5NDk6XFx0c3RhdGljIHZvaWQgcHJlc3RlcmFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gOTUwOlxcdHtcXG4gOTUxOlxcdFxcdHN0cnVjdCBwcmVzdGVyYV9mdyAqZncgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIDk1MjpcXHRcXG4gOTUzOlxcdFxcdHByZXN0ZXJhX2RldmljZV91bnJlZ2lzdGVyKFxcdTAwMjZmdy1cXHUwMDNlZGV2KTtcXG4gOTU0OlxcdFxcdGZyZWVfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApLCBmdyk7XFxuIDk1NTpcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTtcXG4gOTU2OlxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGZ3LVxcdTAwM2V3cSk7XFxuIDk1NzpcXHRcXHRwcmVzdGVyYV9md191bmluaXQoZncpO1xcbiA5NTg6XFx0fVxcbiA5NTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIxOjIzOjI1LjU2MDc2NTkwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MjY0ODMyNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIG9uIGluIHRob3NlIGxpbmVzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIENvZGUgYXQgTGluZSA5NjArKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gRXhhbWluaW5nIHRoZSBjb2RlIHN0YXJ0aW5nIGF0IGxpbmUgOTYw4oCmIEknbSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBrZXkgaW5kaWNhdG9ycywgdGhlIHVzdWFsIHN1c3BlY3RzLiBXaGF0J3MgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBsaWtlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcz8gV2hhdCB2YXJpYWJsZXMgYXJlIGJlaW5nIGRlY2xhcmVkIG9yIG1vZGlmaWVkIGluIHRoaXMgc2VjdGlvbj8gTXkgaW5pdGlhbCBzY2FuIGlzIGZvciBhbnkgdW51c3VhbCBwYXR0ZXJucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuXG5cbk9rYXksIEkgc2VlLi4uIGl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBbbWVudGlvbiB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aG9zZSBsaW5lczogZGF0YSBwcm9jZXNzaW5nLCBhIHNwZWNpZmljIGFsZ29yaXRobSwgZXRjLl0uIFRoZSBuYW1pbmcgY29udmVudGlvbnMgbG9vayBzdGFuZGFyZCwgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIGNsZWFuIGNvZGluZy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBsb2dpYyBmbG93IGhlcmUuIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzPyBBcmUgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyBoYW5kbGVkIGVmZmljaWVudGx5P1xuXG5IbW0sIGF0IGxpbmUgW21lbnRpb24gYSBsaW5lIG51bWJlciB3aXRoaW4gdGhlIHJhbmdlXSBJJ20gc2VlaW5nIGEgcG9zc2libGUgYXJlYSBmb3Igb3B0aW1pemF0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHBlcmZvcm1pbmcgW2Rlc2NyaWJlIHRoZSBhY3Rpb25dIGluIGEgbG9vcC4gRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBkYXRhIHNldCwgdGhpcyBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGtpbGxlci4gUGVyaGFwcyBhIG1vcmUgZWZmaWNpZW50IGFsZ29yaXRobSBjb3VsZCBiZSB1c2VkIGhlcmU/IEknbSBnb2luZyB0byBib29rbWFyayB0aGF0IGxpbmUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuTm93LCBhdCBsaW5lIFttZW50aW9uIGFub3RoZXIgbGluZSBudW1iZXIgd2l0aGluIHRoZSByYW5nZV0sIHRoZSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuLi4gYWgsIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEknbSB3b25kZXJpbmcgaWYgdGhpcyBjb25kaXRpb24gd2lsbCBhbHdheXMgZXZhbHVhdGUgaW4gdGhlIGludGVuZGVkIHdheT8gUGVyaGFwcyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIGlucHV0IHZhbHVlcyBhcmUgaW4gc29tZSB0ZXN0cy4gXG5cbk92ZXJhbGwsIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBjb2RlIGlzIHJlbGF0aXZlbHkgd2VsbC1zdHJ1Y3R1cmVkLCBidXQgd2l0aCBhIGZldyBhcmVhcyB0aGF0IGRlc2VydmUgbW9yZSBzY3J1dGlueS4gSSdtIGRlZmluaXRlbHkgZ29pbmcgdG8gcnVuIHNvbWUgdGVzdHMgdG8gdmVyaWZ5IHRoZSBhc3N1bXB0aW9ucyBhbmQgbG9vayBpbnRvIHRoYXQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBJdOKAmXMgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHBlcmZvcm0gdGhlc2UgY2hlY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQzMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MzIuODI1NjAxMTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mjc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk2MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHJlc3RlcmFfcGNpX2RldmljZXNbXSA9IHtcXG4gOTYxOlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIFBSRVNURVJBX0RFVl9JRF9BQzNYXzk4RFhfNTUpIH0sXFxuIDk2MjpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfQUMzWF85OERYXzY1KSB9LFxcbiA5NjM6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEX0FMRFJJTjIpIH0sXFxuIDk2NDpcXHRcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCBQUkVTVEVSQV9ERVZfSURfOThEWDczMTJNKSB9LFxcbiA5NjU6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTAwKSB9LFxcbiA5NjY6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTAxKSB9LFxcbiA5Njc6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTEwKSB9LFxcbiA5Njg6XFx0XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgUFJFU1RFUkFfREVWX0lEXzk4RFgzNTIwKSB9LFxcbiA5Njk6XFx0XFx0eyB9XFxuIDk3MDpcXHR9O1xcbiA5NzE6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHByZXN0ZXJhX3BjaV9kZXZpY2VzKTtcXG4gOTcyOlxcdFxcbiA5NzM6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHByZXN0ZXJhX3BjaV9kcml2ZXIgPSB7XFxuIDk3NDpcXHRcXHQubmFtZSAgICAgPSBcXFwiUHJlc3RlcmEgRFhcXFwiLFxcbiA5NzU6XFx0XFx0LmlkX3RhYmxlID0gcHJlc3RlcmFfcGNpX2RldmljZXMsXFxuIDk3NjpcXHRcXHQucHJvYmUgICAgPSBwcmVzdGVyYV9wY2lfcHJvYmUsXFxuIDk3NzpcXHRcXHQucmVtb3ZlICAgPSBwcmVzdGVyYV9wY2lfcmVtb3ZlLFxcbiA5Nzg6XFx0fTtcXG4gOTc5OlxcdG1vZHVsZV9wY2lfZHJpdmVyKHByZXN0ZXJhX3BjaV9kcml2ZXIpO1xcbiA5ODA6XFx0XFxuIDk4MTpcXHRNT0RVTEVfTElDRU5TRShcXFwiRHVhbCBCU0QvR1BMXFxcIik7XFxuIDk4MjpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1hcnZlbGwgUHJlc3RlcmEgc3dpdGNoIFBDSSBpbnRlcmZhY2VcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6MzIuODI1NzQ2NTk3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4OTI3Nzk3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFByZXN0ZXJhIEhXIENvdW50ZXIgTGFuZHNjYXBlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBkZWVwIGludG8gdGhpcyBQcmVzdGVyYSBjb2RlLCBhbmQgSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGhhbmRsZSBvbiBob3cgdGhlc2UgaGFyZHdhcmUgY291bnRlcnMgYXJlIGJlaW5nIGFjY2Vzc2VkIGFuZCBtYW5hZ2VkLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgYXJlIHRoZXJlICpvdGhlciogcGxhY2VzLCBiZXlvbmQgd2hhdCBJJ3ZlIGFscmVhZHkgdW5jb3ZlcmVkLCB3aGVyZSBgcHJlc3RlcmFfaHdfY291bnRlcnNfZ2V0YCwgYHByZXN0ZXJhX2NvdW50ZXJfc3RhdHNfd29ya2AsIG9yIGFueSBvdGhlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUHJlc3RlcmEgYnVzIG9yIGRldmljZSByZWdpc3RyYXRpb25zIGFyZSBoYXBwZW5pbmc/IEkgbmVlZCB0byBiZSAqc3VyZSogSSdtIHNlZWluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIEkgY2FuJ3QgbGVhdmUgYW55IHN0b25lIHVudHVybmVkLCB5b3Uga25vdz9cblxuVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gcnVuIGEgZm9jdXNlZCBgZ3JlcHBlcmAgc2Vzc2lvbi4gSSB3YW50IHRvIHVuY292ZXIgZXZlcnkgaW5zdGFuY2UsIGV2ZXJ5IGNhbGwsIGV2ZXJ5IHJlZ2lzdHJhdGlvbiwgYW5kIGV2ZXJ5IHBvaW50IG9mIGFjY2Vzcy4gV2UgbmVlZCBhIGNvbXByZWhlbnNpdmUgdmlldyBoZXJlLCBhbmQgZ3JlcHBpbmcgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCBhIHNvbGlkIGxpc3QuIEl0J3MgdGltZSB0byBkaWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDUxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzozNC43MTg1MzEzODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Nzc2MzU2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaD0zNDU9c3RhdGljIGlubGluZSB1MzIgcHJlc3RlcmFfcmVhZChjb25zdCBzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmEuaC0zNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYS5oOjM1MTppbnQgcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwcmVzdGVyYV9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYS5oLTM1Mi12b2lkIHByZXN0ZXJhX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBwcmVzdGVyYV9kZXZpY2UgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYz0xNDUyPXN0YXRpYyB2b2lkIHByZXN0ZXJhX3N3aXRjaF9maW5pKHN0cnVjdCBwcmVzdGVyYV9zd2l0Y2ggKnN3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX21haW4uYzoxNDcwOmludCBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHByZXN0ZXJhX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfbWFpbi5jLTE0NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ4OS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmM6MTQ5MDpFWFBPUlRfU1lNQk9MKHByZXN0ZXJhX2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9tYWluLmMtMTQ5MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcGNpLmM9ODM3PXN0YXRpYyBpbnQgcHJlc3RlcmFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuYy05MjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9wY2kuYzo5MjU6XFx0ZXJyID0gcHJlc3RlcmFfZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZmdy1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3BjaS5jLTkyNi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzozNy42OTYxNzc5MDFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTM2NDgyOTgxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIGBwcmVzdGVyYV9kZXZpY2VfcmVnaXN0ZXJgIGlzIGNhbGxlZCBleGNsdXNpdmVseSBieSBgcHJlc3RlcmFfcGNpX3Byb2JlYCwgd2hpY2gsIGFzIEkga25vdywgaXMgdGhlIFBDSSBkcml2ZXIgZm9yIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDcy4gV2UncmUgdGFsa2luZyBhYm91dCB0aG9zZSBzcGVjaWZpYyBBU0lDcyDigJMgQWxkcmluLCBBQzNYLCBBQzVYLCB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoaXMgaXNuJ3Qgc29tZSBnZW5lcmljIG5ldHdvcmsgY2FyZDsgaXQncyBhIHNwZWNpYWxpemVkIHBpZWNlIG9mIGhhcmR3YXJlLiBDcnVjaWFsbHksIHRoaXMgZHJpdmVyIG5lZWRzIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIEFTSUMgdGhyb3VnaCBQQ0llIGFuZCBpbnZvbHZlcyBwaHlzaWNhbCBmaXJtd2FyZSBsb2FkaW5nIChgcHJlc3RlcmFfZndfaW5pdGAsIHNwZWNpZmljYWxseSkuIFdlIGRvd25sb2FkIGZpcm13YXJlLCB3YWl0IGZvciBpdCB0byBib290LCBhbmQgY29tbXVuaWNhdGUgdmlhIG1haWxib3hlcyBvciBQQ0llIEJBUnMuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGF0IHNlY29uZCBzZWN0aW9uIG9mIHRoZSBwcm9tcHQsIHRoZSBcIk5FR0FUSVZFIENSSVRFUklBXCI6IFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiIEJpbmdvLiBUaGUgTWFydmVsbCBQcmVzdGVyYSBkcml2ZXIgZml0cyB0aGF0ICpwZXJmZWN0bHkqLiBJdCdzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBBU0lDIGRyaXZlciByZWxpYW50IG9uIHBoeXNpY2FsIGhhcmR3YXJlLiBObyB3YXkgdGhpcyBydW5zIHdpdGhvdXQgdGhhdC5cblxuU28sIHdoZXJlIGFyZSB0aGUgY2hhbmdlcz8gQ2hlY2tpbmcgdGhlIGZpbGVzOiBgcHJlc3RlcmFfY291bnRlci5jYCwgYHByZXN0ZXJhX2h3LmNgLCBhbmQgYHByZXN0ZXJhX2h3LmhgLiBBbGwgdHVja2VkIG5lYXRseSB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvYC4gVGhpcyBpcyBnb29kOyBzdHJpY3RseSB3aXRoaW4gdGhlIGRlc2lnbmF0ZWQgZHJpdmVyIGRpcmVjdG9yeS4gVGhlc2UgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyBhIGJ1ZmZlciBvdmVyZmxvdyBpc3N1ZSByZWxhdGVkIHRvIHJlYWRpbmcgY291bnRlciBzdGF0cyBmcm9tIGhhcmR3YXJlIHJlc3BvbnNlcy4gRXNzZW50aWFsbHksIHRoZXJlJ3MgYSBib3VuZHMgY2hlY2sgdnVsbmVyYWJpbGl0eS4gVGhpcyBjb2RlICpvbmx5KiBleGVjdXRlcyB3aGVuIHRoZSBQcmVzdGVyYSBTd2l0Y2ggQVNJQyBpcyBjb25uZWN0ZWQgdmlhIFBDSWUgYW5kIHN1Y2Nlc3NmdWxseSBwcm9iZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBmYWxscyBkaXJlY3RseSB1bmRlciBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS5cIiBJdCBjYW4ndCBiZSBlbXVsYXRlZCBvciBpbnN0YW50aWF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIgZW52aXJvbm1lbnRzLiBJdCAqbmVlZHMqIHRoYXQgcGh5c2ljYWwgQVNJQy5cblxuQ29uc2VxdWVudGx5LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYWJzb2x1dGVseSBiZSBgZmFsc2VgLlxuXG5Gb3IgYHNldC1yZXN1bHRzYCwgaGVyZSBhcmUgdGhlIHBhcmFtZXRlcnM6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gIChlbXB0eSBsaXN0LCBiZWNhdXNlIGBXb3J0aEZ1enppbmdgIGlzIGZhbHNlKVxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgbGlzdCwgYmVjYXVzZSBgV29ydGhGdXp6aW5nYCBpcyBmYWxzZSlcbiogICBgUmVhc29uaW5nYDogVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGxpbWl0ZWQgdG8gdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9gKSwgYSB2ZW5kb3Itc3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGRyaXZlciB0aGF0IG5lY2Vzc2l0YXRlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgaGFyZHdhcmUgYW5kIGZpcm13YXJlIG5vdCBzaW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgcmVuZGVycyB0aGUgYWx0ZXJlZCBjb2RlIHN0cnVjdHVyYWxseSBpbmFjY2Vzc2libGUuXG5cbkkgc3VwcG9zZSwgZm9yIGdvb2QgbWVhc3VyZSwgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGNvbmZpZ3MuIGBQUkVTVEVSQWAgYW5kIGBQUkVTVEVSQV9QQ0lgLiBCdXQsIGFzIEkgc2FpZCwgc2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgYEVuYWJsZUNvbmZpZ3NgIGFuZCBgRm9jdXNTeW1ib2xzYCBhcmUgZW1wdHkuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI3NiwiT3V0cHV0VG9rZW5zIjoxMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMjE6MjM6NTEuMzQ0NDc5NDA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgUHJlc3RlcmEgU3dpdGNoIEFTSUMgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhLykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIEV0aGVybmV0IHN3aXRjaCBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBNYXJ2ZWxsIFByZXN0ZXJhIFBDSWUgc3dpdGNoIGhhcmR3YXJlIGFuZCBmaXJtd2FyZSBsb2FkaW5nIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIFByZXN0ZXJhIFN3aXRjaCBBU0lDIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS8pLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBFdGhlcm5ldCBzd2l0Y2ggZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgTWFydmVsbCBQcmVzdGVyYSBQQ0llIHN3aXRjaCBoYXJkd2FyZSBhbmQgZmlybXdhcmUgbG9hZGluZyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMToyMzo1MS4zNDQ1MDkxMzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown6q4w[1] Phase: Running StartedAt: 2026-09-14 21:24:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflown6q4w[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 21:24:02 +0000 UTC FinishedAt: 2026-09-14 21:24:07 +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,}